stringtranslate.com

Ткл

Tcl (произносится как « щекотать » или как инициализм [8] ) — это интерпретируемый динамический язык программирования высокого уровня общего назначения . Он был разработан с целью сделать его очень простым, но мощным. [9] Tcl приводит все в форму команды , даже такие программные конструкции, как назначение переменных и определение процедур. [10] Tcl поддерживает несколько парадигм программирования , включая объектно-ориентированный , императивный , функциональный и процедурный стили.

Он обычно используется в приложениях на языке C [11] для быстрого прототипирования , написания сценариев, графических интерфейсов и тестирования. [12] Интерпретаторы Tcl доступны для многих операционных систем , что позволяет коду Tcl работать в самых разных системах. Поскольку Tcl — очень компактный язык, он используется на платформах встраиваемых систем как в полной форме, так и в нескольких других небольших версиях. [13]

Популярная комбинация Tcl с расширением Tk называется Tcl/Tk (произносится «tickle teak» или инициализм ) и позволяет создавать графический интерфейс пользователя (GUI) непосредственно на Tcl. Tcl/Tk включен в стандартную установку Python в виде Tkinter .

История

Язык программирования Tcl был создан весной 1988 года Джоном Оустерхаутом, когда он работал в Калифорнийском университете в Беркли . [14] [15] Первоначально «рожденные из-за разочарования», [11] по словам автора, когда программисты разрабатывали свои собственные языки для расширения программного обеспечения для автоматизации электронного проектирования (EDA) и, более конкретно, инструмента проектирования СБИС Magic , который был профессиональный фокус Джона в то время. [16] Позже Tcl получил признание сам по себе. Оустерхаут был награжден премией ACM Software System Award в 1997 году за Tcl/Tk. [17]

Название первоначально происходит от языка Tool Command , но обычно пишется Tcl , а не TCL . [18]

Конференции и семинары Tcl проводятся как в США, так и в Европе. [28]

Функции

Файл Tcl, редактируемый в Eclipse IDE

Возможности Tcl включают в себя

Safe-Tcl

Safe-Tcl — это подмножество Tcl, которое имеет ограниченные функции, поэтому сценарии Tcl не могут нанести вред хост-компьютеру или приложению. [31] Доступ к файловой системе ограничен, а выполнение произвольных системных команд запрещено. Он использует модель двойного интерпретатора, при которой ненадежный интерпретатор выполняет код в ненадежном сценарии. Он был разработан Натаниэлем Боренштейном и Маршаллом Роузом для включения активных сообщений в электронную почту. Safe-Tcl можно включать в электронную почту, если поддерживаются application/safe-tcl и multipart/enabled-mail . С тех пор функциональность Safe-Tcl была включена в стандартные выпуски Tcl/Tk. [32] [33]

Синтаксис и фундаментальная семантика

Синтаксис и семантика Tcl описаны двенадцатью правилами [34], известными как Додекалог. [35]

Сценарий Tcl состоит из серии вызовов команд. Вызов команды представляет собой список слов, разделенных пробелами и заканчивающихся новой строкой или точкой с запятой. Первое слово — это имя команды, которая может быть встроена в язык, найдена в доступной библиотеке или определена в самом скрипте. Следующие слова служат аргументами команды:

Имя команды Аргумент1 Аргумент2 ... АргументN

В следующем примере используется команда puts (сокращение от «put string») для отображения текстовой строки на консоли хоста:

ставит «Привет, Мир!» 

При этом отправляется строка «Hello, World!» на стандартное устройство вывода вместе с добавленным символом новой строки.

Переменные и результаты других команд можно заменить строками, как в этом примере, где используются команды set и expr для сохранения результата вычисления в переменной (обратите внимание, что Tcl не использует его =в качестве оператора присваивания), а затем использует puts для печати результата вместе с пояснительным текстом:

# expr оценивает текстовую строку как набор  выражений sum [expr 1 + 2 + 3 + 4 + 5 ] помещает «Сумма чисел 1..5 равна $sum».   

Персонаж #вводит комментарий . Комментарии могут появляться везде, где интерпретатор ожидает имя команды.

# с фигурными скобками замена переменных выполняется выражением set  x 1 set sum [expr { $x + 2 + 3 + 4 + 5 }]; # $x не заменяется перед передачей параметра в expr; # expr заменяет $x на 1, а при вычислении выражения получается : «Сумма чисел 1..5 равна $sum». ; # сумма равна 15                
# без фигурных скобок подстановка переменных происходит на сайте определения (лексическая область видимости) set  x 2 set op * set y 3 set res [expr $x$op$y ]; # $x, $op и $y заменяются, и выражение оценивается как 6, что означает «$x $op $y is $res». ; # $x, $op, $y и $res заменяются и оцениваются как строки           

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

Перед анализом любых команд или аргументов происходит одна специальная замена . Если последний символ в строке (т. е. непосредственно перед новой строкой) представляет собой обратную косую черту, то комбинация обратной косой черты и новой строки (а также любые пробелы или табуляции, следующие сразу за новой строкой) заменяются одним пробелом. Это обеспечивает механизм продолжения строки , благодаря которому длинные строки исходного кода могут переноситься на следующую строку для удобства читателей.

Продолжая обычную обработку аргументов, слово, начинающееся с символа двойной кавычки ( "), расширяется до следующего символа двойной кавычки. Таким образом, такое слово может содержать пробелы и точки с запятой, при этом эти символы не интерпретируются как имеющие какое-либо особое значение (т. е. они рассматриваются как обычные текстовые символы). Слово, начинающееся с открывающей фигурной скобки ( {), продолжается до следующего символа закрывающей фигурной скобки ( }). Внутри фигурных скобок подавляются все формы замены, за исключением ранее упомянутого исключения обратной косой черты и новой строки. Слова, не заключенные ни в одну из конструкций, называются голыми словами.

В словах без кавычек и в двойных кавычках могут встречаться три типа замены:

Замена происходит слева направо за одно сканирование каждого слова. Любой замененный текст не будет повторно сканироваться на предмет возможных дальнейших замен. Однако в одном слове может встречаться любое количество замен.

Начиная с Tcl 8.5, любое слово может иметь префикс {*}, что приводит к разбиению слова на составляющие его подслова для целей построения вызова команды (аналогично последовательности ,@функции квазицитирования в Лиспе ).

Как следствие этих правил, результат любой команды может использоваться в качестве аргумента для любой другой команды. Обратите внимание, что, в отличие от командных оболочек Unix , Tcl не анализирует повторно никакую строку, если это явно не указано, что делает интерактивное использование более громоздким, а использование сценариев более предсказуемым (например, наличие пробелов в именах файлов не вызывает затруднений).

Единственный знак равенства ( =) вообще не играет особой роли в языке. Знак двойного равенства ( ==) — это проверка на равенство, которая используется в контекстах выражений, таких как exprкоманда и в первом аргументе if. (Обе команды являются частью стандартной библиотеки; специального места в ней они не имеют и при желании могут быть заменены.)

Большинство команд Tcl, особенно в стандартной библиотеке, являются переменными , а proc(конструктор для скриптовых командных процедур) позволяет определять значения по умолчанию для неуказанных аргументов и универсальный аргумент, позволяющий коду обрабатывать произвольное количество аргументов. .

Tcl не является статически типизированным: каждая переменная может содержать целые числа, числа с плавающей запятой, строки, списки, имена команд, словари или любые другие значения; значения переинтерпретируются (с учетом синтаксических ограничений) как другие типы по требованию. Однако значения неизменяемы , и операции, которые их изменяют, на самом деле вместо этого просто возвращают новое значение.

Основные команды

Наиболее важные команды, относящиеся к выполнению программы и операциям с данными:

Обычные команды управления выполнением:

Вышеупомянутыми командами цикла можно дополнительно управлять с помощью следующих команд:

Расширенные команды

Верхний уровень

uplevelпозволяет выполнять командный сценарий в области , отличной от текущей внутренней области стека. Поскольку командный сценарий сам может вызывать процедуры, использующие команду повышения уровня , в конечном итоге это преобразует стек вызовов в дерево вызовов. [36]

Первоначально он был реализован, чтобы позволить процедурам Tcl переопределять встроенные команды (например , for , if или while ) и при этом иметь возможность манипулировать локальными переменными . Например, следующий сценарий Tcl представляет собой повторную реализацию команды for (без обработки исключений ):

proc  for { initCmd testExpr заранееCmd bodyScript } { повышение уровня 1 $initCmd set testCmd [ list expr $testExpr ] while {[uplevel 1 $testCmd ]} { повышение уровня 1 $bodyScript повышение уровня 1 $advanceCmd } }                         

Упвар

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

Команда decr, которая работает как встроенная incrкоманда, за исключением того, что она вычитает значение из переменной, а не добавляет его:

proc  decr { varName { decrement 1 }} { upvar 1 $varName var incr var [expr { -$decrement }] }            

Объектно-ориентированный

В 2012 году в Tcl 8.6 добавлена ​​встроенная система динамических объектов TclOO. [29] Она включает в себя такие функции, как:

oo :: class  createfruit { метод eat {} { ставит "вкуснятина!  " } } oo :: class create Banan { конструктор суперкласса Fruit {} { моя переменная очищенный набор очищен 0 } метод кожура {} { моя переменная очищенный набор очищен 1 ставит "кожу теперь снимают" } метод съедобен ? {} { моя очищенная переменная return $peeled } метод eat {} { if { ! [ моё съедобное ? ]} { моя кожура } далее } } set b [ банан новый ] $b eat  печатает «кожа теперь снята» и «вкусно!» Fruit уничтожить $b eat  ошибка «неизвестная команда»                                                                         

В Tcl не было объектно-ориентированного (ОО) синтаксиса до 2012 года [29] , поэтому появились различные пакеты расширений, позволяющие реализовать объектно-ориентированное программирование. Они широко распространены в существующем исходном коде Tcl. Популярные расширения включают в себя:

TclOO был добавлен не только для создания мощной объектно-ориентированной системы, но и для того, чтобы пакеты расширений могли создавать объектно-ориентированные абстракции, используя его в качестве основы. После выпуска TclOO incr Tcl был обновлен и теперь использует TclOO в качестве основы. [27]

Разработка веб-приложений

Веб-сервер Tcl — это реализация сервера протокола HTTP на чистом Tcl. Он работает как скрипт поверх стандартного интерпретатора Tcl.

Apache Rivet — это система программирования с открытым исходным кодом для HTTP-сервера Apache , которая позволяет разработчикам использовать Tcl в качестве языка сценариев для создания динамических веб-приложений. Rivet похож на PHP , ASP и JSP . Rivet был первоначально разработан Дэймоном Кортни, Дэвидом Велтоном, Массимо Манги, Харальдом Ольманном и Карлом Лехенбауэром . Rivet может использовать любой из тысяч общедоступных пакетов Tcl, которые предлагают бесчисленное количество функций, таких как взаимодействие с базами данных (Oracle, PostgreSQL, MySQL, SQLite и т. д.) или интерфейсы с популярными приложениями, такими как GD Graphics Library .

Взаимодействие с другими языками

Tcl изначально взаимодействует с языком C. [38] Это связано с тем, что изначально он был написан как основа для предоставления синтаксического интерфейса для команд, написанных на C, и все команды на языке (включая вещи, которые в противном случае могли бы быть ключевыми словами , например ifили while) реализованы таким образом. . Каждой функции реализации команды передается массив значений, описывающих (уже замененные) аргументы команды, и она может интерпретировать эти значения по своему усмотрению.

Симуляторы цифровой логики часто включают в себя интерфейс сценариев Tcl для моделирования аппаратных языков Verilog , VHDL и SystemVerilog .

Существуют инструменты (например, SWIG , Ffidl) для автоматической генерации необходимого кода для соединения произвольных функций C и среды выполнения Tcl, а Critcl делает обратное, позволяя встраивать произвольный код C внутрь сценария Tcl и компилировать его во время выполнения в DLL .

Пакеты расширений

Язык Tcl всегда позволял использовать пакеты расширений, которые предоставляют дополнительные функции, такие как графический интерфейс, автоматизация приложений на основе терминала, доступ к базе данных и т. д. Часто используемые расширения включают в себя:

Тк
Самым популярным расширением Tcl является набор инструментов Tk , который предоставляет библиотеку графического пользовательского интерфейса для различных операционных систем . Каждый графический интерфейс состоит из одного или нескольких фреймов . У каждого кадра есть менеджер макетов.
Ожидать
Одним из других очень популярных расширений Tcl является расширение Expect . Ранняя тесная связь Expect с Tcl в значительной степени ответственна за популярность Tcl в многочисленных областях использования, таких как тестирование Unix, где Expect очень успешно использовался (и до сих пор используется) для автоматизации telnet, ssh и последовательных сеансов для выполнения множество повторяющихся задач (например, создание сценариев для приложений, которые раньше были только интерактивными). Tcl был единственным способом запуска Expect, поэтому Tcl стал очень популярен в этих областях промышленности.
Плитка/ТТК
Tile/Ttk [39] — это коллекция виджетов стилей и тем, которая может заменить большинство виджетов в Tk вариантами, которые действительно являются родными для платформы, посредством вызовов API операционной системы . Таким образом рассматриваются темы Windows XP , Windows Classic, Qt (которая подключается к библиотекам среды KDE X11 ) и Aqua (Mac OS X). Тему также можно создать без этих вызовов, используя определения виджетов, дополненные растровыми изображениями . Созданные таким образом темы включают Classic Tk, Step, Alt/Revitalized, Plastik и Keramik. В Tcl 8.4 этот пакет известен как Tile, а в Tcl 8.5 он включен в основной дистрибутив Tk (как Ttk).
Тикс
Tix, Tk Interface eXtension, представляет собой набор компонентов пользовательского интерфейса, расширяющих возможности приложений Tcl/Tk и Python. Это пакет программного обеспечения с открытым исходным кодом, поддерживаемый волонтерами группы Tix Project Group и выпускаемый под лицензией в стиле BSD. [40]
Itcl/IncrTcl
Itcl — это объектная система для Tcl, которая обычно называется [incr Tcl] (это способ увеличения в Tcl, аналогичный названию C++).
Tcllib
Tcllib — это набор скриптовых пакетов для Tcl, которые можно использовать без каких-либо этапов компиляции.
Тклиб
Tklib — это набор служебных модулей для Tk, дополняющий Tcllib.
тДОМ
tDOM — это расширение Tcl для анализа XML, основанное на парсере Expat.
TclTLS
TclTLS — это расширение OpenSSL для Tcl.
ТклУДП
Расширение TclUDP [41] предоставляет простую библиотеку для поддержки сокетов протокола пользовательских датаграмм (UDP) в Tcl.
Базы данных
Tcl Database Connectivity (TDBC), часть Tcl 8.6, представляет собой общий интерфейс доступа к базе данных для сценариев Tcl. В настоящее время он поддерживает драйверы для доступа к базам данных MySQL , ODBC , PostgreSQL и SQLite . В будущем планируется еще больше. Доступ к базам данных также поддерживается через расширения для конкретных баз данных, которых имеется множество. [42]

Смотрите также

Рекомендации

  1. ^ ab «Разработка ядра Tcl/Tk». Tcl-разработчик Xchange . Проверено 1 ноября 2016 г.
  2. ^ Ошибка: невозможно правильно отобразить ссылку. Подробности смотрите в документации .
  3. ^ «Условия лицензии Tcl/Tk» . Разработчик Tcl Xchange . Проверено 2 ноября 2016 г.
  4. ^ "Tcl Dev Kit - Компилятор" . Документы ActiveState . Проверено 2 ноября 2016 г.
  5. ^ Лердорф, Расмус (26 апреля 2007 г.). «PHP на гормонах - история презентации PHP Расмусом Лердорфом на конференции MySQL в Санта-Кларе, Калифорния». Сеть разговоров . Проверено 11 декабря 2009 г.
  6. ^ «PowerShell и WPF: WTF» . Блог Windows PowerShell . Майкрософт. Архивировано из оригинала 25 декабря 2008 года . Проверено 3 апреля 2019 г.
  7. ^ «Скрипты TH1». Ископаемое.
  8. Кенни, Кевин (4 июля 2005 г.). «Re: Сертификация TCL». Группа новостей : comp.lang.tcl.
  9. ^ «Язык». Разработчик Tcl Xchange . Проверено 2 ноября 2016 г.
  10. ^ Основы Tcl , Глава 1 практического программирования на Tcl и Tk , ISBN 0-13-038560-3 
  11. ^ ab Из внутренней части Tcl и Tk Toolkit , ISBN 0-201-63337-X 
  12. ^ «Использование Tcl/Tk». Tcl-разработчик Xchange . Проверено 2 ноября 2016 г.
  13. ^ «Сценарии Cisco IOS с руководством по настройке TCL». Поддержка Cisco . Проверено 2 ноября 2016 г.
  14. ^ Джон Оустерхаут. «История ТКЛ». Персональные страницы . Стэндфордский Университет . Проверено 9 августа 2011 г.
  15. ^ «История Tcl». Разработчик Tcl Xchange . Проверено 2 ноября 2016 г.
  16. ^ "ЭДА". wiki.tcl-lang.org . Проверено 27 апреля 2022 г.
  17. ^ "Джон К. Оустерхаут - обладатель награды" . Награды АКМ . Проверено 4 ноября 2016 г.
  18. ^ Из Wiki Tcler's Tcl против TCL
  19. ^ «Объявление о выпуске Tcl/Tk 8.0» . Разработчик Tcl Xchange . Проверено 1 июля 2014 г.
  20. ^ «Объявление о выпуске Tcl/Tk 8.1» . Разработчик Tcl Xchange . Проверено 1 июля 2014 г.
  21. ^ ab «Новые функции регулярных выражений в Tcl 8.1». Разработчик Tcl Xchange . Проверено 2 ноября 2016 г.
  22. ^ «Объявление о выпуске Tcl/Tk 8.2» . Разработчик Tcl Xchange . 18 августа 1999 г. Проверено 1 июля 2014 г.
  23. ^ «Объявление о выпуске Tcl/Tk 8.4» . Разработчик Tcl Xchange . 01.06.2013 . Проверено 1 июля 2014 г.
  24. ^ «СОВЕТ № 237: Целые числа произвольной точности для Tcl» . Разработчик Tcl Xchange . Проверено 1 ноября 2016 г.
  25. ^ «СОВЕТ № 194: СОВЕТ № 194: Процедуры как значения через apply» . Разработчик Tcl Xchange . Проверено 1 ноября 2016 г.
  26. ^ «Объявление о выпуске Tcl/Tk 8.5» . Разработчик Tcl Xchange . 18 сентября 2013 г. Проверено 1 июля 2014 г.
  27. ^ ab «Объявление о выпуске Tcl/Tk 8.6» . Разработчик Tcl Xchange . 20 сентября 2013 г. Проверено 1 июля 2014 г.
  28. ^ "Конференции Tcl/Tk" . Разработчик Tcl Xchange . Проверено 1 ноября 2016 г.
  29. ^ abc «СОВЕТ № 257: Объектная ориентация для Tcl». Разработчик Tcl Xchange . Проверено 1 ноября 2016 г.
  30. ^ «Загрузить исходники Tcl/Tk» . Разработчик Tcl Xchange . Проверено 1 ноября 2016 г.
  31. ^ «Безопасный Tcl». Разработчик Tcl Xchange . Проверено 1 ноября 2016 г.
  32. ^ Браун, Лори (18–20 сентября 1996 г.). «Безопасность мобильного кода». В Боссомайере, Терри; Чабб, Люси (ред.). Материалы 2-й совместной конференции AUUG '96 и Азиатско-Тихоокеанской WWW '96 . Мельбурн, Австралия. п. 50 . Проверено 22 марта 2011 г.
  33. ^ Уэлч, Брент Б.; Джонс, Кен; Хоббс, Джеффри (2003). Практическое программирование на Tcl и Tk . Том. 1 (4-е изд.). Прентис Холл PTR. п. 291. ИСБН 0-13-038560-3.
  34. ^ «Страница руководства Tcl - Встроенные команды Tcl» . Tcl-разработчик Xchange . Проверено 14 июня 2014 г.
  35. ^ "Додекалог". Вики Тклера . Проверено 14 июня 2014 г.(Также содержит более короткую «Восьмилоговую» версию правил.)
  36. ^ «Страница руководства повышенного уровня - Встроенные команды» . Tcl-разработчик Xchange . Проверено 14 июня 2016 г.
  37. ^ «Страница руководства upvar - Встроенные команды» . Tcl-разработчик Xchange . Проверено 14 июня 2016 г.
  38. ^ "API Tcl C" . tcl.tk. _ Проверено 2 ноября 2016 г.
  39. ^ «Плитка: улучшенный движок тем для Tk» . СоурсФордж . Проверено 7 августа 2016 г.
  40. ^ "Лицензия Тикс" . СоурсФордж . Проверено 7 августа 2012 г.
  41. Ссылки _ Tcl'ers Wiki . Проверено 7 августа 2012 г.
  42. Ссылки _ Tcl'ers Wiki . Проверено 7 августа 2012 г.

дальнейшее чтение

Внешние ссылки