From: Sergey Matveev Date: Mon, 22 Aug 2022 14:21:56 +0000 (+0300) Subject: Переписал zdns на Tcl X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=d4eadab571bf5e8ea00d19598f129a708a322d15;p=stargrave-blog.git Переписал zdns на Tcl http://www.git.stargrave.org/?p=zdns.git;a=commitdiff;h=bb68fcc5ab280623651b31953e149d364d3f7bf9 Не преследуя никакой практической цели, кроме как потрогать Tcl вновь, чтобы развеяться. Этот язык я в руки не брал с момента написания tofuproxy (который тоже почти не трогается, ибо just works -- почти все HTTP запросы на моём компьютере проходят через него, даже WARC временами использую). И вот почти ничего не помня про Tcl, я почти без единого спотыкания и почти без единой ошибки во время выполнения всё переписал. Только одна ошибка запомнилась: если закрыть канал, являющийся stdout-ом от другой команды, не дочитав всё до конца (я читаю OpenPGP ключ и выхожу когда нужный UID был прочитан), то программа выходит с ошибкой (что ожидаемо) и Tcl ловит эту ошибку падая. Ну и забыл что глобальные переменные по умолчанию не видны в процедурах. Всю документацию, кроме одной базовой книжки в PDF по Tcl, я брал из man-ов, благо до которых у меня прекрасно работает мой клёвый настроенный completion в zsh: % man index [...] ... manual page, section 5 (file formats and conventions) INDEX portindex ... manual page, section 9 (kernel features) bhnd_get_core_index ifaddr_byindex ... manual page, section n (new documentation) auto_mkindex.tcl86 lindex.tcl86 pkg_mkIndex.tcl86 ... parameter ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX И эти man-ы очень понравились, наличием ценнейших простых примеров, где тот же намёк на использование while {getc} и catch{close} имеется. Непередаваемое чувство, когда ты пишешь всякий код, много или не очень, а он просто берёт и выполняется без проблем. Такое у меня только с Go было. Tcl очень приятен! ---