Язык tcl


Tcl - Энциклопедия языков программирования

Tcl (аббревиатура от “Tool Command Language”) — скриптовый язык. Используется для быстрого прототипирования, написания автоматизированных тестеров и скриптовых приложений.

Tcl был создан John Ousterhout в 1988 году. Ему нужен был простой интерпретируемый язык, который предоставлял бы набор базовых конструкций программирования, легко бы расширялся и встраивался в любые инструменты.

В 1990 году Tcl дополнился Tk — инструментарием для разработки графических интерфейсов пользователя под Unix. Сочетание встраивоемости Tcl и простоты использования Tk вызвало быстрый рост популярности языка.

Характерные черты Tcl:

  • все элементы программы, включая циклы, определения функций и т.д., являются командами и имеют однообразный синтаксис.
  • команды записываются в префиксной нотации, т.е. вначале пишется имя команды, затем — список аргументов.
  • большинство команд могут принимать различное число аргументов.
  • все команды генерируют сообщения об ошибках в случае их неправильного использования.
  • язык предоставляет ряд стандартных типов данных; при этом все данные и исходный код могут рассматриваться и обрабатываться как строки.
  • все значения постоянны (immutable): когда нужно изменить некоторое значение, оно просто заменяется на созданное заново.
  • Tcl не включал поддержку объектно-ориентированного программирования до версии 8.6, но элементы ООП можно было использовать при помощи пакетов расширения.

Выражения Tcl записываются либо в фигурных скобках (чтобы запретить любую обработку их содержимого), либо без скобок или в квадратных скобках; в последнем случае используется три типа замен:

  • замена команд заменяет содержимое квадратных скобок результатом его вычисления, например, [expr 1+2] заменится на 3.
  • замена переменных заменяет имя переменной со знаком $ перед ним на содержимое этой переменной.
  • замена обратного слэша аналогична правилам других языков: пара “обратный слэш + символ” заменяется на другой символ.

Примеры:

Hello, World!:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Факториал:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Используется итеративный метод вычисления факториала. В Tcl 8.4 значения факториалов, начиная с 13!, вычисляются неправильно из-за переполнения. В более поздних версиях и других реализациях все значения правильны.

set fact 1 for {set i 0} {$i <= 16} {incr i} { puts "$i! = $fact" set fact [expr {$fact * ($i + 1)}] } 

Числа Фибоначчи:

Пример для версий ActiveTcl 8.5, Tcl 8.5.7

Используется итеративное определение чисел Фибоначчи. lassign присваивает последовательные элементы списка, переданного в качестве первого аргумента (в данном случае — созданного командой [list ...]), переменным, заданным следующими аргументами (fib1 и fib2). Эта команда была перенесена в основной язык в версии Tcl 8.5, до того она входила в пакет TclX.

set fib1 0 set fib2 1 set s "" for {set i 0} {$i < 16} {incr i} { lassign [list $fib2 [incr fib2 $fib1]] fib1 fib2 append s "$fib1, " } puts "$s..." 

Числа Фибоначчи:

Пример для версий ActiveTcl 8.5, Tcl 8.5.7

Для вычисления чисел Фибоначчи используется рекурсия. Функция fib определяется в пространстве имен tcl::mathfunc, для того, чтобы ее можно было использовать как функцию в выражениях expr.

proc tcl::mathfunc::fib {n} { if {$n<=1} { return 1 } else { return [expr fib([expr {$n - 1}]) + fib([expr {$n - 2}])] } } set s "" for {set i 0} {$i < 16} {incr i} { append s [expr fib($i)] ", " } puts "$s..." 

Квадратное уравнение:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7
set A [gets stdin] if {$A==0} { puts "Not a quadratic equation."; return } set B [gets stdin] set C [gets stdin] set D [expr {$B*$B-4*$A*$C}] set r [expr {-0.5*$B/$A}] set i [expr {0.5*sqrt(abs($D))/$A}] if {$D==0} { puts "x = $r" } elseif {$D>0} { puts "x1 = [expr {$r+$i}]" puts "x2 = [expr {$r-$i}]" } else { puts "x1 = ($r, $i)" puts "x2 = ($r, [expr {-$i}])" } 

CamelCase:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Строка обрабатывается посимвольно. Для проверки того, что символ является буквой, используется регулярное выражение.



set S [gets stdin] set S [string tolower $S] set L [string length $S] set lastSpace 1 set cc "" for {set i 0} {$i < $L} {incr i} { set letter [string index $S $i] if { [string match {[a-z]} $letter] } { if { $lastSpace == 1 } { set letter [string toupper $letter] } append cc $letter set lastSpace 0 } else { set lastSpace 1 } } puts $cc 

Числа Фибоначчи:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Используется итеративное определение чисел Фибоначчи.

set fib1 0 set fib2 1 set s "" for {set i 0} {$i < 16} {incr i} { set fib3 [expr {$fib1 + $fib2}] set fib1 $fib2 set fib2 $fib3 append s "$fib1, " } puts "$s..." 

Числа Фибоначчи:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Для вычисления чисел используется хвостовая рекурсия. Команда eval позволяет вычислить результат вызова функции fib с заданными аргументами без объявления fib в определенном пространстве имен.

proc fib {f1 f2 n} { if {$n==0} { return $f1 } else { return [eval fib $f2 [expr {$f1 + $f2}] [expr {$n - 1}]] } } set s "" for {set i 0} {$i < 16} {incr i} { append s [eval fib 1 1 $i] ", " } puts "$s..." 

Tcl - реализация языка программирования Tcl

Tcl — оригинальная реализация языка Tcl, созданная в 1988 году и развивающаяся с тех самых пор. Она кроссплатформенная, распространяется под лицензией Tcl/Tk (разновидностью BSD-лицензии) и является открытым ПО.

После установки Tcl обычно запускается командой tclsh — интерпретатором с интерфейсом командной строки. Может принимать команды как из файла-скрипта, так и интерактивно от пользователя. Также часто используется wish (от “windowing shell”), который автоматически загружает расширение Tk. Кроме того, Tcl можно запускать из любой среды разработки, поддерживающей этот язык.

Примеры:

Hello, World!:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Факториал:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Используется итеративный метод вычисления факториала. В Tcl 8.4 значения факториалов, начиная с 13!, вычисляются неправильно из-за переполнения. В более поздних версиях и других реализациях все значения правильны.

set fact 1 for {set i 0} {$i <= 16} {incr i} { puts "$i! = $fact" set fact [expr {$fact * ($i + 1)}] } 

Числа Фибоначчи:

Пример для версий ActiveTcl 8.5, Tcl 8.5.7

Используется итеративное определение чисел Фибоначчи. lassign присваивает последовательные элементы списка, переданного в качестве первого аргумента (в данном случае — созданного командой [list ...]), переменным, заданным следующими аргументами (fib1 и fib2). Эта команда была перенесена в основной язык в версии Tcl 8.5, до того она входила в пакет TclX.

set fib1 0 set fib2 1 set s "" for {set i 0} {$i < 16} {incr i} { lassign [list $fib2 [incr fib2 $fib1]] fib1 fib2 append s "$fib1, " } puts "$s..." 

Числа Фибоначчи:

Пример для версий ActiveTcl 8.5, Tcl 8.5.7

Для вычисления чисел Фибоначчи используется рекурсия. Функция fib определяется в пространстве имен tcl::mathfunc, для того, чтобы ее можно было использовать как функцию в выражениях expr.

proc tcl::mathfunc::fib {n} { if {$n<=1} { return 1 } else { return [expr fib([expr {$n - 1}]) + fib([expr {$n - 2}])] } } set s "" for {set i 0} {$i < 16} {incr i} { append s [expr fib($i)] ", " } puts "$s..." 

Квадратное уравнение:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7
set A [gets stdin] if {$A==0} { puts "Not a quadratic equation."; return } set B [gets stdin] set C [gets stdin] set D [expr {$B*$B-4*$A*$C}] set r [expr {-0.5*$B/$A}] set i [expr {0.5*sqrt(abs($D))/$A}] if {$D==0} { puts "x = $r" } elseif {$D>0} { puts "x1 = [expr {$r+$i}]" puts "x2 = [expr {$r-$i}]" } else { puts "x1 = ($r, $i)" puts "x2 = ($r, [expr {-$i}])" } 

CamelCase:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Строка обрабатывается посимвольно. Для проверки того, что символ является буквой, используется регулярное выражение.

set S [gets stdin] set S [string tolower $S] set L [string length $S] set lastSpace 1 set cc "" for {set i 0} {$i < $L} {incr i} { set letter [string index $S $i] if { [string match {[a-z]} $letter] } { if { $lastSpace == 1 } { set letter [string toupper $letter] } append cc $letter set lastSpace 0 } else { set lastSpace 1 } } puts $cc 

Числа Фибоначчи:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Используется итеративное определение чисел Фибоначчи.

set fib1 0 set fib2 1 set s "" for {set i 0} {$i < 16} {incr i} { set fib3 [expr {$fib1 + $fib2}] set fib1 $fib2 set fib2 $fib3 append s "$fib1, " } puts "$s..." 

Числа Фибоначчи:

Пример для версий ActiveTcl 8.5, JTcl 2.1.0, Tcl 8.4, Tcl 8.5.7

Для вычисления чисел используется хвостовая рекурсия. Команда eval позволяет вычислить результат вызова функции fib с заданными аргументами без объявления fib в определенном пространстве имен.

proc fib {f1 f2 n} { if {$n==0} { return $f1 } else { return [eval fib $f2 [expr {$f1 + $f2}] [expr {$n - 1}]] } } set s "" for {set i 0} {$i < 16} {incr i} { append s [eval fib 1 1 $i] ", " } puts "$s..." 

Учебник TCL - javatokens

В этом разделе находится учебник языка программирования TCL. Аббревиатура TCL расшифровывается как "Tool Command Language" -- "Инструмент, Команда, Язык", или же "командный язык инструментов". По английски название этого языка произноситься как "тикль", по русски-же его можно называть "тыкль", так как такое произношение названия является более естественным для людей говорящих на русском языке.

Тыкль, по своей сущности, является скриптовым языком программирования, с динамической типизацией данных. Этот язык программирования используется для быстрого создания прототипов, тестирования и создания GUI (графического интерфейса пользователя, ГИП). Библиотека ГИП Тыкля, которая называется Tcl/Tk, является основной библиотекой для создания ГИП на языке Python, благодаря чему, она получила достаточно широкое распространение.

Тыкль обладает очень необычным синтаксисом, который только на первый взгляд напоминает С-подобные языки. Помимо этого, Тыкль характеризуется весьма любопытными средствами управления ходом исполнения программ, так из любой функции можно не просто выйти, но и остановить выполнение внешней функции.

Ещё одной любопытной особенностью тыкля является то, что, по большому счёту, в нём всё является строками, так, например, следующий код содержит вызов команды while:

set x 10
while {$x > 0} {
   puts "x ($x) больше нуля"; incr x -1
   }


  
который представляет из себя три строковых литерала:

  1. while
  2. $x > 0
  3. puts "x ($x) больше нуля"; incr x -1.

Причём любой из них может быть заменён на строку содержащуюся в переменной:

set x 10
set oper "while"
set cond {$x > 0}
set body {puts "x ($x) больше нуля"; incr x -1}
$oper $cond $body

где переменная oper содержит имя команды "while", а переменные cond и body содержат условие и тело цикла, и могут изменять своё содержимое во время исполнения программы, т.е. тыкль предоставляет разработчику возможность менять структуру программы во время исполнения.

Быстрое введение в Tcl - Программирование для начинающих


Данная статья посвящена быстрому введению в азы языка tcl, который для меня стал первым промышленным языком, изученным самостоятельно по той же схеме (в виде уроков на сайте), которую будут использовать наши читатели. Прежде чем переходить к самому уроку - давайте разберемся, что же это за язык такой.
Язык Tcl
Tcl (от англ. Tool Command Language — «командный язык инструментов», читается «тикль» или «ти-си-эль») — скриптовый язык высокого уровня.
Tcl часто применяется совместно с графической библиотекой Tk (Tool Kit). Связку Tcl/Tk по-русски иногда называют «Так-тикль» (английский вариант — «тикль-ток»).
Области применения языка — быстрое прототипирование, создание графических интерфейсов для консольных программ (пакетов программ), встраивание в прикладные программы, тестирование. Также Tcl применяется в веб-разработке.

Немного историиЯзык разработан Джоном Оустерхаутом (John Ousterhout) в то время, когда он работал в университете Калифорнии в Беркли. Первоначальной целью было создание универсального языка для встраивания в консольные приложения. Вслед за этим Оустерхаут расширил свой язык средствами создания графических интерфейсов — так появился Tcl/Tk.
За 4 года развития в университетских стенах Тикль-сообщество выросло до нескольких сотен тысяч программистов. В 1993 году было разработано первое объектно-ориентированное расширение — incr Tcl.
В 1994 г. Оустерхаут становится ведущим инженером проекта SunScript. В течение следующих 4 лет, став одним из проектов корпорации Sun, Тикль не только остался свободно распространяемой системой, но и значительно усовершенствовался, стал кросс-платформенным.
Заметный удар по популярности языка нанёс Ричард Столлман, опубликовав в сентябре 1994 г. в ряде новостных групп рекомендацию «Почему вы не должны использовать Tcl». В ней он на основании утверждений, что «Tcl разработан не как серьёзный язык программирования» и «Tcl имеет особый синтаксис, притягательный для хакеров из-за своей простоты. Но синтаксис Tcl кажется странным для большинства пользователей.», а также в связи с продвижением Emacs Lisp вынес вердикт: «проект GNU не собирается использовать Tcl в программном обеспечении GNU». Помимо субъективных претензий к дизайну языка, Столлман указал на объективный на тот момент недостаток — низкое быстродействие.
Тем не менее, рост количества разработчиков, активно использующих тикль, составил за этот период 600 %.
В 1998 г. в связи с Java-бумом и связанной с ним острой конкурентной борьбой корпорация уже не могла уделять тиклю прежнего внимания. Джон Оустерхаут покидает Sun и создаёт (при поддержке Sun) компанию Scriptics, продолжая развитие технологии Tcl/Tk. Это была одна из первых коммерческих программных фирм, чья деятельность строилась вокруг бесплатного свободного ПО.
Цветовое решение логотипа, принятое в 90-х гг. XX века
В марте 1998 года Оустерхаут пишет ставшую классической статью «Сценарии: высокоуровневое программирование для XXI века», в которой назвал скриптовые языки языками системной интеграции, потому что они ориентированы прежде всего на работу с объектами операционной среды, а не с элементарными данными. Это позволяет без написания тысяч строк кода двумя-тремя командами «склеивать» такие объекты в одно целое.
В том же году он выиграл за разработку языка Tcl две крупных награды. Первая — это ACM Software System Award, вручаемая за «наиболее значимое программное обеспечение». Этой наградой до этого были отмечены такие основополагающие системы, как стек протоколов TCP/IP, первая электронная таблица, первая реляционная база данных, World Wide Web, Unix, PostScript и Smalltalk. Вторая — это ежегодная USENIX Software Tools User Group (STUG) Award, в знак признания выдающегося программного обеспечения.
В 1999 году выходит Tcl 8.0 — в этой реализация впервые появилась компиляция в байткод, что позволило в 6 раз поднять быстродействие. В следующую модификацию Tcl 8.1 введена полноценная поддержка юникода, в ней впервые реализована многопоточность. В связи c этим релизом Оустерхаут заявил: «В целом 8.1 переводит Tcl в новую категорию, поскольку теперь его можно использовать для серверных приложений. Си, Си++ и Java можно по-прежнему использовать для создания частей приложений, критических с точки зрения производительности, а Tcl — для интеграции и создания интерфейсных компонентов».
В 2000 году фирма Scriptics была переименована в Ajuba Solutions, а затем куплена фирмой Interwoven, не заинтересованной в работе со свободным ПО. В связи с этим разработка Tcl была передана сообществу программистов. Так была сформирована Tcl Core Team.
На 9-й конференции по Tcl/Tk, проходившей в Ванкувере, была представлена виртуальная файловая система StarKit, обеспечившая новый, удобный для обычного пользователя способ распространения Tcl программ.
(Данный материал взят со всеми любимой Wikipedia: https://ru.wikipedia.org/wiki/Tcl)

А теперь немного моего личного мнения. Как таковой язык Tcl является прекрасным языком программирования, который имеет массу библиотек (его количество "батареек" сегодня одно из самых больших), выдержан временем (т.е. в нем уже нет детских болезней, как у того же Go), а так же - он по настоящему прост в изучении. Освоить его можно за пару дней! И при этом язык будет полезен как системному администратору (скрипты пишутся очень удобно), так и программисту.

TCL: причины низкой популярностиДля начала огорчу тех, кто с пеной у рта кричит о том, что "Tcl не нужен" или "Tcl - мертв". Для опровержения последнего - посмотрите на дату выпуска последней версии интерпретатора Tcl/Tk.
Про первое - не нужный язык не станут использовать AOL, BMW, CPU за его создание не станут давать ACM Software System Award. В настоящий момент разработки на Tcl/Tk ведутся в основном в недрах компаний, которые пишут на данном языке программное обеспечение для внутреннего пользования.  Поэтому говоря о непопулярности Tcl/Tk мы прежде всего говорим о его непопулярности среди разработчиков настольных пользовательских приложений.
Следующие аргумент, который выдвигают в качестве непопулярности Tcl/Tk - это то, что стандартный вид набора виджетов не красивый, как пример - приводят jabber-клиент tkabber. По данному заявлению стоит отметить - набор стандартных виджетов имеет по умолчанию значения атрибутов, которые соответствуют бородатому Motiff, внешней вид которого действительно является немного анохроническим.
Но зачем использовать значения по умолчанию? Опытный разработчик на Tcl/Tk способен сделать интерфейс по внешнему виду ничем не уступающий большинству приложений.
Далее - сегодня Тк поддерживает "темы" и внешне может подстраиваться под внешний вид графического окружения операционной системы, что делает программы на Tcl/Tk неотличимымы от их аналогов чисто внешне.
Существенным минусом для многих команд разработчиков коммерческого ПО стало то, что программы на языке до сих пор распространяются в виде исходных кодов, без предварительного перевода в байт-код, т.е. программное обеспечение написанное на Tcl/Tk является ПО с открытым исходным кодом. А большинство разработчиков коммерческого ПО избегают этого.
Среди разработчиков свободного ПО с открытым кодом популярность Tcl стала меньше благодаря FSF и Ричарду Столлману в частности. В сентябре 1994 году RMS надолго "утопил" продуктивные идеи Tcl/Tk своей рекомендацией "Почему вы не должны использовать Tcl" в котором концентрируется внимание на якобы невозможно сложном синтаксисе Tcl (приводя в качестве контраргумента язык с куда более тяжелым синтаксисом, но четкой семантикой, - Lisp) и о "подкупающей хакеров простоте Tcl". Не разобравшись с основными идеями "раширяемости" и "расширения" Тикл, RMS наносит последний удар, утверждая, что Tcl пригоден только для маленьких приложений и выносит вердикт: "Поэтому проект GNU не собирается использовать Tcl в программном обеспечении GNU". Особенно странно это ввиду того, что Lisp и Tcl имеют общие черты и идеи, в частности - та же расширяемость. Несмотря на все старания Столлмана Tcl так и не "потонул", а "лисп" не смог занять ведущую позицию среди языков для разработки настольных приложений.
Как видит пытливый ум - нет не одной объективной причины не изучать и не использовать Tcl. Перед тем как перейти к уроку, давайте еще пройдемся по самым часто задаваемым вопросам по этому языку.

Часто задаваемые вопросыВопрос (В): Что такое Tcl?
Ответ (О): Tcl - это скриптовый язык программирования высокого уровня. Считается одним из трех классических скриптовых языков. До пришествия РНР использовался вместо последнего. Очень тесно взаимосвязан с тулкитом Tk, что позволяет в короткие сроки писать достаточно функциональные программы с GUI.
В: Зачем учить Tcl, ведь можно использовать любой скриптовый язык с привязкой к Tk?
О: Можно. Но лучше использовать любой тулкит в "родной" для него среде (код выглядит органичнее). Да и программы на чистом Tcl/Tk работают быстрее, чем при помощи мостов для Ruby/Tk, Perl/Tk и пр., так как тащат за собой обе среды исполнения. Так же страдает от этого переносимость программ и скриптов - для запуска файла будет требоваться установленную среду не только скриптового языка, на котором написана программа, но и Tcl/Tk (первый необходим как раз таки в качестве "моста").
В: Но есть же Lisp!
О: Да, он есть. И Tcl с ним некоторые программисты сравнивают. Даже называют "Tcl - Lisp On Drugs". Языки и правда похожи - работа со списками, метапрограммирование. Но есть и серьезные различия. Например, в Tcl все есть строка, а не символ.
В: Могу ли я писать на Tcl функционально?
О: Можете. Tcl позволяет писать в функциональном стиле.
В: Какие парадигмы поддерживает Tcl/Tk?
О: Императивную, функциональную, объектно-ориентированную. Функциональная с версии 8.6 поддерживается очень хорошо, в ней наконец-то была правильно реализована хвостовая рекурсия. Последняя - поддерживается давно, одно из самых известных ООП-расширений XOTcl реализовывает объектно-ориентированное программирование в стиле Smalltalk... Последнее время я прихожу к мнению, что Tcl уже является языком с реализацией (пусть и частичной) всех парадигм сразу.
В: С чего начать?
О: Для начала можно ознакомиться с этой статьей и следить за обновлениями=)
В: Какие есть реализации Tcl/Tk?
О: Как таковой Tcl/Tk один, его разработку сегодня ведет Tcl Core Team, но существуют также расширения для него: стандартная реализация Tcl,XOTcl: экзотикль(расширение для ООП), iTcl (Первое ООП расширение, Inct Tcl, на нем написана iWidgets), SNIT (объектный клей для Tcl, включен в стандартную библиотеку Tcl), STOOOP (ООП-расширение написанное на Tcl, так же сегодня входит в стандартную библиотеку)
В: Какие есть "сборки"?
О: Есть официальные исходные коды, которые любой желающий может скачать с официального сайта и собрать самостоятельно. Также есть дистрибутивы от сторонних команд: ActiveState Tcl (проприетарный, есть платная версия, под все основные ОС), WinTcl (более компактный, ориентирован на работу с ХОTcl, содержит Tloona и XOTcllde, как видно из названия - под Win), TclKit (достаточно компактный дистрибутив, ориентированный на использование iTcl, обладает собран в один пакет и имеет систему управления собственным содержимым, кросс-платформенный), dqkit ("TclKit на стеродидах, есть несколько вариантов сборки, кросс),Tcl/Tk Aqua (дистрибутив заточен исключительно под MacOS). Недавно появилась реализация Tcl для .Net - Eagle.
В: Какую IDE взять?
О: Vim, Emacs - прекрасные кастомизируемые редакторы, которые расширяются в полноценную IDE. Недостаток последнего - плохая поддержка синтаксиса последних версий Tcl. (g)Vim прекрасно поддерживает синтаксис последних версий без дополнительных настроек. Под Windows - ActiveState Komodo. Tloona - IDE для Tcl/Tk написанная на Tcl/Tk. <Требуется подробное описание>. XOTcllde - IDE как ClassBrowser для Smalltalk. Ориентированна на работу с XOTcl. Visual Tcl/Tk (vtcl) - мощная среда разработки на подобии Delphi или QtCreator с возможностью редактирования кода.
В: Какую литературу можно почитать?
О: По Tcl/Tk достаточно много англоязычных туториалов. Русский нашел только один (указал вышел). Из книг могу порекомендовать "Практическое программирование на Tcl и Tk, 4-ое издание" (Б.Б.Уэлш, К.Джонс, Д.Хоббс), на английском - "Tcl and Tk Programming for the Absolute Beginner" (Kurt Wall).

Установка TclДля того, чтобы начать программировать на Tcl требуется иметь установленную виртуальную машину, которая будет обрабатывать написаннный вами код. Давайте посмотрим как ее установить:
0) Для Calculate Linux/Gentoo: emerge dev-lang/tcl, emerge dev-lang/tk, emerge dev-tcltk/tcllib
1) Для Fedora: yum install tcl tk
2) Для Ubuntu: sudo apt-get install tcl tk
3) Для Windows и MacOS: проще всего использовать бинарные дистрибутивы. Качаем любой и устанавливаем в два клика.
4) Сборка Tcl/Tk из исходников. Скачайте исходники (лежат отдельно для Tcl и отдельно для Tk) с оф.сайта и выполните следующие команды для каждого архива: 4.1 Распаковка исходных файлов: $ tar zxf имя_файла.tar.gz
4.2 Перейдите в папку командой: $ cd имя_файла && cd unix
4.3. Выполните: $ ./configure --prefix=/opt --enable-gcc
(для Тк: $ ./configure —with-tcl=../../tcl8.5a5/unix —prefix=/opt —enable-gcc)
4.4 Затем: $ make
4.5. Потом: $ make test
4.6. И в завершениии: $ make install
Для запуска интерактивной среды наберите в терминале:
$ tclsh
Должен появиться символ %.

Первая программа
Давайте напишем классическую программу "Привет слова" на Tcl. Наберите следующий код:

puts "Hello, words!"
в качестве ответа вы увидите:

Hello, words!
Поздравляем! Вы написали первую программу на Tcl. Проста, не правда ли? Давайте остановимся на команде puts. Эта команда/функция выводит текст на любое стандартное устройство ввода/вывода (в нашем случае терминал). По умолчанию после вывода текста puts перемещает курсор на начало следующей строки.

Отмечу, что в данном уроке выводятся несколько слов, для этого они заключаются в двойные кавычки ("..."). В простых примерах этого урока кавычки и фигурные скобки работают одинаково. Но на самом деле между ними существует большая разница, но об этом мы поговорим чуть позже.

Команда puts по своей сути является функцией, т.к. неким элементом языка, который не только выполняет какие-либо действия, но и принимает в себя от одного до бесконечного множества аргументов (ближайший аналог - функции в математике). Если строка, которую мы выводим на экран, не была бы заключена в кавычки или фигурные скобки, интерпретатор Tcl посчитал бы каждое слово за отдельный аргумент и стал бы передавать его отдельно команде puts. Функция puts решит, что это несколько аргументов и в большинстве случаев выдаст огибку.

По своей сути командная строка в Tcl это просто список слов. Обрабатываетяс она по следующему принципу:
1. Первое слово - это сама команда (функция), которая должна быть исполнена.
2. Все следующие слова - аргументы или параметры функции.
Отметим, что в отличии от большинства языков, в Tcl командная строка заканчивается концом строки, т.е. символом начала новой строки или точкой с запятой(;). Но последний способ - не сильно хорошо, он будет понижать понятность вашего кода.

Что такое симпол новос троки? Это не видимый для вас символ, который подставляет в исходный текст вашей программы компьютер, когда нажимаете клавишу Enter. В таких языка, как Pure C он обозначается как "\n".

Так как программы бывают достаточно длинные, хорошим тоном и полезной практикой является оставлять в исходном коде комментарии к нему (некие объяснения, что делает тот или иной кусок кода вашей программы).
Комментарий - это все символы, которые идут после символа (#), который сообщает интерпретатору Tcl, что дальнейшие слова не надо исполнять.

Комментарий может быть отдельной строке или на одной строке с командой (прада этого я не рекомендую, т.к. это сложно воспринимается при изучении вашей программы другим человеком). В этом случае знак комментария будет ";#", чтобы интерпретатор не воспринял символ # как ещё один аргумент. Правда использовать данный метод для комментария любого вида - хорошая практика. В этом случае вы гарантированно не допустите случайной ошибки.

Давайте перейдем к практике. Создайте файл unit.tcl и наберите следующий тектс, а потом запустите его (команда запука - tclsh unit.tcl):

# Этот комментарий на отдельной строке
puts "Привет, Мир!"    ;# Это комментарий после команды
puts {Привет, Мир} # Добавьте точку с запятой, чтобы исправить ошибку

# Точка с запятой позволяет разместить две команды на одной строчке
puts "Это первая строка"; puts "А вот и вторая"

# Точка с запятой в кавычках не означает конца команды! Будьте внимательны
puts "Привет, Мир;"

Переменные
В любом языке программирования есть понятие "переменной", оно аналогично матиматике и будет рассматриваться в общей теориии на нашем блоге, поэтому о её сути я не буду распространятся. Коротко поясню, что переменная это слово, которое интерпретатор Tcl будет ассоциировать в вашей программы с каким-либо значением (это для удобно для того, чтобы вы могли повторно обращаться к этому значению впоследствии). Все переменные и из значения хранятся в памяти компьютера.

Виртуальная машина Tcl резервирует память когда помещаются данные в новую переменную (т.е. перемнная без значения фактически не занимает места в оперативной памяти). Обратиться к этим данным можно по имени переменной.

Для создания переменной и присвоения ей значения используется команда set. Рассмотрим пример:

set fruit "Яблоко"
В примере мы помещаем слово "Яблоко" в область памяти, на которую ссылается первый аргумент, т.е. fruit. Set всегда возвращает содержимое переменной, имя которой является первым аргументом. Таким образом, при выполнении set помещает второй аргумент в область памяти, на которую ссылается первый аргумент и затем возвращает второй аргумент.

Если команда set так используется с одним аргументом, то она просто возвращается значение аргумента. Итак, повторим синтаксис данной команды:

set <имяПеременной> <значение>
Запомните!

а) Если значение задано, то значение переменной устанавливается равным значению.
б) Если переменная содержит только буквы, и нет скобок, то это просто скалярная переменная.
в) Если переменная задана в форме <имяПеременной>(индекс),это ячейка ассоциативного массива (о них поговорим чуть позже).
г) Команда set возвращает значение переменной.

Запустите пример, который приведен в конце урока и внимательно его прочитайте. Если вы внимательно изучили код, то увидили, что в команде set первый аргумент содержит только имя переменной, тогда как в команде puts имя переменной предварено символом $.

Иногда, когда передаётся значение переменной подпрограмме, требуется чтобы подпрограмма могда изменять данные, но это бы не повлияло на главную копию. В этом случае, ставьте $ перед именем переменной, когда вызываете подпрограмму. Таким образом, в памяти создаётся копия данных, с которой работает подпрограмма. После завершения значение основной переменной не изменяется. Это называется "Передача по значению", так как передаётся именно значение переменной.

Но иногда (например, для команды set) требуется, чтобы изменилось значение переменной. В этом случае нужно передать ссылку на область памяти, где хранится значение переменной, тогда команда сможет модифицировать данные в этом месте. В Tcl это делается НЕ добавлением $ перед именем переменной. Это называется "Передача по ссылке", так как команде передаётся ссылка.

Итак, с командой set используется просто имя переменной, поэтому передаётся ссылка. Set помещает данные из второго аргумента в область памяти, на которую ссылается первый аргумент.

Однако в случае с командой puts не нужно изменять оригинальные данные, поэтому команде puts передаётся значение данных, которые будут выведены.

Измените программу в примере и переходите к следующему уроку.

# Присвоение строкового значения переменной X
set X "Simple string"

# Присвоение числового значения переменной Y
set Y 10

# Вывод содержимого X и Y
puts $X
puts $Y

# Просто вывод разделителя, для удобство чтения выводимой в терминал информации
puts "..............................."

# В одной команде puts может быть выведено более одной переменной, для этого используются двойные кавычки
set label "Значение переменной Y:"
puts "$label $Y"
Последние две строки - по сути "конструктор" строки. Но о строках - мы поговорим позже. Этот урок и так получился слишком большим. Всем Удачного изучения!

P.S.: Для подготовки материала использовались материалы http://tclstudy.narod.ru, по которому я когда-то изучал данный язык.
Понравилось? Тогда вот второй урок!

TCL - это... Что такое TCL?

Синтаксис Tcl

Скрипт 
команды, разделённые переводом строки или точкой с запятой (;).
Команда 
слова, разделённые пробелами.
 commandName argument1 argument2 … argumentN 

Первое слово — имя команды, остальные — её аргументы. Любой аргумент может быть заменён другой командой, помещённой в квадратные скобки. Любые аргументы в фигурных скобках передаются команде «как есть», в виде единого аргумента.

Символы, имеющие особое значение

  • $ — вызывает подстановку значения переменной.
  • [] — вызывает подстановку результата выполнения команды внутри скобок.
  • "" — группирует аргументы в один с подстановкой значений переменных.
  • {} — группирует аргументы в один без подстановки значений переменных.
  • \ — экранирует следующий символ или вызывает подстановку управляющего символа.
  • # — начало однострочного комментария, должен быть после неэкранированного символа перевода строки или ";" (точки с запятой).

Замечания о процессе разборки скрипта

  • Разбивка на слова, подстановка значений переменных и результатов выполнения команд производятся за один проход по команде.
  • Все символы, находящееся внутри скобок {} и кавычек "", рассматривается как одно слово.
  • Первое слово команды рассматривается как встроенная или определённая процедура.

Примеры команд

  • Присваивание обозначается словом set, а не знаком равенства.

Синтаксис:

 set переменная значение 

Пример:

  • Комментарий обозначается символом #

Синтаксис:

 # текст комментария 

Пример:

 # это комментарий 
  • Вывод (печать) реализуется командой puts

Синтаксис:

Пример:

 puts "Привет! Это я." puts 123 puts $a puts "b = $b" 
  • Цикл пока реализуется командой while, имеющей два аргумента. Первый — Tcl выражение (выражения фактически пишутся на миниатюрном языке, состоящем из математических операций и операций сравнения в стиле языка C. Второй аргумент — это скрипт, выполняемый при каждой итерации. Его, как правило, помещают в фигурные скобки, чтобы избежать немедленного выполнения.

Синтаксис:

 while { Выражение_Tcl_С_Логическим_Значением } { TclКоманда другаяTclКоманда … … } 

Пример:

 while { $x < 10 } { puts $x incr x } 
  • Условная команда

Синтаксис:

 if { Выражение_Tcl_С_Логическим_Значением } { КомандаTcl } 

Пример:

  • Команда ветвления

Пример:

 switch -glob — $var { {see} - {saw} - {seen} { puts "Все это значит одно и то же!"} } 
  • Команда может не иметь аргументов, например

просто возвращает текущий рабочий каталог. А командой

вы сохраните имя текущего каталога в переменной wdir.

  • Команда может возвращать список, например

возвратит список имён файлов текущей директории, удовлетворяющих шаблону Образец.

Процедуры

Процедуры определяются следующим образом

 proc имяПроцедуры { списокАргументов } { … … } 

Ассоциативные массивы

Следующий фрагмент кода создаст и инициализирует ассоциативный массив (называемый в других языках также карта, словарь, или хеш).

 set capital(France) Paris set capital(Italy) Rome set capital(Germany) Berlin set capital(Poland) Warsaw set capital(Russia) Moscow set capital(Spain) Madrid 

Для запроса и вывода одного из значений ассоциативного массива используется

Список всех стран вместе с их столицами можно получить командой

Результат не будет отсортирован, потому что массивы Tcl базируются на хеш-таблицах.

 Poland Spain Russia Germany Italy France 

Сортировку можно выполнить командой

 lsort [array names capital] 

Чтобы сослаться на массив (передать его как ссылку) используется имя содержащей его переменной:

 proc demo arrName { upvar 1 $arrName arr ;# tie the reference to a local name #do something with arr } 

Для доступа к массиву по значению, используется array get или array set. Например, чтобы скопировать один массив в другой:

 array set Newarr [array get Oldarr] 

В Tcl 8.5 введены массивы, передаваемые по значению — словари (dict).

Для преобразования скалярной переменной в массив и наоборот следует удалить существующую переменную при помощи команды unset.

Область видимости переменных

По умолчанию внутри процедуры видны только определённые в ней переменные. За пределами определения процедуры её переменные недоступны, иначе чем через механизм передачи параметров. Вы можете иметь переменные в процедуре с таким же именем, как и в основной программе, при этом значения этих переменных будут различаться, по сути это будут разные переменные. Чтобы изменить это поведение используются команды global или upvar.

Примеры

Дополнительные примеры с комментариями на русском вы можете найти на wiki-ресурсе Нижегородской Группы Пользователей Linux в разделе Programming Gems::Tcl/Tk. [10]

Здравствуй, мир!

Программа Hello, world выглядит так

 puts "Здравствуй, мир!" 

или так

 puts {Здравствуй, мир!} 

Сложение чисел массива

Метод (A) — Сложение с использованием цикла 'foreach'

 set numbers {1 2 3 4 5 6 7 8 9 10} set result 0 foreach number $numbers { set result [expr {$result + $number}] } puts $result 

Метод (B) — Гораздо более элегантный способ с использованием команды 'join'

 set numbers {1 2 3 4 5 6 7 8 9 10} puts [expr [join $numbers +]] 

Список содержимого массива

В массиве tcl_platform, содержится информация о свойствах платформы, на которой запущен Tcl. Список имён свойств может быть получен с помощью

Следующий фрагмент выводит их вместе со значениями:

 foreach i [array names tcl_platform] { puts [ concat $i = $tcl_platform($i) ] } 

Если свойства должны быть отсортированы

 foreach i [lsort [array names tcl_platform] ] { puts [ concat $i = $tcl_platform($i) ] } 

Здесь демонстрируется вложенность команд. Они могут быть вложены на любую глубину. Подобного же результата можно достичь с помощью команды parray.

Пересечение множеств

Процедура filter возвращает те элементы списка, для которых script принимает значение TRUE:

 proc filter {list script} { set res {} foreach e $list {if {[uplevel 1 $script $e]} {lappend res $e}} return $res } 

Команда uplevel 1 позволяет вычислить выражение в контексте, в котором вызывается слово filter.

Процедура in — это сокращённая запись для включения (инклюзии) множеств:

 proc in {list e} { expr {[lsearch -exact $list $e]>=0} } 

Проверка:

 % filter {a b c} {in {b c d}} b c 

Факториал

 proc ! x {expr {$x<2? 1: $x*[! [incr x -1]]}} 

Здесь демонстрируется, что именем команды могут быть любые строки, а также известный по другим языкам оператор ?:.

Реализация, дистрибутивы, инструменты

Tcl — интерпретируемый язык, то есть программы на Tcl готовы к выполнению без компиляции и компоновки.

Интерпретатор Tcl портирован на большинство распространённых платформ. Он распространяется под свободной некопилефтной лицензией, позволяющей использовать его без ограничения в разработке проприетарных приложений, а также создавать проприетарные производные системы. Разработчики относят её к BSD подобным, хотя по сравнению с лицензией BSD лицензия Tcl накладывает меньшее количество запретов.

Реализация

В настоящее время работа над ядром языка Tcl ведётся группой разработчиков именуемой Tcl Core Team. Самые свежие версии Tcl-транслятора и основных библиотек доступны в репозитории на см. список.

Транслятор Tcl компилирует программу в промежуточное представление — байткод, а затем интерпретирует её. В отличие от, например StarKit модуль или с помощью какого-нибудь другого враппера. В зависимости от параметров компиляции интерпретатор Tcl может поддерживать или не поддерживать многопоточность.

Хотя в большинстве учебников по Tcl для начинающих говорится что то вроде «в Tcl есть всего один тип переменных — строка», на самом деле трансляторы Tcl уже давно как устроены по другому. Внутри Tcl использует систему динамических типов с автоматическим, прозрачным преобразованием к строковому виду.

Существует также альтернативная реализация Tcl написанная на Jacl, ведутся эксперименты по трансляции Tcl программ в код виртуальной машины Perl.

Для программирования встраиваемых систем и встраивания в приложения разработан специальный диалект Tcl Jim. Это интерпретатор реализующий большое подмножество Tcl, расширенное дополнительными механизмами объектно-ориентированного и функционального программирования и занимающий в скомпилированном виде менее 100 килобайт.

Другой диалект Tcl — скриптовый язык мобильных устройств Hecl, реализованный на J2ME).

Tcl входит практически во все дистрибутивы GNU/Linux. Для Microsoft Windows требуется отдельный установочный пакет.

В настоящее время текущая стабильная версия Tcl 8.4, её основные отличия от предыдущей — новые функции (оптимизация 64-битного кода, VFS, дополнения в плане интроспекции ) и некоторое повышение быстродействия за счёт оптимизации работы с байткодом.

Новые возможности, добавленные в версии 8.1 (в частности, поддержка многопотокового выполнения, средства интернационализации и работа с символами Unicode), замедлили работу Tcl по сравнению с давшей скачок скорости восьмой версией примерно на 19 %. Разработчики 8.4 приложили все усилия для того, чтобы максимально повысить скорость выполнения программ, добиться, чтобы они работали не только не медленнее, но даже быстрее, чем это было при появлении версии 8.0. Эта цель была достигнута практически для всех средств Tcl и Tk — версия 8.4 в среднем в 8 раз быстрее чем версия 7.6[8]. Текущая версия TCL — 8.5.

Дистрибутивы

Все нижеперечисленные дистрибутивы распространяются свободно и собраны из компонентов, имеющих ту или иную свободную лицензию. Большинство из них — кроссплатформены (кроме WinTclTk и Tcl/Tk Aqua), хотя в Unix-системах Tcl/Tk обычно является частью дистрибутива ОС.

  • ActiveTcl
    Самый распространённый дистрибутив TCL. Подобно другим продуктам компании WSH. Какие либо инструментальные средства, облегчающие жизнь программиста, отсутствуют. Фирма продаёт пакет TclDevKit содержащий средства отладки и создания автономных программ (последнее на базе технологии IDE для скриптовых языков, включающее средства визуального программирования WinTclTk
    Более компактный, активно развивающийся дистрибутив ориентированный на работу с Tloona IDE — традиционного типа и XOTclIde — среда объектно-ориентированного программирования в стиле FreeWrap — технологии, альтернативной ZIP-сжатии.
  • TclKit
    Это Tcl/Tk c базовым набором библиотек в одном компактном выполняемом файле. Дистрибутив создан с использованием технологии MetaKit позволяющую управлять содержанием этого файла.
  • dqkit
    Альтернативная сборка, известная как «TclKit на стероидах», имеется несколько вариантов отличающихся составом библиотек, поддержкой многопоточности и т. д.
  • Tcl/Tk Aqua
    Дистрибутив для Mac OS. Существует три варианта: TclTkAquaBI - надмножество ActiveTCL, компактный дистрибутив TclTkAqua и минимальный набор TclTkAquaStandalone.

Достоинства и недостатки

Недостатком ранних версий Tcl/Tk, несомненно, было низкое быстродействие. Версии ниже 8-й использовали прямую интерпретацию исходного текста, однако использование байткода разрешило эту проблему. Сейчас по быстродействию Tcl не сильно отличается от [11], хотя заметно уступает таким скриптовым языкам как, например, Lua. Сложные или критические по времени выполнения участки кода рекомендуется выполнять в виде внешних модулей на C/C++.

Tcl/Tk, также как, например Forth отличают необычность синтаксиса в сочетании с ничем не ограниченной расширяемостью. Это может быть преимуществом для программиста-индивидуала или небольшой группы программистов, но делает Tcl/Tk вряд ли пригодным для разработки в промышленном масштабе. Хотя наличие стандартизированных расширений снижает остроту этой проблемы и в пределах своей «экологической ниши» (встроенные скрипты, «склеивание» компонент, WEB-программирование) Tcl может использоваться и в крупных проектах. Интересеный подход применен при симбиозе Forth и Tcl в рамхах HolonT когда в рамках


Хотя Tcl обладает всеми свойствами функционального языка, его интерпретатор не производит оптимизацию хвостовой рекурсии, что затрудняет использование чисто функционального стиля, уменьшает его эффективность. Однако гибкость языка позволяет обойти эту проблему, реализовав подобие такой оптимизации на высоком уровне[12].

Наиболее тесная интеграция Tcl с графической библиотекой GUI оболочек к консольным программам или пакетам консольных программ Tcl может оказаться наилучшим выбором.

По количеству разработанных для Tcl библиотек расширений и инструментальных средств несколько уступает Перлу, но вряд ли вы столкнётесь с их нехваткой. Чего, правда, нельзя сказать о количестве документации и литературы по Tcl, особенно — русскоязычной.

См. также

Ссылки

  • www.tcl.tk(англ.) — Официальный сайт
  • wiki.tcl.tk(англ.) — Tcl Wiki: Самый большой ресурс, посвящённый Tcl
  • tmml.sourceforge.net/doc(англ.) — Официальная документация по Tcl/Tk и стандартной библиотеке Tcl
  • www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html(англ.) — Учебник по Tcl 8.5
  • www.tclscripting.com(англ.) — Tcl Scripting — новости и статьи о программировании на Tcl/Tk
  • en:b:Tcl Programming (англ.) — Викиучебник «Программирование на TCL»
  • pleac.sourceforge.net/pleac_tcl(англ.) — PLEAC-Tcl — Коллекция решённых на Тикле задач (удобна для сравнения с другими языками)

На русском языке

Статьи и Обзоры

Приложения

  • openacs.org(англ.) — мощная система управления содержимым вебсайтов (CMF) на языке Tcl, расширенном XOtcl. Работает совместно с AOLserver
  • Ucome(англ.) — более компактная Tcl h4v(англ.) — минималистичный web-браузер, написанный на Tcl/Tk
  • simpledevlib.sourceforge.net(англ.) — The Simple Development Library — Библиотека полезных утилит для разработки Tcl/Tk-проектов.

Книги

На русском языке

  • Брент Б. Уэлш, Кен Джонс, Джеффри Хоббс Практическое программирование на Tcl и Tk = Practical Programming in Tcl and Tk. — 4-е изд. — М.: «Вильямс», 2004. — С. 1136. — ISBN 0-13-038560-3
  • Брент Б. Уэлш, Кен Джонс, Джеффри Хоббс «Практическое программирование на Tcl и Tk», ISBN 5-8459-0661-X (эл. версия вступления и первой главы),
оригинал: Brent Welch, Ken Jones, Jeffrey Hobbs «Practical Programming in Tcl and Tk», ISBN 0-13-038560-3 (электронная версия[13])
  • Москвин П. В. «Азбука TCL», ISBN 5-93517-130-9
  • Алексей Петровский, Командный язык программирования TCL (Tool Command Language), ISBN 5-901321-16-2

На английском языке

  • Clif Flynt «Tcl/Tk, Second Edition : A Developer’s Guide», ISBN 1-55860-802-8
1-е издание «Tcl/Tk for Real Programmers», ISBN 0-12-261205-1
  • John K. Ousterhout, «Tcl and the Tk Toolkit», ISBN 0-201-63337-X
  • Mark Harrison, Michael McLennan, «Effective Tcl/Tk Programming. Writing Better Programs in Tcl and Tk», ISBN 0-201-63474-0
  • J. Adrian Zimmer «Tcl/Tk For Programmers», ISBN 0-8186-8515-8 (избранные главы on-line)
  • «Tcl/Tk Cookbook» from Lakshmi Sastry Advanced Interactive Systems Group(электронная книга)
  • Salvatore Sanfillipo «Tcl Wise. Guide to the Tcl Programming Language» (первые 9 глав on-line)
  • Paul Raines, Jeff Tranter «Tcl/Tk in a Nutshell: A Desktop Quick Reference», ISBN 1-56592-433-9
  • Chad Smith «[incr Tcl/Tk] from the Ground Up», ISBN 0-07-212106-8
  • David Maggiano «CGI Programming with Tcl», ISBN 0-201-60629-1
  • J. M. Ivler, Kamran Husain, «Cgi Developer’s Resource: Web Programming in Tcl and Perl», ISBN 0-13-727751-2

Примечания

  1. если ни одна из реализаций объектной модели вас не устраивает, либо вы интересуетесь, как это работает, можете ознакомиться со статьёй Creating Object Commands(англ.) от создателей SNIT
  2. см. также Steps towards functional programming
  3. History of Tcl
  4. Why you should not use Tcl
  5. Камерон Лэрд, Кэтрин Сорэз, SunWorld, США. Создатель Tcl уходит из Sun в новое предприятие, Computerworld № 07/1998
  6. Роберт Макмиллан, SunWorld. Tcl: путь к новой жизни, Computerworld № 36/1998
  7. John K. Ousterhout Scripting: Higher Level Programming for the 21st Century(англ.).
    Перевод этой статьи(рус.) в журнале «Открытые системы», № 3, 1998
  8. 1 2 см. Tcl Benchmarks
  9. Tcl: корпоративный вариант — Computerworld № 21/1999
  10. примеры на английском см. также в Tcl examples и [wb:en:Tcl Programming/Tk examples|Programming:Tcl Tcl/Tk examples]
  11. Computer Language Benchmarks Game — сравнение производительности языков программирования.
  12. в Tail call optimization описана эта проблема и обозначены возможные пути её решения.
  13. полностью доступно первое издание, выборочно, более новые

Tcl — Циклопедия

Tcl (от англ. Tool Command Language — «командный язык инструментов», читается «тикль» или «ти-си-эль») — скриптовый язык высокого уровня.

Tcl часто применяется совместно с графической библиотекой Tk (Tool Kit). Связку Tcl/Tk по-русски иногда называют «Так-тикль» (английский вариант — «тикль-ток»).

Области применения языка — быстрое прототипирование, создание графических интерфейсов для консольных программ (пакетов программ), встраивание в прикладные программы, тестирование. Также Tcl применяется в веб-разработке.

Tcl, наряду с Perl и Python, стал одним из трёх классических скриптовых языков общего назначения. Эта троица фигурирует не только в качестве списка свободных дистрибутивов, собираемых в ActiveState, но и, например, как языки, на которых (помимо диалекта PL/pgSQL) можно писать триггеры и хранимые процедуры популярного сервера БД PostgreSQL.

Tcl, как встраиваемый язык, нашел применение и в сфере САПР (CAD|CAM|CAE)[1][2]. Он, к примеру, используется как средство настройки баз данных, в постпроцессоре Unigraphics. Кроме того, он де-факто является языком автоматизации и интеграции во всех ведущих программных пакетах разработки микросхем (ПЛИС и ASIC).

В Tcl данными всех типов, включая код программы, можно манипулировать как строками. Это делает его языком с естественной поддержкой метапрограммирования. Эта парадигма программирования учитывалась в ходе разработки и эволюции языка.

Программа на Tcl состоит из команд, разделённых символами новой строки или точками с запятой. Каждая команда состоит из набора полей, разделённых пробелами. Первое поле должно быть именем команды, а необязательные остальные поля — передаваемые этой команде аргументы. Команда возвращает значение, иногда пустое. То есть, как и в Лиспе, в Tcl используется префиксная нотация.

Ключевых слов как таковых нет — понятие команды в Tcl аналогично понятию процедуры или функции распространённых языков программирования. Это относится и к управляющим конструкциям языка. В сочетании с элементарным синтаксисом это обеспечивает хорошую расширяемость языка, в том числе и библиотеками, написанными на других языках, таких как C/C++ или Java.

В Tcl также качественно реализована модель управления программой на основе событий. События могут генерироваться таймером, при появлении данных в канале, изменении значения переменной, при завершении какой-либо внешней программы, или просто при работе пользователя с интерфейсом Tk. Можно задавать свои события и управлять ими.

Как и большинство современных скриптовых языков Tcl содержит развитые средства работы с регулярными выражениями, работает с ассоциативными массивами и другими динамическими структурами данных.

В базовом Tcl нет поддержки ООП, однако существует множество расширений Tcl объектно-ориентированными механизмами, реализованных в виде подключаемых библиотек на Си, или самом Tcl. Вот самые распространённые из них[3]:

расширение реализовано на особенности используемой модели
XOTcl C мощная объектная система с динамическим определением классов и методов, близкая к CLOS
incr Tcl C ООП в стиле, близком к C++, расширенном введением конфигураторов
Snit Tcl реализация объектной модели на основе делегирования, а не наследования
STOOOP Tcl ООП в стиле, максимально близком к C++, также введён механизм переключения классов

Пространства имён поддерживаются на уровне ядра языка.

В настоящее время бета-тестирование проходит новый ООП-фреймвок TclOO, который планируется включить в будущие версии ядра языка. Это компактная, но мощная объектно-ориентированная система, которую можно использовать как непосредственно, так и как базу для построения расширенных моделей ООП.

На Tcl легко программировать в функциональном стиле: он обеспечивает такие механизмы, как функции высшего порядка и абстракции функций[4], хотя Tcl редко используют таким образом. Вот пример того, как можно осуществить композицию двух функций:

proc o {f g x} {$f [$g $x]} 

В версии 8.5 в Tcl также введена команда apply, значительно облегчающая программирование в этом стиле.

Вот пример её использования из официальной документации:

proc map {lambda list} { set result {} foreach item $list { lappend result [apply $lambda $item] } return $result } map {x {return [string length $x]:$x}} {a bb ccc dddd} 

результатом работы этого примера будет

1:a 2:bb 3:ccc 4:dddd 

Язык разработан Джоном Оустерхаутом (John Ousterhout) в то время, когда он работал в университете Калифорнии в Беркли. Первоначальной целью было создание универсального языка для встраивания в консольные приложения. Вслед за этим Оустерхаут расширил свой язык средствами создания графических интерфейсов — так появился Tcl/Tk.[5]

За 4 года развития в университетских стенах Тикль-сообщество выросло до нескольких сотен тысяч программистов. В 1993 году было разработано первое объектно-ориентированное расширение — incr Tcl.

В 1994 г. Оустерхаут становится ведущим инженером проекта SunScript. В течение следующих 4 лет, став одним из проектов корпорации Sun, Тикль не только остался свободно распространяемой системой, но и значительно усовершенствовался, стал кросс-платформенным.

Заметный удар по популярности языка нанёс Ричард Столлман, опубликовав в сентябре 1994 г. в ряде новостных групп рекомендацию «Почему вы не должны использовать Tcl» [6]. В ней он на основании утверждений, что «Tcl разработан не как серьёзный язык программирования» и «Tcl имеет особый синтаксис, притягательный для хакеров из-за своей простоты. Но синтаксис Tcl кажется странным для большинства пользователей.», а также в связи с продвижением Emacs Lisp вынес вердикт: «проект GNU не собирается использовать Tcl в программном обеспечении GNU». Помимо субъективных претензий к дизайну языка, Столлман указал на объективный на тот момент недостаток — низкое быстродействие.

Тем не менее, рост количества разработчиков, активно использующих тикль, составил за этот период 600 %.

В 1998 г. в связи с Java-бумом и связанной с ним острой конкурентной борьбой корпорация уже не могла уделять тиклю прежнего внимания. Джон Остераут покидает Sun и создаёт (при поддержке Sun) компанию Scriptics, продолжая развитие технологии Tcl/Tk[7][8]. Это была одна из первых коммерческих программных фирм, чья деятельность строилась вокруг бесплатного свободного ПО.

Цветовое решение логотипа, принятое в 90-х гг. XX века

В марте 1998 года Оустерхаут пишет ставшую классической статью «Сценарии: высокоуровневое программирование для XXI века»[9], в которой назвал скриптовые языки языками системной интеграции, потому что они ориентированы прежде всего на работу с объектами операционной среды, а не с элементарными данными. Это позволяет без написания тысяч строк кода двумя-тремя командами «склеивать» такие объекты в одно целое.

В том же году он выиграл за разработку языка Tcl две крупных награды. Первая — это ACM Software System Award, вручаемая за «наиболее значимое программное обеспечение». Этой наградой до этого были отмечены такие основополагающие системы, как стек протоколов TCP/IP, первая электронная таблица, первая реляционная база данных, World Wide Web, Unix, PostScript и Smalltalk. Вторая — это ежегодная USENIX Software Tools User Group (STUG) Award, в знак признания выдающегося программного обеспечения.

В 1999 году выходит Tcl 8.0 — в этой реализация впервые появилась компиляция в байткод, что позволило в 6 раз поднять быстродействие[10]. В следующую модификация Tcl 8.1 введена полноценная поддержка юникода, в ней впервые реализована многопоточность. В связи c этим релизом Остераут заявил:

«В целом 8.1 переводит Tcl в новую категорию, поскольку теперь его можно использовать для серверных приложений. Си, Си++ и Java можно по-прежнему использовать для создания частей приложений, критических с точки зрения производительности, а Tcl — для интеграции и создания интерфейсных компонентов». [11]

В 2000 году фирма Scriptics была переименована в Ajuba Solutions, а затем куплена фирмой Interwoven, не заинтересованной в работе со свободным ПО. В связи с этим разработка Tcl была передана сообществу программистов. Так была сформирована Tcl Core Team.

На 9-ой конференции по Tcl/Tk, проходившей в Ванкувере, была представлена виртуальная файловая система StarKit, обеспечившая новый, удобный для обычного пользователя способ распространения Tcl программ.

Скрипт 
команды, разделённые переводом строки или точкой с запятой (;).
Команда 
слова, разделённые пробелами.
 commandName argument1 argument2 … argumentN 

Первое слово — имя команды, остальные — её аргументы. Любой аргумент может быть заменён другой командой, помещённой в квадратные скобки. Любые аргументы в фигурных скобках передаются команде «как есть», в виде единого аргумента.

[править] Символы, имеющие особое значение

  • $ — вызывает подстановку значения переменной.
  • [] — вызывает подстановку результата выполнения команды внутри скобок.
  • "" — группирует аргументы в один с подстановкой значений переменных.
  • {} — группирует аргументы в один без подстановки значений переменных.
  • \ — экранирует следующий символ или вызывает подстановку управляющего символа.
  • # — начало однострочного комментария, должен быть после неэкранированного символа перевода строки или «;» (точки с запятой).

[править] Замечания о процессе разборки скрипта

  • Разбивка на слова, подстановка значений переменных и результатов выполнения команд производятся за один проход по команде.
  • Все символы, находящееся внутри скобок {} и кавычек "", рассматривается как одно слово.
  • Первое слово команды рассматривается как встроенная или определённая процедура.

[править] Примеры команд

  • Присваивание обозначается словом set, а не знаком равенства.

Синтаксис:

set переменная значение 

Пример:

set a 2 
set b 3 
  • Комментарий обозначается символом #

Синтаксис:

# текст комментария 

Пример:

# это комментарий 
  • Вывод (печать) реализуется командой puts

Синтаксис:

puts выражение 

Пример:

puts "Привет! Это я." puts 123 puts $a puts "b = $b" 
  • Цикл пока реализуется командой while, имеющей два аргумента. Первый — Tcl выражение (выражения фактически пишутся на миниатюрном языке, состоящем из математических операций и операций сравнения в стиле языка C. Второй аргумент — это скрипт, выполняемый при каждой итерации. Его, как правило, помещают в фигурные скобки, чтобы избежать немедленного выполнения.

Синтаксис:

while { Выражение_Tcl_С_Логическим_Значением } { TclКоманда другаяTclКоманда … … } 

Пример:

while { $x < 10 } { puts $x incr x } 
  • Условная команда

Синтаксис:

if { Выражение_Tcl_С_Логическим_Значением } { КомандаTcl } 

Пример:

if {$x < 0} { set x 0 } 
  • Команда ветвления

Пример:

switch -glob — $var { {see} - {saw} - {seen} { puts "Все это значит одно и то же!"} } 
  • Команда может не иметь аргументов, например
pwd 

просто возвращает текущий рабочий каталог. А командой

set wdir [pwd] 

вы сохраните имя текущего каталога в переменной wdir.

  • Команда может возвращать список, например
glob Образец 

возвратит список имён файлов текущей директории, удовлетворяющих шаблону Образец.

[править] Процедуры

Процедуры определяются следующим образом

proc имяПроцедуры { списокАргументов } { … … } 

[править] Ассоциативные массивы

Следующий фрагмент кода создаст и инициализирует ассоциативный массив (называемый в других языках также карта, словарь, или хеш).

set capital(France) Paris set capital(Italy) Rome set capital(Germany) Berlin set capital(Poland) Warsaw set capital(Russia) Moscow set capital(Spain) Madrid 

Для запроса и вывода одного из значений ассоциативного массива используется

puts $capital(Italy) 

Список всех стран (ключей массива) можно получить командой

array names capital 

Результат не будет отсортирован, потому что массивы Tcl базируются на хеш-таблицах.

Poland Spain Russia Germany Italy France 

Сортировку можно выполнить командой

lsort [array names capital] 

Чтобы сослаться на массив (передать его как ссылку) используется имя содержащей его переменной:

proc demo arrName { upvar 1 $arrName arr ;# tie the reference to a local name #do something with arr } 

Для доступа к массиву по значению, используется array get или array set. Например, чтобы скопировать один массив в другой:

array set Newarr [array get Oldarr] 

В Tcl 8.5 введены массивы, передаваемые по значению — словари (dict).

Для преобразования скалярной переменной в массив и наоборот следует удалить существующую переменную при помощи команды unset.

[править] Область видимости переменных

По умолчанию внутри процедуры видны только определённые в ней переменные. За пределами определения процедуры её переменные недоступны, иначе чем через механизм передачи параметров. Вы можете иметь переменные в процедуре с таким же именем, как и в основной программе, при этом значения этих переменных будут различаться, по сути это будут разные переменные. Чтобы изменить это поведение используются команды global или upvar.

Дополнительные примеры с комментариями на русском вы можете найти на wiki-ресурсе Нижегородской Группы Пользователей Linux в разделе Programming Gems::Tcl/Tk.[12]

[править] Здравствуй, мир!

Программа Hello, world выглядит так

puts "Здравствуй, мир!" 

или так

puts {Здравствуй, мир!} 

[править] Массивы

[править] Обращение к элементам массива

Вывод значения элемента массива OldArray(precision), имя которого (массива) задается новой переменной NewArray

set NewArray OldArray puts [set ${NewArray}(precision)] 
[править] Сложение чисел массива

Метод (A) — Сложение с использованием цикла 'foreach'

set numbers {1 2 3 4 5 6 7 8 9 10} set result 0 foreach number $numbers { set result [expr {$result + $number}] } puts $result 

Метод (B) — Гораздо более элегантный способ с использованием команды 'join'

set numbers {1 2 3 4 5 6 7 8 9 10} puts [expr [join $numbers +]] 
[править] Список содержимого массива

В массиве tcl_platform, содержится информация о свойствах платформы, на которой запущен Tcl. Список имён свойств может быть получен с помощью

array names tcl_platform 

Следующий фрагмент выводит их вместе со значениями:

foreach i [array names tcl_platform] { puts "$i = $tcl_platform($i)" } 

Если свойства должны быть отсортированы

foreach i [lsort [array names tcl_platform] ] { puts "$i = $tcl_platform($i)" } 

Здесь демонстрируется вложенность команд. Они могут быть вложены на любую глубину. Подобного же результата можно достичь с помощью команды parray (появившейся в Tcl 8.5).

[править] Пересечение множеств

Процедура filter возвращает те элементы списка, для которых script принимает значение TRUE:

proc filter {list script} { set res {} foreach e $list {if {[uplevel 1 $script $e]} {lappend res $e}} return $res } 

Команда uplevel 1 позволяет вычислить выражение в контексте, в котором вызывается слово filter.

Процедура in — это сокращённая запись для включения (инклюзии) множеств:

proc in {list e} { expr {[lsearch -exact $list $e]>=0} } 

Проверка:

% filter {a b c} {in {b c d}} b c 

[править] Факториал

proc ! x {expr {$x<2? 1: $x*[! [incr x -1]]}} 

Здесь демонстрируется, что именем команды могут быть любые строки, а также известный по другим языкам оператор ?:.

[править] Реализация, дистрибутивы, инструменты

Tcl — интерпретируемый язык, то есть программы на Tcl готовы к выполнению без компиляции и компоновки.

Интерпретатор Tcl может работать под управлением большинства распространённых операционная система. Он бесплатно распространяется с открытой лицензией, позволяющей использовать его без ограничений, в том числе при разработке коммерческого ПО. Разработчики относят её к BSD подобным.

[править] Реализация

В настоящее время работа над ядром языка Tcl ведётся группой разработчиков именуемой Tcl Core Team. Самые свежие версии Tcl-транслятора и основных библиотек доступны в репозитории на SourceForge.net, см. список.

Транслятор Tcl компилирует программу в промежуточное представление — байткод, а затем интерпретирует её. В отличие от, например Python — это промежуточное представление не сохраняется на диск, программа может хранится только в исходных текстах, возможно упакованных в StarKit модуль или с помощью какого-нибудь другого враппера. В зависимости от параметров компиляции интерпретатор Tcl может поддерживать или не поддерживать многопоточность.

Хотя в большинстве учебников по Tcl для начинающих говорится что-то вроде «в Tcl есть всего один тип переменных — строка», на самом деле трансляторы Tcl уже давно как устроены по-другому. Внутри Tcl использует систему динамических типов с автоматическим, прозрачным преобразованием к строковому виду.

Tcl входит практически во все дистрибутивы Linux. Для Microsoft Windows требуется отдельный установочный пакет.

В настоящее время текущая стабильная версия Tcl 8.4, её основные отличия от предыдущей — новые функции (оптимизация 64-битного кода, VFS, дополнения в плане интроспекции) и некоторое повышение быстродействия за счёт оптимизации работы с байткодом.

Новые возможности, добавленные в версии 8.1 (в частности, поддержка многопотокового выполнения, средства интернационализации и работа с символами Unicode), замедлили работу Tcl по сравнению с давшей скачок скорости восьмой версией примерно на 19 %. Разработчики 8.4 приложили все усилия для того, чтобы максимально повысить скорость выполнения программ, добиться, чтобы они работали не только не медленнее, но даже быстрее, чем это было при появлении версии 8.0. Эта цель была достигнута практически для всех средств Tcl и Tk — версия 8.4 в среднем в 8 раз быстрее чем версия 7.6[10]. Текущая версия TCL — 8.5.

[править] Альтернативные реализации и диалекты

Существует альтернативные реализации Tcl для популярных виртуальных машин общего назначения. Это написанный на Java интерпретатор — Jacl[13] (последняя версия от 2008 года), и проект Eagle[14], реализующий большинство команд Tcl 8.4 для CLR (Доступны сборки для .NET 4.0 и 2.0). Ведутся эксперименты по трансляции Tcl программ в код виртуальной машины Parrot, разрабатываемой для шестой версии Perl[15].

Для программирования встраиваемых систем и встраивания в приложения разработан специальный диалект Tcl Jim[16]. Это интерпретатор реализующий большое подмножество Tcl, расширенное дополнительными механизмами объектно-ориентированного и функционального программирования и занимающий в скомпилированном виде менее 100 килобайт.

Ещё один диалект Tcl — скриптовый язык мобильных устройств Hecl[17], реализованный на Java (J2ME). Что же касается платформы Android, поддержку Tcl на ней (наряду с другими скриптовыми языками) обеспечивает скриптовая прослойка SL4A[18].

[править] Использование в веб-разработке

В web-программировании Tcl обычно используется вместе с веб-сервером AOLServer или одним из «облегчённых» веб-серверов, вроде lighttpd, ориентированным на FastCGI. Для интеграции Tcl с Apache существует модуль Rivet[19].

Существуют также такие проекты, как TclHttpd[20] и его преемник — Wub[21], являющиеся полноценными Web-фреймворками. На базе нового объектного расширения языка TclOO разрабатывается веб-фреймвок Woof (Web Oriented Object Framework)[22].

Помимо использования в качестве языка реализации веб-приложений, TCL может использоваться как скриптовый язык для расширения существующих приложений. К примеру на нём пишут модули для IRC бота Eggdrop.

[править] Дистрибутивы

Все нижеперечисленные дистрибутивы распространяются свободно и собраны из компонентов, имеющих ту или иную свободную лицензию. Большинство из них — кроссплатформены (кроме WinTclTk и Tcl/Tk Aqua), хотя в Unix-системах Tcl/Tk обычно является частью дистрибутива ОС.

  • ActiveTcl
    Самый распространённый дистрибутив TCL. Подобно другим продуктам компании ActiveState включает в себя большой набор библиотек и расширений. В windows-версиях включает в себя средства интеграции с WSH. Какие либо инструментальные средства, облегчающие жизнь программиста, отсутствуют. Фирма продаёт пакет TclDevKit содержащий средства отладки и создания автономных программ (последнее на базе технологии StarKit) и Komodo — универсальное IDE для скриптовых языков, включающее средства визуального программирования Tk-форм.
  • etcl
    Еще одна сборка, от компании evolane. Богатый набор библиотек и платформ, включая мобильные платформы Windows Mobile 5, 6 а также linux под arm. Дистрибутив поставляется в виде одного исполняемого файла, с помощью которого можно собрать собственное приложение.
  • WinTclTk
    Более компактный, дистрибутив ориентированный на работу с XOTcl — объектно-ориентированным расширением Tcl. Список включённых в него библиотек несколько уже, чем в ActiveTcl, но «джентльменский набор» вы здесь найдёте. В этот дистрибутив входят Tloona IDE — среда разработки традиционного типа и XOTclIde — среда объектно-ориентированного программирования в стиле Smalltalk, обе — с отладчиками. Также на сайте разработчиков свободно доступен пакет для создания единого запускаемого файла TkWrapper основанный на FreeWrap — технологии, альтернативной StarKit, основанной на простом ZIP-сжатии. Последняя на сегодняшний день версия — 8.5.6.
  • TclKit
    Это Tcl/Tk c базовым набором библиотек в одном компактном выполняемом файле. Дистрибутив создан с использованием технологии StarKit. Содержит Библиотеку MetaKit позволяющую управлять содержанием этого файла.
  • dqkit
    Альтернативная сборка, известная как «TclKit на стероидах», имеется несколько вариантов, отличающихся составом библиотек, поддержкой многопоточности и т. д.
  • Tcl/Tk Aqua
    Дистрибутив для Mac OS. Существует три варианта: TclTkAquaBI — надмножество ActiveTCL, компактный дистрибутив TclTkAqua и минимальный набор TclTkAquaStandalone.

[править] Достоинства и недостатки

Недостатком ранних версий Tcl/Tk, несомненно, было низкое быстродействие. Версии ниже 8-й использовали прямую интерпретацию исходного текста, однако использование байткода разрешило эту проблему. Сейчас по быстродействию Tcl не сильно отличается от PHP[23], хотя заметно уступает таким скриптовым языкам как, например, Python или Lua. Сложные или критические по времени выполнения участки кода рекомендуется выполнять в виде внешних модулей на C/C++.

Tcl/Tk, отличает непривычность синтаксиса для программистов на «традиционных» языках. Он ближе к стандартному синтаксису оболочки Unix. Этот синтаксис может быть произвольно изменён (как и в других «программируемых языках программирования», таких как Forth[24] или Common Lisp). Это может быть преимуществом для программиста-индивидуала или небольшой группы программистов, но делает Tcl/Tk вряд ли пригодным для использования в качестве языка общего назначения при разработке в промышленном масштабе. Хотя наличие стандартизированных расширений снижает остроту этой проблемы. Tcl может использоваться и в крупных проектах в пределах своей «экологической ниши» (встроенные скрипты, «склеивание» компонент, WEB-программирование).

Хотя Tcl обладает всеми свойствами функционального языка, его интерпретатор до версии 8.6 не производил оптимизацию хвостовой рекурсии, что затрудняло использование чисто функционального стиля, уменьшало его эффективность. Впрочем, гибкость языка позволяет обойти эту проблему, реализовав подобие такой оптимизации на высоком уровне[25]. Наконец, появившаяся в тестовой версии 8.6 команда tailcall позволяет без особых проблем использовать хвостовую рекурсию.

Наиболее тесная интеграция Tcl с графической библиотекой Tk, которая зачастую используется и в сочетании с другими языками программирования — несомненное преимущество Tcl. Для создания GUI оболочек к консольным программам или пакетам консольных программ Tcl может оказаться наилучшим выбором.

По количеству разработанных для Tcl библиотек расширений и инструментальных средств несколько уступает Питону, а тем более Перлу, но вряд ли вы столкнётесь с их нехваткой. Чего, правда, нельзя сказать о количестве документации и литературы по Tcl, особенно — русскоязычной.

[править] На русском языке

Блоги, посвящённые TCL
  • geomapx.blogspot.com — Описание некоторых компонент фрэймворка для AOL Server, патчи для tclsqlite и AOL Server, библиотеки и скрипты.
  • etcl.ru — Про Tcl/Tk от Evolane и его применения в простых задачах
[править] Статьи и Обзоры

[править] Приложения

  • openacs.org(англ.) — система управления содержимым вебсайтов с богатыми возможностями расширения (CMF) на языке Tcl, расширенном XOtcl. Работает совместно с AOLServer
  • Ucome(англ.) — более компактная Tcl CMS.
  • Wub — веб-фреймворк на Tcl, наследник HTTP-сервера TclHttpd
  • project-open(англ.) — система групповой работы c веб-интерфейсом, работающая под управлением AOLserver.
  • Html Viewer 3 — минималистичный web-браузер, написанный на Tcl/Tk
  • The Simple Development Library(англ.) — библиотека полезных утилит для разработки Tcl/Tk-проектов.
  • AOLServer — web-сервер фирмы AOL со встроенным Tcl.
  • NaviServer — web-сервер написанный на Си и Tcl.
  • Rivet — модуль Tcl для Apache.
  • AMSN — программа с открытым исходным кодом для мгновенного обмена сообщениями
  • MacPorts — система для установки программного обеспечения, распространяемого в исходных кодах, для операционной системы Mac OS X.
  • TclMon — система мониторинга сетей
  • gitk — простая, но проверенная и быстрая программа. Написана на Tcl/Tk, распространяется с самим Git.
  • tkabber — tkabber, это программа для работы с протоколом XMPP, включающая в себя чат и другие функции.

[править] На русском языке

  • Брент Б. Уэлш, Кен Джонс, Джеффри Хоббс «Практическое программирование на Tcl и Tk», ISBN 5-8459-0661-X,
оригинал: Brent Welch, Ken Jones, Jeffrey Hobbs «Practical Programming in Tcl and Tk», ISBN 0-13-038560-3 (электронная версия[26]) (Частичный перевод)
  • Москвин П. В. «Азбука TCL», ISBN 5-93517-130-9
  • Алексей Петровский, Командный язык программирования TCL (Tool Command Language), ISBN 5-901321-16-2

[править] На английском языке

1-е издание «Tcl/Tk for Real Programmers», ISBN 0-12-261205-1
  • John K. Ousterhout, «Tcl and the Tk Toolkit», ISBN 0-201-63337-X
  • Mark Harrison, Michael McLennan, «Effective Tcl/Tk Programming. Writing Better Programs in Tcl and Tk», ISBN 0-201-63474-0
  • J. Adrian Zimmer «Tcl/Tk For Programmers», ISBN 0-8186-8515-8
  • «Tcl/Tk Cookbook» from Lakshmi Sastry Advanced Interactive Systems Group(электронная книга)
  • Salvatore Sanfillipo «Tcl Wise. Guide to the Tcl Programming Language» (первые 9 глав on-line)
  • Paul Raines, Jeff Tranter «Tcl/Tk in a Nutshell: A Desktop Quick Reference», ISBN 1-56592-433-9
  • Chad Smith «[incr Tcl/Tk] from the Ground Up», ISBN 0-07-212106-8
  • David Maggiano «CGI Programming with Tcl», ISBN 0-201-60629-1
  • J. M. Ivler, Kamran Husain, «Cgi Developer’s Resource: Web Programming in Tcl and Perl», ISBN 0-13-727751-2
  1. ↑ CAD software history в TclWiki
  2. ↑ Современные компьютерные технологии на службе Nike, Inc. в журнале САПР и графика, № 10’2000
  3. ↑ если ни одна из реализаций объектной модели вас не устраивает, либо вы интересуетесь, как это работает, можете ознакомиться со статьёй Creating Object Commands(англ.) от создателей SNIT
  4. ↑ см. также Steps towards functional programming
  5. ↑ [См. http://www.tcl.tk/about/history.html History of Tcl]
  6. ↑ Why you should not use Tcl
  7. ↑ Камерон Лэрд, Кэтрин Сорэз, SunWorld, США. Создатель Tcl уходит из Sun в новое предприятие, Computerworld № 07/1998
  8. ↑ Роберт Макмиллан, SunWorld. Tcl: путь к новой жизни, Computerworld № 36/1998
  9. ↑ John K. Ousterhout Scripting: Higher Level Programming for the 21st Century(англ.).
    Перевод этой статьи(рус.) в журнале «Открытые системы», № 3, 1998
  10. 10,010,1 см. Tcl Benchmarks
  11. ↑ Tcl: корпоративный вариант — Computerworld № 21/1999
  12. ↑ примеры на английском см. также в Tcl examples и wikipedia:b:en:Tcl Programming/Tk examples
  13. ↑ The Tcl/Java Project, Jacl
  14. ↑ The Eagle Project, (Extensible Adaptable Generalized Logic Engine)
  15. ↑ partcl. Implementation of tcl targeting the parrot VM (блог проекта)(англ.)
  16. ↑ Jim interpreter
  17. ↑ hecl.org: Hecl — The Mobile Scripting Language
  18. ↑ android-scripting. Scripting Layer for Android brings scripting languages to Android.
  19. ↑ Rivet - Webscripting for Tcl'ers
  20. ↑ tclhttpd — Tcl Web Server
  21. ↑ Wub pure tcl HTTP1.1 server, client and tool suite
  22. ↑ Woof. Web Oriented Object Framework
  23. ↑ Computer Language Benchmarks Game — сравнение производительности языков программирования.
  24. ↑ Интересен симбиозе Forth и Tcl в рамках проекта HolonT, где Forth транслируется в Tcl код.
  25. ↑ в Tail call optimization описана эта проблема и обозначены возможные пути её решения.
  26. ↑ полностью доступно первое издание, выборочно, более новые

Уроки Tcl

Уроки Tcl

Обновление 21.08.2006

Для тех, кому интересно написание на тикле веб-приложений! Выложил свою разработку -- чат + форум + почтовая система целиком на Tcl. Веб-интерфейс. Писал в своё время для нашей общаговской локальной сети.
Подробное описание тут: Eclipsis
Скачать программу + исходники тут: eclipsis.7z (800Kb)
(для запуска Eclipsis понадобится интерпретатор)

Добро пожаловать!

Этот сайт создан для людей, которые хотят научиться программировать. Программировать на языке Tcl (название произносится как "тикл"). Так же этот сайт может использоваться как справочное пособие.

Почему именно Tcl?, спросите вы. Дело в том, что этот язык оптимально подходит для обучения, и написания непрофессионалами небольших программ. В то же время, в него заложены большие возможности для расширения. Детальное описания истории этого языка, обсуждение эффективности использования можно найти в разделе Статьи.

Чтобы начать обучение требуется совсем немного - скачать сам Tcl в разделе Файлы, примерно 2 мегабайта. Там же есть небольшая программа "Интерпретатор Tcl", написанная мною для удобного выполнения примеров обучающего курса. Для создания и редактирования собственных программ вам понадобится любой текстовый редактор, сохраняющий текст без форматирования. Подойдет и стандартный Блокнот Windows, можно и WordPad, но лучше воспользоваться бесплатной программой Programmers Notepad 2.

В разделе уроки Tcl вы ознакомитесь с синтаксисом языка.

Tk - это средства графического интерфейса для Tcl. С их помощью можно легко создавать приложения с Windows-подобным интерфейсом. Начинать знакомиться с уроками Tk я рекомендую где-то после завершения второго десятка уроков Tcl.

Удачи...

Юрий "Yurez" Горбачев  

TCL / TK Язык программирования для сложных приложений - Здзислав Вжещ - Книга

TCL / TK Язык программирования для сложных приложений - описание продукта:

TCL - это язык сценариев, который используется для формулирования любых задач для компьютерной среды, включая создание сложные приложения в промышленности, исследованиях и сфере услуг.
Основные отличительные особенности TCL:
- переносимость - сценарий TCL переносится на различные компьютерные платформы, такие как Windows, Unix, Linux, Mac;
- легко программировать - TCL очень легко выучить; его сходство с нотацией C делает TCL понятным для большого числа программистов на C / C ++;
- восприимчивость к встраиванию в приложения, написанные на другом языке, напримерC / C ++ - это основное требование к языку, основная роль которого заключается в интеграции многомодульных, часто разрозненных приложений;
- расширяемость - важное свойство языка, позволяющее применять TCL в различных областях; Основное расширение TCL - это TK, т.е. набор инструментов для построения графических коннекторов User / Application;
- простая грамматика - помогает быстро выучить язык и снижает вероятность ошибки;
- многочисленная творческая и прикладная среда - TCL / TK, созданный в Университете Беркли (США), все еще интенсивно развивается и используется как в университетах и ​​исследовательских институтах, так и в промышленных центрах; количество пользователей в США давно перевалило за полмиллиона;
- бесплатно (т.е.бесплатно) доступ к исходному коду - недопустимое значение, особенно для программистов, которые сталкиваются с проблемой сложных приложений.
Представленное описание TCL / TK содержит множество практических примеров, что облегчает овладение языком.
Книга поставляется с CD-ROM, содержащим исходный код TCL / TK и двоичный код для платформы Windows (версия TCL / TK 8.0.5) с документацией.

Book TCL / TK Составной прикладной язык программирования от компании mikom.Автор книги - Здислав Вжещ. Относится к жанрам: информатика, программирование. Книга TCL / TK Составной прикладной язык программирования имеет 436 страниц. Его размеры 170х240.

.

TCL расширение файла | Что такое файл TCL и как его открыть?

Расширение файла TCL связано с Tcl / Tk (Tool Command Language) и используется в его сценариях и других файлах исходного кода.

Tcl (Tool Command Language) - очень мощный, но простой в изучении язык динамического программирования, подходящий для очень широкого спектра приложений, включая веб-приложения и компьютерные приложения, сети, администрирование, тестирование и многие другие.Открытый исходный код и удобный для бизнеса, Tcl - зрелый, но развивающийся язык, который действительно кроссплатформенный, простой в развертывании и хорошо расширяемый.

Tk - это набор инструментов с графическим пользовательским интерфейсом, который выводит разработку компьютерных приложений на более высокий уровень, чем традиционные подходы. Tk - это стандартный графический интерфейс не только для Tcl, но и для многих других динамических языков, с его помощью можно создавать богатые собственные приложения, которые последовательно работают в Windows, Mac OS X, Linux и других.

Как открыть .TCL файл?

Если у вас есть проблемы с открытием файла TCL, в большинстве случаев проблема заключается только в отсутствии установленного надлежащего приложения. Выберите одну из программ из списка и установите ее на свое устройство.Операционная система должна автоматически связать формат файла TCL с установленной программой. Если нет, щелкните правой кнопкой мыши файл TCL и выберите в меню «Открыть с помощью» . Затем выберите установленную программу и подтвердите операцию. Теперь все файлы TCL должны автоматически открываться в выбранной программе.

.

Изменить язык TCL 10 Plus, Показать еще

Как изменить язык в TCL 10 Plus ? Как выбрать язык в TCL 10 Plus? Как открыть список языков в TCL 10 Plus? Как получить доступ к языковым настройкам в TCL 10 Plus?

Если вы хотите изменить текущий язык вашего устройства марки TCL, оставайтесь с нами, чтобы узнать, как получить доступ к языковым настройкам, чтобы установить предпочтительный язык. Давайте воспользуемся приведенным ниже руководством, чтобы найти список языков и выбрать нужный язык.Посетите наш YT-канал HardReset.info и получите больше полезных руководств по TCL 10 Plus.

  1. Сначала разверните верхнюю планку, сдвинув ее вниз. Затем коснитесь значка «Настройки».
  2. Прокрутите вниз до раздела «Система» и введите там «Языки и элемент ввода».
  3. Вы должны перейти в «Языки» → «Добавить язык».
  4. В появившемся списке выберите нужный язык и затем с помощью символа с четырьмя полосами переместите этот язык в верхнюю часть списка добавленных языков.
  5. Хорошо! Теперь TCL 10 Plus будет полностью на нужном вам языке.

Сменить язык (TCL 10 Plus)

без рейтинга

Если это было полезно, поделитесь с другими и подпишитесь на нас Facebook, Twitter и Instagram

.

TCL 43P615 Телевизор - Lin Polska

Телевизор оснащен встроенным тюнером для цифрового эфирного телевидения второго поколения DVB-T2, который позволяет принимать наземные передачи в стандарте HD. Цифровое наземное телевидение, помимо увеличения количества программ, предлагает лучшее качество изображения и звука, а также позволяет добавлять дополнительные компоненты, такие как множество звуковых дорожек, включая объемный звук, подробный гид программ (EPG). Также возможно добавление интерактивных сервисов и платных сайтов.

Смотрите сотни телепрограмм со всего мира


Телевизор оснащен спутниковым цифровым ТВ-тюнером DVB-S2, который позволяет принимать телевизионные сигналы, передаваемые через спутник. Стандарт DVB-S2 является развитием стандарта DVB-S, предлагая меньшую полосу пропускания, необходимую для передачи контента HD, и повышая его качество. Спутниковое вещание позволяет принимать намного больше телеканалов, чем кабельное телевидение или антенный прием, предлагая сотни каналов со всего мира.

Технические характеристики: TCL 43P615

Изображение

Экран; 43 дюйма / 108 см, 16: 9

HD 4K UHD совместимый; 3840 x 2160

форматов HDR (расширенный динамический диапазон) / HDR; да / HDR10, HLG (гибридная логарифмическая гамма)

Оптимизация трафика / частота обновления; Индекс качества изображения-1500/50 Гц

Матричная подсветка; прямой светодиод

тюнер; DVB-T2, DVB-S2, DVB-C, аналог

Динамический контраст; Мега

Улучшение изображения; Micro Dimming Pro, 10-битная панель, UHD Color Extender, IPQ 2.0, сверхвысокое разрешение UHD

Игровой / спортивный режим; да / да

Звук

Система объемного звучания; да

Мощность динамика; 2 x 8 Вт

Регулировка высоких / низких частот; да

Эквалайзер; да

Дополнительные аудиофункции; AVL, Bluetooth Audio, Dolby Audio

Сетевые и мультимедийные функции

Smart TV; да

Wi-Fi; да

DLNA

; да

HbbTV; да

Интернет-браузер; да

Запись на USB; нет

Вспомогательная связь; Bluetooth, MHL - Mobile HD Link

Умная система; Android TV

функций Smart TV; Android 9.0 Pie, Google Play Store, Социальные сети, Chromecast

приложений Smart TV; Amazon Prime, Netflix, YouTube

Совместимость с голосовым помощником; Google Assistant, Amazon Alexa

Дополнительная информация

Меню на польском языке; есть

Телетекст; да

Дополнительные функции; 4-ядерный процессор, USB - фото, музыка, фильмы, Digital EPG, возможность обновления программного обеспечения, возможность управления через смартфон и планшет, возможность использования клавиатуры и мыши (Smart functions), T -Ссылка

Дополнительная информация; HDMI HCDP 2.3, USB HID, Bluetooth A2DP, HID, внутренняя память 16 ГБ (10 ГБ для пользователя)

Входы / выходы

Количество разъемов HDMI 2

Количество разъемов USB 1

EURO разъем №

Считыватель карт памяти №

Разъем Ethernet (LAN) да

Компонентный ввод №

Разъем VGA №

Цифровой оптический выход да

Цифровой коаксиальный выход №

Общий интерфейс (CI) 1

Выход на наушники есть

Физические параметры

Серия

(модель на год) TCL P615 / 2020 Серия

Цвет корпуса черный

Размеры с подставкой (W.Ш x В x Г) 97 x 62,3 x 18,5 см

Размеры без подставки (Ш x В x Г) 97 x 57,2 x 7,8 см

Ширина основания 81,7 см

Вес с / без подставки 7,6 кг / 7,5 кг

Настенный монтаж да / VESA 100x100 мм

Энергоэффективность

Энергетический класс A +

Потребляемая мощность IEC 62087 Ed.2 (в рабочем режиме) 43 Вт

Годовое потребление энергии 63 кВтч = 38,43 злотых в год

Размер диагонали экрана 43 дюйма / 108 см

Разрешение 3840 x 2160

Потребляемая мощность (в режиме ожидания) 0,5 Вт

Потребляемая мощность (макс.) 110 Вт

Электропитание 220 - 240 В, 50/60 Гц

Оборудование и принадлежности

Аксессуары пульт, 2 батарейки ААА для пульта, база, инструкция на польском языке, гарантийный талон

.

tcl => конструкции языка Tcl

Синтаксис

  • # Это действительный комментарий
  • # Это действительный комментарий

Публикация комментариев

Комментарии

Tcl лучше всего рассматривать как другую команду.
Комментарий состоит из # , за которым следует любое количество символов до следующей новой строки. Комментарий может появиться везде, где можно разместить команду.

  # это верный комментарий proc hello {} { # следующий комментарий требует; перед этим, чтобы указать, что новая команда # запускается.ставит «привет, мир»; # это действительно помещает "dlrow olleh" # это недействительный комментарий # комментарий ниже появляется в середине строки. # не действует. set hw { Привет; # это недействительный комментарий Мир } получает стандартный ввод от пользователя switch inputfromuser { # это недействительный комментарий. # switch ожидает, что здесь будет слово. его { # это действительно. Включенный переключатель содержит список команд. Привет } останавливаться { выход } } }  

Фигурные скобки в комментариях

Из-за того, как работает синтаксический анализатор Tcl, фигурные скобки в коде должны совпадать правильно.Сюда входят фигурные скобки в комментариях. 90 016 90 017 90 014 процентов вт {} { # этот {код не удастся ставит {привет мир} }

Отсутствующая скоба: будет брошена возможная неуравновешенная скоба в комментарии . 90 016 90 017 90 014 процентов вт {} { # этот {комментарий} имеет совпадающие фигурные скобки. ставит {привет мир} }

Это работает, когда скобы правильно соединены.переменная-for.my% использование

В языке Tcl слова разбиваются на пробелы, поэтому любые пробельные литералы или строки следует экранировать. Есть два способа заключить строки в кавычки. В фигурных скобках и кавычках.

  {привет мир} "Привет мир"  

При цитировании фигурных скобок замены не производятся. Встроенным фигурным скобкам может предшествовать обратная косая черта, но помните, что обратная косая черта является частью строки.

 % пут {\ {\}} \ {\} % put [длина строки {\ {\}}] 5 % ставит {привет [мир]} Привет мир] % установить альфа abc123 abc123 % put {$ alpha} $ альфа  

При цитировании в двойные кавычки обрабатываются подстановки команд, обратной косой черты и переменных.

 % ставит "привет [мир]" недопустимое имя команды "мир" % proc world {} {return my-world} % ставит "привет [мир]" привет мой мир % ставит "привет \ tworld" Привет мир % установить альфа abc123 abc123 % ставит "$ альфа" abc123 % ставит "\ {\}" {}  
.

Что такое TCL? - Определения TCL


Вы ищете значения TCL? Вы можете увидеть основные определения TCL на изображении ниже. Если вы хотите, вы также можете загрузить файл изображения, чтобы распечатать или поделиться им с другом через Facebook, Twitter, Pinterest, Google и т. Д. Чтобы увидеть все значения TCL, прокрутите вниз. Полный список определений представлен в таблице ниже в алфавитном порядке.

Основное значение TCL

На следующем изображении представлены наиболее часто используемые значения TCL.Вы можете загрузить файл изображения в формате PNG для использования в автономном режиме или отправить его своим друзьям по электронной почте.Если вы являетесь веб-мастером некоммерческого веб-сайта, пожалуйста, не стесняйтесь публиковать изображение определений TCL на своем веб-сайте.

Все определения TCL

Как упомянуто выше, вы увидите все значения TCL в следующей таблице. Обратите внимание, что все определения перечислены в алфавитном порядке. Вы можете щелкнуть ссылки справа, чтобы просмотреть подробную информацию о каждом определении, включая определения на английском и местном языках.

Что означает TCL в тексте

В общем, TCL - это акроним или сокращенное слово, которое определяется простым языком. На этой странице показано, как TCL используется в сообщениях и досках объявлений, а также в социальных программах, таких как VK, Instagram, WhatsApp и Snapchat. В приведенной выше таблице вы можете просмотреть все значения TCL: некоторые из них являются образовательными, другие - медицинскими и даже компьютерными. Если вам известно другое определение TCL, свяжитесь с нами. Мы включим его в следующее обновление нашей базы данных.Обратите внимание, что некоторые из наших сокращений и их определения созданы нашими гостями. Поэтому мы очень ценим ваше предложение о новых акронимах! В качестве возврата мы перевели аббревиатуру TCL на испанский, французский, китайский, португальский, русский и т. Д. Вы можете прокрутить вниз и щелкнуть меню языка, чтобы найти значения TCL на других 42 языках. .90,000

Информационные технологии 2 - Витольд Палушинский

лекция тема лекции материалов слайдов отпечатков Процессы: среда, вызывающие аргументы и запущенные процессы 1 Интерпретатор команд оболочки Bourne: создание сценариев 2 Знакомство с X Window System 3 Написание скриптов на языке Tcl
Программирование графических интерфейсов на Tk 4 Бинарные деревья 5 Деревья частично эквивалентны 6 Разнонаправленные стеки и деревья попытки 7 Хеш-массивы Библиотека Curses .

Смотрите также