TCL как он есть

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


Немного истории

Автор TCL (это название по-русски чаще всего произносится как "Тикль"), Джон Остераут, решил, что мир станет лучше, если в нём появится специализированный язык для встраивания в консольные приложения. Сказано - сделано. Так появилась первая версия TCL. По заявкам пользователей, Остераут расширил возможности своего детища, встроив в него средства для создания приложений с графическим пользовательским интерфейсом. Так появился TCL/TK. Долго ли, коротко ли, но язык перекочевал под крыло корпорации Sun Microsystems, которая сумела сделать интерпретатор языка максимально кросс-платформенным, хотя при этом почему-то по-прежнему свободным. Хотя, несмотря на последний факт, TCL подвергся острой критике главного идеолога свободной разработки программного обеспечения Ричарда Столлмэна. Главным доводом Столлмэна было низкое быстродействие интерпретатора языка.

Но вскоре интерес Sun к TCL сошёл практически на нет в связи с бумом языка Java, разработанным специалистами этой же компании, и Остераут основал собственную компанию Scriptics. Вскоре после этого был существенно переработан интерпретатор, который перед выполнением программы стал компилировать её в промежуточный байт-код, в результате чего скорость работы программ, написанных на TCL, возросла более чем в шесть раз. Также была добавлена поддержка Unicode и многопоточных приложений, что дало возможность разработчикам использовать TCL для написания серверных приложений. Потом фирма Scriptics была переименована в Ajuba Solutions, а затем её купила компания Interwoven, передавшая разработку TCL/TK сообществу программистов Tcl Core Team.

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

 


TCL сегодня

TCL - это, вообще говоря, аббревиатура. Полное название этого языка - Tool Command Language, что по-русски значит "командный язык инструментов".

Основная особенность классического TCL состоит в том, что этот язык программирования, в отличие от львиной доли остальных популярных сегодня языков, не является объектно-ориентированным. Адепты TCL объясняют это тем, что такой подход лучше отражает суть работы программы, так как процессор оперирует не с объектами, а с последовательностями команд, которые можно объединить в процедуры. Сложно сказать, насколько это мнение соответствует реальному положению вещей, но здесь, пожалуй, дело даже не в этом. А в чём? А в том, что языку, который задуман исключительно для склеивания разных частей системы в единое целое, в общем-то, ООП и не к чему. Впрочем, поскольку сам TCL давно перерос ту идею, на основе которой был создан, есть специальные расширения языка, реализующие объектно-ориентированный подход.

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

Как и широко известные, но уже довольно прочно забытые массами языки Lisp и Forth, TCL использует префиксную нотацию в написании команд. Что это значит? На самом деле всё очень просто. Каждая команда состоит из набора полей, разделённых пробелами. Первое поле должно быть именем команды, а необязательные остальные поля - передаваемые этой команде аргументы. Команда возвращает значение, иногда пустое. Команда - это то же самое, что в других языках программирования называется функцией или процедурой. Ключевых слов в TCL нет: управляющие конструкции - это тоже команды. Такой подход позволяет легко расширять язык в любую нужную программисту сторону, поскольку теоретически расширяемость у TCL - лучше некуда, было бы желание расширять. Например, все ОО-надстройки возникли именно благодаря этому свойству TCL.

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

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

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

#!/bin/tclsh
set arg [split [lindex $argv 0] "" ]
set result 0
foreach el $arg {
 set result [expr $result+$el]
}
puts $result


А что такое TK?

Именно такой вопрос может возникнуть после прочтения текста об особенностях TCL. Да, я уже упоминал, что многие называют Тикль сейчас TCL/TK ("Так-Тикль"), и поэтому самое время рассказать, что же скрывается ещё за двумя буквами.

TK - это сокращение и без того короткого слова ToolKit, за которым скрывается мощная библиотека для создания графического пользовательского интерфейса TCL-приложений. Библиотека эта, надо сказать, имеет весьма неплохие возможности. TK реализован для операционных систем Linux, Mac OS X, Unix, и Windows, причём в современных версиях TK пользовательский интерфейс имеет "родной" для конкретной операционной системы вид, то есть элементы управления выглядят точно так же, как и во всех остальных приложениях. Для библиотеки есть различные расширения, которые используются для создания окон произвольной формы, добавления поддержки технологии drag-and-drop и прочих подобных вещей.

TK очень хорошо ложится на событийную концепцию языка TCL и позволяет разработчикам многое делать гораздо проще, чем в других языках программирования. Кроме того, компоненты TK автоматически обрабатывают большинство событий, что упрощает задачу разработчиков по созданию приложений. Для TK есть наборы дополнительных компонентов, например, BWidget, Tix или incr Widgets.

Ещё одной интересной чертой библиотеки TK является то, что она адаптирована и для других интерпретируемых языков, а не только TCL, правда, интерпретатор TCL всё равно нужен при выполнении приложений, так как другие языки используют только внешний интерфейс для кода самой библиотеки, который, как известно, написан всё же именно на TCL. Есть специальные библиотеки Perl/Tk, Ruby/Tk, Python/Tk, которые реализуют поддержку TK для соответствующих языков программирования.


Инструментарий

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

В Linux интерпретатор TCL встроен в львиную долю дистрибутивов. Для других операционных систем всё несколько сложнее. Для Windows, например, можно воспользоваться продуктом ActiveTcl, который предлагает компания ActiveState (www.activestate.com/Products/ActiveTcl). В дистрибутив входят интерпретатор TCL, различные библиотеки и расширения, а также специальная библиотека для использования TCL через Windows Script Host. Правда, своего IDE в ActiveTCL нет, но можно воспользоваться Komodo, где есть даже специальный дизайнер TK-форм. Но если нет желания приобретать Komodo, то можно воспользоваться средой Visual TCL (vtcl.sourceforge.net). Сам интерпретатор и множество англоязычной документации можно найти на официальном сайте - tcl.tk. Русскоязычные материалы по TCL во Всемирной сети тоже присутствуют, например, по адресу tclstudy.narod.ru.


За кадром

Однако, как бы много я ни сказал о TCL и TK, но многое осталось за кадром. Например, быстродействие программ, которому ещё очень даже есть к чему стремиться (TCL-программы до сих пор заметно медленнее тех, что написаны на Perl'е). В то же время то, что адепты TCL преподносят как безоговорочные плюсы, тоже может вызвать ряд затруднений. Поразительная расширяемость языка делает очень трудной задачу стандартизации, и это, само собой, накладывает свой отпечаток на возможности использования TCL для написания действительно крупных приложений. Хотя TCL и сравнивают часто с Java, но мне кажется, что пальма первенства по популярности неспроста именно за вторым из этих языков. Своеобразный синтаксис TCL тоже делает своё чёрное дело, и потому число тех, кто желает его изучить, не возрастает экспоненциально, как это имеет место для Java, а линейно, причём не очень-то активно.

Хотя, спору нет, для склеивания нескольких приложений, написанных на компилируемых языках программирования, по отзывам многих из тех, кто пробовал TCL и сравнивал его в этой сфере с альтернативными вариантами, он был на высоте. Встраиваемость TCL в прикладные приложения - тоже очень приятная и полезная функция. Особенно заметно это в мире UNIX-подобных систем, где TCL - второй по почитаемости язык после C (ну и, может быть, ещё Emacs Lisp). Хотя и для Windows он определённо подходит - другое дело, что в этой ОС уже есть встроенные интерпретаторы VBScript'а и Jscript'а, а потому TCL испытывает с их стороны нечто, что можно было бы назвать при определённых допущениях конкуренцией.

Хотя, конечно, все эти рассуждения трудно оценить, не опробовав TCL самостоятельно. Так что я завершаю свой рассказ о нём, хочу только напоследок привести цитату из слов автора языка программирования С Брайана Кернигана: "Tcl/Tk придает работе магическую продуктивность, за несколько часов можно достигнуть тех же результатов, что за дни или недели при разработке на C или C++... Tk весьма эффективен для большинства приложений, многие элементы интерфейса (виджеты) реализованы настолько хорошо, что остается только удивляться, как подобная работа могла быть выполнена так качественно... Удачным кажется и то, что разделение задач между Тсl и С/С++ осуществляется достаточно легко, надо только знать, какой инструмент лучше справляется с задачей... Расширение системы дополнительным Tcl-кодом, загружаемым напрямую в Tcl-библиотеку приложения, в полном согласии с оригинальной идеей Остераута, повышает эффективность программы, в целом, упрощает ее структуру и улучшает мобильность... Я не уверен, что Тсl мог бы выжить как самостоятельный продукт - у него слишком много конкурентов. Но у сочетания Tcl/Tk в Unix-мире нет конкурентов... Система исключительно надежна, очень хорошо документирована... свободно доступна... безукоризненно высокого качества".

Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by

Версия для печатиВерсия для печати

Номер: 

42 за 2007 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Аватар пользователя saipr