Тсл

Язык программирования высокого уровня
Тсл
Логотип Tcl
ПарадигмаМультипарадигмальный : событийно-ориентированный , функциональный , императивный , объектно-ориентированный
РазработаноДжон Оустерхаут
РазработчикОсновная команда Tcl [1]
Впервые появился1988 ; 36 лет назад ( 1988 )
Стабильный релиз
9.0.0 [2]  / 26 сентября 2024 г. ; 36 дней назад ( 26 сентября 2024 )
Дисциплина набора текстаДинамическая типизация , все является строкой
ЛицензияBSD -стиль [3]
Расширения имени файла.tcl, .tbc [4]
Веб-сайтwww.tcl-lang.org
www.tcl.tk
Основные внедрения
ActiveTcl Андройш
Диалекты
Джим, Игл
Под влиянием
AWK , Лисп
Под влиянием
PHP , [5] PowerShell , [6] Чай , TH1 [7]

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

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

Популярное сочетание Tcl с расширением Tk называется Tcl/Tk (произносится как «тикл тик» или как аббревиатура ) и позволяет создавать графический пользовательский интерфейс (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 Language , но традиционно пишется Tcl, а не TCL . [18]

ДатаСобытие
Январь 1990 г.Tcl анонсирован за пределами Беркли (зимний USENIX ).
Июнь 1990 г.Ожидается анонс (летний USENIX).
Январь 1991 г.Первое объявление о Tk (Winter USENIX).
Июнь 1993 г.Первая конференция Tcl/Tk (Беркли). На ней анонсированы менеджер геометрии [table] (предшественник [grid]), [incr Tcl] , TclDP и Groupkit.
Август 1997 г.В Tcl 8.0 появился компилятор байт-кода. [19]
Апрель 1999 г.Tcl 8.1 представляет полную поддержку Unicode [20] и расширенные регулярные выражения . [21]
Август 1999 г.Tcl 8.2 представляет архитектуру расширения Tcl (TEA) [22]
Август 2000 г.Сформирована основная команда Tcl, что позволило перевести Tcl на модель разработки, более ориентированную на сообщество. [1]
Сентябрь 2002 г.Девятая конференция Tcl/Tk (Ванкувер). Анонс системы упаковки starkit. Выпущен Tcl 8.4.0. [23]
Декабрь 2007 г.В Tcl 8.5 добавлены новые типы данных, новый репозиторий расширений, bignums , [24] лямбда-выражения . [25] [26]
Декабрь 2012 г.В Tcl 8.6 добавлена ​​встроенная динамическая объектная система, TclOO и оценка без стека. [27]
Сентябрь 2024 г.В Tcl 9.0 добавлены 64-битные возможности, поддержка всего диапазона кодовых точек Unicode, используются epoll и kqueue [28]

Конференции и семинары Tcl проводятся как в Соединенных Штатах, так и в Европе. [29] Несколько корпораций, включая FlightAware [30], используют Tcl как часть своих продуктов.

Функции

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

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

  • Все операции являются командами , включая языковые структуры. Они записываются в префиксной нотации .
  • Команды обычно принимают переменное число аргументов (являются вариативными ).
  • Все может быть динамически переопределено и переопределено. На самом деле, ключевых слов нет, поэтому даже структуры управления могут быть добавлены или изменены, хотя это не рекомендуется.
  • Все типы данных могут быть обработаны как строки , включая исходный код . Внутренне переменные имеют такие типы, как integer и double, но преобразование происходит чисто автоматически.
  • Переменные не объявляются, а присваиваются. Использование неопределенной переменной приводит к ошибке.
  • Полностью динамическая, основанная на классах объектная система TclOO, включающая расширенные функции, такие как метаклассы, фильтры и миксины . [31]
  • Интерфейс, управляемый событиями , для сокетов и файлов . Также возможны события, основанные на времени и определяемые пользователем.
  • Видимость переменных по умолчанию ограничена лексической (статической) областью действияuplevel , но позволяет upvarпроцедурам взаимодействовать с областями действия включающих функций.
  • Все команды, определенные самим Tcl, генерируют сообщения об ошибках при неправильном использовании.
  • Расширяемость посредством C , C++ , Java , Python и Tcl.
  • Интерпретируемый язык с использованием байт-кода
  • Полная поддержка Unicode (вначале 3.1, регулярно обновляется), впервые выпущен в 1999 году.
  • Регулярные выражения [21]
  • Кроссплатформенность : Windows API ; Unix , Linux , Macintosh и т. д.
  • Тесная кроссплатформенная интеграция с оконным ( GUI ) интерфейсом Tk .
  • Существует несколько механизмов распределения:
    • Полная версия для разработки (для Windows, например, ActiveState Tcl, см. [1])
    • Tclkits (исполняемый файл, содержащий полную среду выполнения скрипта, размером всего около 4 мегабайт), Starkits (механизм упаковки для доставки приложения в автономном, не требующем установки и высокопортируемом виде) и Starpacks (объединение Starkit с Tclkit для создания Starpack — исполняемого файла для одной платформы, идеально подходящего для простого развертывания)
    • Jim Interpreter, компактная реализация Tcl
    • Свободно распространяемый исходный код по лицензии BSD . [32]

Безопасный-Tcl

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

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

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

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

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

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

ставит "Привет, мир!" 

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

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

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

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

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

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

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

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

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

  • Подстановка команды заменяет содержимое сбалансированных квадратных скобок на результат оценки скрипта, содержащегося внутри. Например, [expr 1+2+3]заменяется на результат оценки содержащегося выражения (в данном случае 6).
  • Подстановка переменных заменяет имя переменной с префиксом в виде знака доллара содержимым (или значением) переменной. Например, $fooзаменяется содержимым переменной с именем "foo". Имя переменной может быть заключено в фигурные скобки, чтобы отделить его от последующего текста в случаях, когда это может быть неоднозначно (например, ${foo}ing).
  • Замена обратной косой черты заменяет обратную косую черту, за которой следует буква, на другой символ. Например, \nзаменяется на новую строку.

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

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

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

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

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

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

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

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

  • setзаписывает новое значение в переменную (создает переменную, если она не существует). Если используется только с одним аргументом, возвращает значение указанной переменной (в этом случае она должна существовать).
  • procопределяет новую команду, выполнение которой приводит к выполнению заданного скрипта Tcl, записанного в виде набора команд. returnможет использоваться для немедленного возврата управления вызывающей стороне.

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

  • ifвыполняет заданное тело скрипта (второй аргумент), если условие (первый аргумент) выполнено. За ним могут следовать дополнительные аргументы, начиная с elseifальтернативного условия и тела, или elseс дополнительного блока.
  • whileповторяет выполнение указанного тела скрипта до тех пор, пока условие (первый аргумент) остается выполненным
  • foreachвыполняет заданное тело, где управляющей переменной присваиваются элементы списка один за другим.
  • forсокращение для инициализации управляющей переменной, условия (как в while) и дополнительного оператора «следующая итерация» (команда, выполняемая после выполнения тела)

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

  • breakпрерывает выполнение тела и возвращается из команды цикла
  • continueпрерывает выполнение тела, но управление все равно возвращается к команде цикла. Для whileэто означает повторный цикл, для forи foreach, подхватывает следующую итерацию.
  • returnпрерывает выполнение текущего тела независимо от глубины процедуры, пока не будет достигнута граница процедуры, и возвращает указанное значение вызывающему.

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

  • exprпередает аргумент в отдельный интерпретатор выражений и возвращает оцененное значение. Обратите внимание, что тот же интерпретатор используется также для "условных" выражений for ifи циклических команд.
  • listсоздает список, содержащий все аргументы, или пустую строку, если аргумент не указан. lindexКоманда может быть использована для результата, чтобы повторно извлечь исходные аргументы.
  • arrayманипулирует переменными массива .
  • dictманипулирует словарем (начиная с версии 8.5), представляющим собой списки с четным числом элементов, где каждые два элемента интерпретируются как пара ключ/значение.
  • regexpсопоставляет регулярное выражение со строкой.
  • regsubВыполняет замены на основе сопоставления шаблонов регулярных выражений.
  • uplevel— это команда , которая позволяет выполнить командный скрипт в области, отличной от текущей самой внутренней области в стеке.
  • upvarсоздает ссылку на переменную в другом стековом фрейме.
  • namespaceпозволяет создавать, получать доступ и уничтожать отдельные контексты для команд и переменных.
  • applyприменяет анонимную функцию (начиная с версии 8.5).
  • coroutine, yield, а также yieldtoсоздавать и выдавать значения из сопрограмм (начиная с версии 8.6).
  • tryпозволяет перехватывать и обрабатывать ошибки и исключения.
  • catchпозволяет вам получать исключительную прибыль.
  • zlibобеспечивает доступ к возможностям сжатия и контрольного суммирования библиотеки Zlib (начиная с версии 8.6).

Uplevel

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

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

proc  для { initCmd testExpr advanceCmd bodyScript } { uplevel 1 $initCmd set testCmd [ list expr $testExpr ] while {[uplevel 1 $testCmd ]} { uplevel 1 $bodyScript uplevel 1 $advanceCmd } }                         

Упвар

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

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

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

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

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

  • Система объектов на основе классов. Это то, чего большинство программистов ожидают от ОО.
  • Позволяет настраивать каждый объект отдельно и динамически переопределять классы.
  • Мета-классы
  • Фильтры
  • Миксины
  • Система для реализации методов индивидуальными способами, позволяющая авторам пакетов, желающим реализовать методы совершенно другими способами, сделать это довольно просто.
oo :: class  create  fruit { method eat {} { puts "yummy!" } } oo :: class create banana { superclass fruit constructor {} { my variable peeled set peeled 0 } method peel {} { my variable peeled set peeled 1 puts "skin now off" } method edible ? {} { my variable peeled return $peeled } method eat {} { if { ! [ my edible ? ]} { my peel } next } } set b [ banana new ] $b eat  prints "skin now off" and "yummy!" fruit destroy $b eat  error "unknown command"                                                                         

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

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

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

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

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

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

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

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

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

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

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

Тк
Самым популярным расширением Tcl является набор инструментов Tk , который предоставляет библиотеку графического пользовательского интерфейса для различных операционных систем . Каждый GUI состоит из одного или нескольких фреймов . Каждый фрейм имеет менеджер компоновки.
Ожидать
Одним из других очень популярных расширений Tcl является расширение Expect . Ранняя тесная связь Expect с Tcl во многом ответственна за популярность Tcl в таких продуктивных областях использования, как тестирование Unix, где Expect использовался (и используется до сих пор) очень успешно для автоматизации сеансов telnet, ssh и последовательных сессий для выполнения множества повторяющихся задач (например, написание сценариев ранее интерактивных приложений). Tcl был единственным способом запустить Expect, поэтому Tcl стал очень популярным в этих областях промышленности.
Плитка/ТТК
Tile/Ttk [41] — это коллекция стилей и виджетов тем, которая может заменить большинство виджетов в Tk вариантами, которые действительно являются родными для платформы, посредством вызовов API операционной системы . Темы, охватываемые таким образом, — это Windows XP , Windows Classic, Qt (который подключается к библиотекам среды X11 KDE ) и 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. [42]
Itcl/IncrTcl
Itcl — это объектная система для Tcl, которая обычно называется [incr Tcl] (это способ увеличения в Tcl, по сути, аналогичный названию C++).
Tcllib
Tcllib — это набор скриптовых пакетов для Tcl, которые можно использовать без каких-либо этапов компиляции.
Тклиб
Tklib — это набор служебных модулей для Tk и дополнение к Tcllib.
тДОМ
tDOM — это расширение Tcl для анализа XML, основанное на парсере Expat.
TclTLS
TclTLS — это расширение OpenSSL для Tcl.
TclUDP
Расширение TclUDP [43] предоставляет простую библиотеку для поддержки сокетов протокола пользовательских дейтаграмм (UDP) в Tcl.
ТВАПИ
TWAPI (Tcl Windows API) — это расширение Tcl, обеспечивающее привязки к Windows API.
Базы данных
Tcl Database Connectivity (TDBC), часть Tcl 8.6, является общим интерфейсом доступа к базам данных для скриптов Tcl. В настоящее время он поддерживает драйверы для доступа к базам данных MySQL , ODBC , PostgreSQL и SQLite . В будущем планируется больше. Доступ к базам данных также поддерживается через расширения, специфичные для баз данных, которых доступно много. [44]

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

Ссылки

  1. ^ ab "Tcl/Tk Core Development". Tcl Developer Xchange . Получено 2016-11-01 .
  2. ^ "[TCLCORE] Tcl 9.0.0 ВЫПУЩЕН". 26 сентября 2024 г. Получено 26 сентября 2024 г.
  3. ^ "Условия лицензии Tcl/Tk". Tcl Developer Xchange . Получено 2016-11-02 .
  4. ^ "Tcl Dev Kit – Compiler". ActiveState Docs . Получено 2016-11-02 .
  5. ^ Лердорф, Расмус (2007-04-26). "PHP на гормонах – история PHP, презентация Расмуса Лердорфа, представленная на конференции MySQL в Санта-Кларе, Калифорния". The Conversations Network . Получено 11 декабря 2009 г.
  6. ^ "PowerShell и WPF: WTF". Блог Windows PowerShell . Microsoft. Архивировано из оригинала 25 декабря 2008 г. Получено 3 апреля 2019 г.
  7. ^ "Скрипты TH1". Ископаемые.
  8. ^ Кенни, Кевин (4 июля 2005 г.). "Re: Сертификация TCL". Группа новостей : comp.lang.tcl.
  9. ^ "Язык". Tcl Developer Xchange . Получено 2016-11-02 .
  10. ^ Основы Tcl , Глава 1 в Практическом программировании на Tcl и Tk , ISBN 0-13-038560-3 
  11. ^ ab С внутренней стороны Tcl и Tk Toolkit , ISBN 0-201-63337-X 
  12. ^ "Использование Tcl/Tk". Tcl Developer Xchange . Получено 2016-11-02 .
  13. ^ "Руководство по настройке сценариев Cisco IOS с TCL". Поддержка Cisco . Получено 2016-11-02 .
  14. ^ Джон Оустерхаут. "История Tcl". Персональные страницы . Стэнфордский университет . Получено 2011-08-09 .
  15. ^ "История Tcl". Tcl Developer Xchange . Получено 2016-11-02 .
  16. ^ "EDA". wiki.tcl-lang.org . Получено 2022-04-27 .
  17. ^ "Джон К. Оустерхаут – Лауреат премии". ACM Awards . Получено 2016-11-04 .
  18. ^ Из Википедии Tcler Tcl против TCL
  19. ^ "Объявление о выпуске Tcl/Tk 8.0". Tcl Developer Xchange . Получено 2014-07-01 .
  20. ^ "Объявление о выпуске Tcl/Tk 8.1". Tcl Developer Xchange . Получено 2014-07-01 .
  21. ^ ab "Новые возможности регулярных выражений в Tcl 8.1". Tcl Developer Xchange . Получено 2016-11-02 .
  22. ^ "Объявление о выпуске Tcl/Tk 8.2". Tcl Developer Xchange . 1999-08-18 . Получено 2014-07-01 .
  23. ^ "Объявление о выпуске Tcl/Tk 8.4". Tcl Developer Xchange . 2013-06-01 . Получено 2014-07-01 .
  24. ^ "СОВЕТ № 237: Целые числа произвольной точности для Tcl". Tcl Developer Xchange . Получено 01.11.2016 .
  25. ^ "СОВЕТ № 194: СОВЕТ № 194: Процедуры как значения через apply". Tcl Developer Xchange . Получено 01.11.2016 .
  26. ^ "Объявление о выпуске Tcl/Tk 8.5". Tcl Developer Xchange . 2013-09-18 . Получено 2014-07-01 .
  27. ^ ab "Объявление о выпуске Tcl/Tk 8.6". Tcl Developer Xchange . 2013-09-20 . Получено 2014-07-01 .
  28. ^ "Объявление о выпуске Tcl/Tk 9.0". Tcl Developer Xchange . 2024-09-26 . Получено 2024-09-26 .
  29. ^ "Конференции Tcl/Tk". Tcl Developer Xchange . Получено 2016-11-01 .
  30. ^ "FlightAware". GitHub . Получено 2024-10-02 .
  31. ^ abc "TIP #257: Object Orientation for Tcl". Tcl Developer Xchange . Получено 2016-11-01 .
  32. ^ "Загрузить исходники Tcl/Tk". Tcl Developer Xchange . Получено 2016-11-01 .
  33. ^ "Safe Tcl". Tcl Developer Xchange . Получено 2016-11-01 .
  34. ^ Браун, Лоури (18–20 сентября 1996 г.). «Безопасность мобильного кода». В Боссомайер, Терри; Чабб, Люси (ред.). Труды, 2-я совместная конференция, AUUG '96 и Азиатско-Тихоокеанский WWW '96 . Мельбурн, Австралия. стр. 50. Получено 22.03.2011 .
  35. ^ Уэлч, Брент Б.; Джонс, Кен; Хоббс, Джеффри (2003). Практическое программирование на Tcl и Tk . Том 1 (4-е изд.). Prentice Hall PTR. стр. 291. ISBN 0-13-038560-3.
  36. ^ "Страница руководства Tcl – Встроенные команды Tcl". Tcl Developer Xchange . Получено 14.06.2014 .
  37. ^ "Додекалог". Вики Тклера . Проверено 14 июня 2014 г.(Также содержит более короткую версию правил «Окталог».)
  38. ^ "страница руководства uplevel – Встроенные команды". Tcl Developer Xchange . Получено 2016-06-14 .
  39. ^ "страница руководства upvar – Встроенные команды". Tcl Developer Xchange . Получено 2016-06-14 .
  40. ^ "Tcl C API". tcl.tk . Получено 2016-11-02 .
  41. ^ "Tile: улучшенный движок тем для Tk". SourceForge . Получено 7 августа 2016 г. .
  42. ^ "Tix License". SourceForge . Получено 7 августа 2012 г.
  43. ^ "TclUDP". Tcl'ers Wiki . Получено 7 августа 2012 г.
  44. ^ "TDBC". Tcl'ers Wiki . Получено 7 августа 2012 г.

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

  • Оустерхаут, Джон К.; Джонс, Кен (2009). Tcl и Tk Toolkit (2-е изд.). Эддисон Уэсли. ISBN 978-0-321-33633-0. Получено 4 ноября 2012 г.
  • Фостер-Джонсон, Эрик (1997). Графические приложения с Tcl и Tk (2-е изд.). Нью-Йорк, Нью-Йорк: M&T Books. ISBN 1-55851-569-0. Получено 4 ноября 2012 г.
  • Брент Б. Уэлч, Практическое программирование на Tcl и Tk , Prentice Hall , Аппер Сэдл Ривер, Нью-Джерси, США, ISBN 0-13-038560-3 , 2003 
  • Дж. Адриан Циммер, Tcl/Tk для программистов , IEEE Computer Society , распространяется John Wiley and Sons, ISBN 0-8186-8515-8 , 1998 
  • Марк Харрисон и Майкл Макленнан, Эффективное программирование Tcl/Tk , Эддисон-Уэсли , Рединг, Массачусетс, США, ISBN 0-201-63474-0 , 1998 
  • Берт Уилер, Tcl/Tk 8.5 Programming Cookbook , Packt Publishing , Бирмингем, Англия, Великобритания, ISBN 1849512981 , 2011 
  • Войцех Кочян, Петр Бельтовски Сетевое программирование Tcl 8.5 , Packt Publishing , ISBN 1849510962 , 2010 г. 
  • Клиф Флинт Tcl/Tk, Третье издание: Руководство разработчика , ISBN 0123847176 , 2012 
  • Ашок П. Надкарни Язык программирования Tcl , ISBN 154867964X , 2017 
  • Официальный сайт
  • Исходники Tcl, основной сайт загрузки исходного кода Tcl и Tk
  • Вики Tcler
  • TkDocs
Взято с "https://en.wikipedia.org/w/index.php?title=Tcl&oldid=1249031339"