tcl/tk-lor-faq

Tool Command Language (Tcl)

Tcl или Tool Command Language («Командный язык инструментов» - пер.с англ.) один из трех классических скриптовых языков (цитата с Wikipedia), который в отличие от Perl и Python очень плохо освещен, а ведь у него есть такие преимущества как простота, быстрота разработки прикладных программ, возможность писать в функциональном стиле, хорошая реализация метапрограммирования. Ну и в конце концов, это же "Lisp on Drugs!".

ToolKit (Tk)

Tk или Toolkit («Набор инструментов», «инструментарий» - пер.с англ.) — кроссплатформенная библиотека базовых элементов (виджетов) графического интерфейса, созданная Джоном Остераутом в качестве расширение для Tcl. Сейчас с помощью "мостов" (специальных библиотек) она может использоваться и другими языками. Что характерно - все языки используют Tcl как мост для Tk. На данный момент есть порты для Linux, Mac OS X, Unix, и Microsoft Windows. В 8-ой версии Tcl/Tk интерфейс имеет «родной» вид для операционной системы, в которой исполняется программа. С версии 8.5 появилась возможность использовать темы дополнений (Ttk).

Для начала ответим на некоторые самые простейшие вопросы:


Часто задаваемые вопросы по Tcl/Tk (FAQ: Tcl/Tk)

Вопрос (В): Что такое 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.

В: С чего начать?

О: Для начала можно ознакомиться со статьей в Вики, потом перейти к самому простому руководству на русском (к сожалению блокируется антиспамом, адрес: tclstudy(точка)narod(точка)ru).

В: Какие есть реализации 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/Tk

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/Tk

Для начала огорчу тех, кто с пеной у рта кричит о том, что "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 так и не "потонул", а "лисп" не смог занять ведущую позицию среди языков для разработки настольных приложений.

Полезные ссылки

1. Tcl (Tutorial for cool language) for Tcl/Tk - неплохой туториал на английском;

2. Русская документация - русская документация с сайта florin.ru (для версии 8.0)

3. Русская документация - русская документация для 8.4.1

4. Анклоязычная Wiki - английская вики по Tcl/Tk

5. Реверси в 64 строки - пример игры "Реверси" написанной на Tcl/Tk всего в 64 строки

6. Пятнашки в 10 строк - пример игры "Пятнашки" написанные на Tcl/Tk всего в 10 строк кода

7. Книга рецептов- онлайновая книга рецептов по Tcl/Tk, к сожалению на английском

8. TkDocs - очень хороший блог-документация по Tk. Рассматривается код на 4 языках - Tcl, Ruby, Perl и Python (eng.)

9. Официальная документация - официальная документация по Tcl/Tk (включая версию 8.6)

10. PLEAC-Tcl - решенные задачи на tcl

11. Туториал по ООП-Tcl - хороший туториал по ООП в tcl через XOTcl

12. Компиляция файлов Tcl - небольшая заметка о том, как компилировать файлы .tcl для Windows