|
|
|
|
 |
Технологии |
|
Tool Command Language (TCL)
«командный язык инструментов», читается «тикль») — скриптовый язык высокого уровня.
Tcl часто применяется совместно с графической библиотекой Tk (Tool Kit). Связку Tcl/Tk по-русски иногда называют «Так-тикль».
Области применения языка — быстрое прототипирование, создание графических интерфейсов для консольных программ (пакетов программ), встраивание в прикладные программы, тестирование. Иногда Tcl применяется для создания CGI скриптов.
Tcl, наряду с Perl и Python, стал одним из трёх классических скриптовых языков общего назначения. Эта троица фигурирует не только в качестве списка свободных дистрибутивов, собираемых в ActiveState, но и, например, как языки, на которых (помимо диалекта PL/pgSQL) можно писать триггеры и хранимые процедуры популярного сервера БД PostgreSQL.
В Tcl данными всех типов, включая код программы, можно манипулировать как строками. Это делает его языком с естественной поддержкой метапрограммирования. Эта парадигма программирования учитывалась в ходе разработки и эволюции языка.
Программа на Tcl состоит из команд, разделённых символами новой строки или точками с запятой. Каждая команда состоит из набора полей, разделённых пробелами. Первое поле должно быть именем команды, а необязательные остальные поля — передаваемые этой команде аргументы. Команда возвращает значение, иногда пустое. То есть, как и в Лиспе, в Tcl используется префиксная нотация.
Ключевых слов как таковых нет — понятие команды в Tcl аналогично понятию процедуры или функции распространённых языков программирования. Это относится и к управляющим конструкциям языка. В сочетании с элементарным синтаксисом это обеспечивает хорошую расширяемость языка, в том числе и библиотеками, написанными на других языках, таких как C/C++ или Java.
В Tcl также качественно реализована модель управления программой на основе событий. События могут генерироваться таймером, при появлении данных в канале, изменении значения переменной, при завершении какой-либо внешней программы, или просто при работе пользователя с интерфейсом Tk. Можно задавать свои события и управлять ими.
Как и большинство современных скриптовых языков Tcl содержит развитые средства работы с регулярными выражениями, работает с ассоциативными массивами и другими динамическими структурами данных.
Синтаксис Tcl
Скрипт
команды, разделённые переводом строки или точкой с запятой (;).
Команда
слова, разделённые пробелами.
commandName argument1 argument2 … argumentN
Первое слово — имя команды, остальные — её аргументы. Любой аргумент может быть заменён другой командой, помещённой в квадратные скобки. Любые аргументы в фигурных скобках передаются команде «как есть», в виде единого аргумента.
Символы, имеющие особое значение
$ — вызывает подстановку значения переменной.
[] — вызывает подстановку результата выполнения команды внутри скобок.
"" — группирует аргументы в один с подстановкой значений переменных.
{} — группирует аргументы в один без подстановки значений переменных.
\ — экранирует следующий символ или вызывает подстановку управляющего символа.
# — начало однострочного комментария, должен быть после неэкранированного символа перевода строки или ";" (точки с запятой).
Замечания о процессе разборки скрипта
Разбивка на слова, подстановка значений переменных и результатов выполнения команд производятся за один проход по команде.
Все символы, находящееся внутри скобок {} и кавычек "", рассматривается как одно слово.
Первое слово команды рассматривается как встроенная или определённая процедура.
Замечания о процессе разборки скрипта
Разбивка на слова, подстановка значений переменных и результатов выполнения команд производятся за один проход по команде.
Все символы, находящееся внутри скобок {} и кавычек "", рассматривается как одно слово.
Первое слово команды рассматривается как встроенная или определённая процедура.
Реализация
В настоящее время работа над ядром языка Tcl ведётся группой разработчиков именуемой Tcl Core Team. Самые свежие версии Tcl-транслятора и основных библиотек доступны в репозитории на SourceForge.net, см. список.
Транслятор Tcl компилирует программу в промежуточное представление — байткод, а затем интерпретирует её. В отличие от, например Python — это промежуточное представление не сохраняется на диск, программа может хранится только в исходных текстах, возможно упакованных в StarKit модуль или с помощью какого-нибудь другого враппера. В зависимости от параметров компиляции интерпретатор Tcl может поддерживать или не поддерживать многопоточность.
Хотя в большинстве учебников по Tcl для начинающих говорится что то вроде «в Tcl есть всего один тип переменных — строка», на самом деле трансляторы Tcl уже давно как устроены по другому. Внутри Tcl использует систему динамических типов с автоматическим, прозрачным преобразованием к строковому виду.
Существует также альтернативная реализация Tcl написанная на Java — Jacl, ведутся эксперименты по трансляции Tcl программ в код виртуальной машины Parrot, разрабатываемой для шестой версии Perl.
Для программирования встраиваемых систем и встраивания в приложения разработан специальный диалект Tcl Jim. Это интерпретатор реализующий большое подмножество Tcl, расширенное дополнительными механизмами объектно-ориентированного и функционального программирования и занимающий в скомпилированном виде менее 100 килобайт.
Другой диалект Tcl — скриптовый язык мобильных устройств Hecl, реализованный на Java (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. Текущая версия TCL — 8.5.
Дистрибутивы
Все нижеперечисленные дистрибутивы распространяются свободно и собраны из компонентов, имеющих ту или иную свободную лицензию. Большинство из них — кроссплатформены (кроме WinTclTk и Tcl/Tk Aqua), хотя в Unix-системах Tcl/Tk обычно является частью дистрибутива ОС.
ActiveTcl
Самый распространённый дистрибутив TCL. Подобно другим продуктам компании ActiveState включает в себя большой набор библиотек и расширений. В windows-версиях включает в себя средства интеграции с WSH. Какие либо инструментальные средства, облегчающие жизнь программиста, отсутствуют. Фирма продаёт пакет TclDevKit содержащий средства отладки и создания автономных программ (последнее на базе технологии StarKit) и Komodo — универсальное IDE для скриптовых языков, включающее средства визуального программирования Tk-форм.
WinTclTk
Более компактный, активно развивающийся дистрибутив ориентированный на работу с XOTcl — объектно-ориентированным расширением Tcl. Список включённых в него библиотек несколько уже, чем в ActiveTcl, но "джентльменский набор" вы здесь найдёте. В этот дистрибутив входят Tloona IDE — среда разработки традиционного типа и XOTclIde — среда объектно-ориентированного программирования в стиле Smalltalk, обе — с отладчиками. Также на сайте разработчиков свободно доступен пакет для создания единого запускаемого файла TkWrapper основанный на FreeWrap — технологии, альтернативной StarKit, основанной на простом ZIP-сжатии.
TclKit
Это Tcl/Tk c базовым набором библиотек в одном компактном выполняемом файле. Дистрибутив создан с использованием технологии StarKit. Содержит Библиотеку MetaKit позволяющую управлять содержанием этого файла.
dqkit
Альтернативная сборка, известная как «TclKit на стероидах», имеется несколько вариантов отличающихся составом библиотек, поддержкой многопоточности и т. д.
Tcl/Tk Aqua
Дистрибутив для Mac OS. Существует три варианта: TclTkAquaBI - надмножество ActiveTCL, компактный дистрибутив TclTkAqua и минимальный набор TclTkAquaStandalone.
Достоинства и недостатки
Недостатком ранних версий Tcl/Tk, несомненно, было низкое быстродействие. Версии ниже 8-й использовали прямую интерпретацию исходного текста, однако использование байткода разрешило эту проблему. Сейчас по быстродействию Tcl не сильно отличается от PHP, хотя заметно уступает таким скриптовым языкам как, например, Python или Lua. Сложные или критические по времени выполнения участки кода рекомендуется выполнять в виде внешних модулей на C/C++.
Tcl/Tk, также как, например Forth отличают необычность синтаксиса в сочетании с ничем не ограниченной расширяемостью. Это может быть преимуществом для программиста-индивидуала или небольшой группы программистов, но делает Tcl/Tk вряд ли пригодным для разработки в промышленном масштабе. Хотя наличие стандартизированных расширений снижает остроту этой проблемы и в пределах своей «экологической ниши» (встроенные скрипты, «склеивание» компонент, WEB-программирование) Tcl может использоваться и в крупных проектах. Интересеный подход применен при симбиозе Forth и Tcl в рамхах HolonT когда в рамках IDE используется Forth, как еще более простой и гибкий язык, но при этом генерация и выполнение кода происходит в Tcl интерпретаторе. Возможности Tcl и Forth языков, при этом, используются наиболее эффективно.
Хотя Tcl обладает всеми свойствами функционального языка, его интерпретатор не производит оптимизацию хвостовой рекурсии, что затрудняет использование чисто функционального стиля, уменьшает его эффективность. Однако гибкость языка позволяет обойти эту проблему, реализовав подобие такой оптимизации на высоком уровне.
Наиболее тесная интеграция Tcl с графической библиотекой Tk, которая зачастую используется и в сочетании с другими языками программирования — несомненное преимущество Tcl. Для создания GUI оболочек к консольным программам или пакетам консольных программ Tcl может оказаться наилучшим выбором.
По количеству разработанных для Tcl библиотек расширений и инструментальных средств несколько уступает Питону, а тем более Перлу, но вряд ли вы столкнётесь с их нехваткой. Чего, правда, нельзя сказать о количестве документации и литературы по Tcl, особенно — русскоязычной.
| |
|
|
Для корректного отображения этого элемента вам необходимо установить FlashPlayer и включить в браузере Java Script.
|
 | Новая версия |
 | Новые Update&Patch |
|
|