[О блоге] [наверх] [пред] [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
например такого ничего нет (но есть треды из коробки, классические).

    [оставить комментарий]