Tcl действительно сильно недооценивают, и уж особенно в русскоязычной программистской среде (оно и понятно ... в 90-х и первой половине 2000-х, когда Tcl был более-менее на слуху и обсуждался - русскоязычная программистская общественность лежала в руинах, и занималась челночной торговлей дамскими прокладками).Для начала огорчу тех, кто с пеной у рта кричит о том, что «Tcl не нужен» или «Tcl мертв». Для опровержения последнего — посмотрите на дату выпуска последней версии интерпретатора Tcl/Tk. Про первое — ненужный язык не станут использовать AOL, BMW, CPU за его создание не станут давать ACM Software System Award. В настоящий момент разработки на Tcl/Tk ведутся в основном в недрах компаний, которые пишут на данном языке программное обеспечение для внутреннего пользования. Поэтому говоря о непопулярности Tcl/Tk мы прежде всего говорим о его непопулярности среди разработчиков настольных пользовательских приложений.
...
Среди разработчиков свободного ПО с открытым кодом популярность Tcl стала меньше благодаря FSF и Ричарду Столлману в частности. В сентябре 1994 году RMS надолго «утопил» продуктивные идеи Tcl/Tk своей рекомендацией «Почему вы не должны использовать Tcl» в котором концентрируется внимание на якобы невозможно сложном синтаксисе Tcl (приводя в качестве контраргумента язык с куда более тяжелым синтаксисом, но четкой семантикой — Lisp) и о «подкупающей хакеров простоте Tcl». Не разобравшись с основными идеями «расширяемости» и «расширения» Тикл, RMS наносит последний удар, утверждая, что Tcl пригоден только для маленьких приложений и выносит вердикт: «Поэтому проект GNU не собирается использовать Tcl в программном обеспечении GNU». Особенно странно это ввиду того, что Lisp и Tcl имеют общие черты и идеи, в частности — та же расширяемость. Несмотря на все старания Столлмана Tcl так и не «потонул», а «лисп» не смог занять ведущую позицию среди языков для разработки настольных приложений.
В Tcl очень простыми средствами достигаются такие вещи, как функции высших порядков, анонимные функции и т.д.
См. (это пример, приводимый авторами в документации):
Код: Выделить всё
[olej@dell Tcl]$ cat map.tcl
#!/usr/bin/tclsh
proc map { lambda list } {
set result {}
foreach item $list {
lappend result [ apply $lambda $item ]
}
return $result
}
puts [ map { x { return [ string length $x ]:$x } } { a bb ccc dddd } ]
Код: Выделить всё
[olej@dell Tcl]$ ./map.tcl
1:a 2:bb 3:ccc 4:dddd