Что: 7e0940095a5cb2f005af4a276c254829b9d1bf86 Когда: 2023-01-31 20:23:07+03:00 ------------------------------------------------------------------------ Темы: tcl ------------------------------------------------------------------------ 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 например такого ничего нет (но есть треды из коробки, классические). ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20Tcl%20%D0%BD%D0%B0%20%D0%BF%D0%B0%D1%83%D0%B7%D0%B5%20%287e0940095a5cb2f005af4a276c254829b9d1bf86%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0