From 7e0940095a5cb2f005af4a276c254829b9d1bf86 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 31 Jan 2023 20:23:07 +0300 Subject: [PATCH] =?utf8?q?Tcl=20=D0=BD=D0=B0=20=D0=BF=D0=B0=D1=83=D0=B7?= =?utf8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Недавно писал что начал проект на Tcl (e228f38a55fb5888a6bf304f7a189ebe671ba86b). Но когда столкнулся с необходимостью парсить и работать с огромным количеством бинарных данных и структур, то пока поставил Tcl на паузу. Пока просто откладываю его в сторону. Но отсутствие структур пока немного угнетает. Зато некоторые вещи, типа вот функи чтения из сокета netstring-а выглядят довольно элегантно, просто, минималистично, при этом строго валидируя. Например на wiki Tcl-а не было строгих валидаторов в качестве примера. proc ::netstring::get sock { set len "" while {![eof $sock]} { set b [read $sock 1] if {$b eq ":"} break if {![string match {[0-9]} $b]} {error "bad digit"} if {($b eq 0) && ($len eq "")} {error "leading zero"} set len "$len$b" } if {$len eq ""} {error "no digits found"} set data [read $sock $len] if {[string length $data] != $len} {error "not enough data"} if {[read $sock 1] ne ","} {error "no terminator"} return $data } proc ::netstring::put {sock data} { set len [string length $data] puts -nonewline $sock "$len:$data," flush $sock } Поигрался с его механизмом для конкурентной работы с сокетами. Приятно с этим работать из-за малого количества кода который надо писать. В Perl например такого ничего нет (но есть треды из коробки, классические). -- 2.50.0