From: Sergey Matveev Date: Tue, 31 Jan 2023 17:23:07 +0000 (+0300) Subject: Tcl на паузе X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=7e0940095a5cb2f005af4a276c254829b9d1bf86;p=stargrave-blog.git Tcl на паузе Недавно писал что начал проект на 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 например такого ничего нет (но есть треды из коробки, классические). ---