Tcl tk-lor-faq

Материал из MediaWiki
Перейти к навигации Перейти к поиску

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