[О блоге]
[наверх]
[пред]
[2023-01-31 20:23:07+03:00]
[7e0940095a5cb2f005af4a276c254829b9d1bf86]
Темы: [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
например такого ничего нет (но есть треды из коробки, классические).
[оставить комментарий]