Tcl tk-lor-faq
Tcl или Tool Command Language («Командный язык инструментов» — перевод с английского) — один из трех классических скриптовых языков, который в отличие от 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.
С чего начать?
Для начала можно ознакомиться со статьей в Вики, потом перейти к самому простому руководству на русском Уроки 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/Tk
Calculate Linux/Gentoo
emerge dev-lang/tcl, emerge dev-lang/tk, emerge dev-tcltk/tcllib
Fedora
yum install tcl tk
Ubuntu
sudo apt-get install tcl tk
Windows и MacOS
Проще всего использовать бинарные дистрибутивы. Качаем любой и устанавливаем в два клика.
Сборка Tcl/Tk из исходников
Скачайте исходники (лежат отдельно для Tcl и отдельно для Tk) с официального сайта и выполните следующие команды для каждого архива:
Распаковка исходных файлов:
$ tar zxf имя_файла.tar.gz
Перейдите в папку командой:
$ cd имя_файла && cd unix
Выполните:
$ ./configure --prefix=/opt --enable-gcc
(для Тк: $ ./configure —with-tcl=../../tcl8.5a5/unix —prefix=/opt —enable-gcc)
Затем:
$ make
Потом:
$ make test
И в завершениии:
$ make install
- Внимание: данный способ установки является «плохим тоном», так как устанавливает Tcl/Tk в обход пакетного менеджера, что может повлечь за собой некоторый проблемы. Лучше собрать пакет и установить его штатным способом, если, конечно, это возможно.
Для запуска интерактивной среды наберите в терминале:
$ 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
9. Официальная документация — официальная документация по Tcl/Tk (включая версию 8.6)
10. PLEAC-Tcl — решенные задачи на tcl
11. Туториал по ООП-Tcl — хороший туториал по ООП в tcl через XOTcl
12. Компиляция файлов Tcl — небольшая заметка о том, как компилировать файлы .tcl для Windows