Из Википедии, свободной энциклопедии
  (Перенаправлено с Tcl (язык программирования) )
Перейти к навигации Перейти к поиску

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

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

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

История [ править ]

Язык программирования Tcl был создан весной 1988 года Джоном Остерхаутом, когда он работал в Калифорнийском университете в Беркли . [12] [13] Первоначально «рожденный из разочарования» [9], по словам автора, когда программисты разрабатывали свои собственные языки, предназначенные для встраивания в приложения, Tcl получил признание сам по себе. В 1997 году компания Ousterhout была удостоена награды ACM Software System Award за Tcl / Tk. [14]

Название первоначально происходит от T оол C ommand L anguage, но обычно пишется «Tcl» , а не «TCL». [15]

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

Особенности [ править ]

Файл Tcl редактируется в Eclipse IDE.

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

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

Safe-Tcl [ править ]

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

Синтаксис и основная семантика [ править ]

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

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

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

В следующем примере используется команда Put для отображения строки текста на консоли хоста:

ставит  "Hello, World!"

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

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

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

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

# с фигурными скобками замена переменных выполняется выражением set x 1 set sum [expr  { $ x  +  2  +  3  +  4  +  5 }];  # $ x не подставляется перед передачей параметра выражению;  # expr заменяет 1 на $ x, а при вычислении выражения ставит  "Сумма чисел 1..5 равна $ sum." ;  # сумма 15
# без фигурных скобок подстановка переменных происходит на сайте определения (лексическая область видимости) set x 2 set op * set y 3 set res [expr  $ x $ op $ y ];  # $ Х, $ оп, и $ Y является замещенным, и выражение вычисляется ставит  «2 * 3 составляет $ разреша.» ;  # 6 заменяется на $ 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передает аргумент в отдельный интерпретатор выражения и возвращает вычисленное значение. Обратите внимание, что тот же интерпретатор используется также для «условного» выражения для ifкоманд цикла.
  • listсоздает список, содержащий все аргументы, или пустую строку, если аргумент не указан. Команда lindexможет использоваться в результате для повторного извлечения исходных аргументов.
  • arrayманипулирует переменными массива .
  • dictуправляет словарем (начиная с версии 8.5), которые представляют собой списки с четным числом элементов, в которых каждые два элемента интерпретируются как пара ключ / значение.
  • regexp сопоставляет регулярное выражение со строкой.
  • regsub Выполняет подстановки на основе сопоставления с образцом регулярного выражения.
  • uplevel- это команда, которая позволяет выполнять командный сценарий в области, отличной от текущей внутренней области в стеке.
  • upvar создает ссылку на переменную в другом фрейме стека.
  • namespace позволяет создавать, получать доступ и уничтожать отдельные контексты для команд и переменных.
  • apply применяет анонимную функцию (начиная с 8.6).
  • coroutine, yieldИ yieldtoсоздавать и производить значения из сопрограмм (с 8,6).
  • try позволяет отлавливать и обрабатывать ошибки и исключения.
  • catch позволяет получить исключительную прибыль.
  • zlib обеспечивает доступ к средствам сжатия и контрольного суммирования библиотеки Zlib (начиная с версии 8.6).

Uplevel [ править ]

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

Первоначально он был реализован, чтобы позволить процедурам 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упорядочивает одну или несколько локальных переменных в текущей процедуре для ссылки на переменные во включающем вызове процедуры или на глобальные переменные . Команда upvar упрощает реализацию вызова процедуры по имени, а также упрощает создание новых управляющих конструкций в виде процедур Tcl. [34]

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

proc decr { varName  { декремент  1 }}  {  upvar  1  $ varName var incr var [expr  { - $ декремент }] }

Объектно-ориентированный [ править ]

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

  • Классовая объектная система. Это то, что большинство программистов ожидают от объектно-ориентированного проектирования.
  • Позволяет индивидуальную настройку для каждого объекта и динамическое переопределение классов.
  • Мета-классы
  • Фильтры
  • Миксины
  • Система для реализации методов настраиваемыми способами, так что авторы пакетов, которым нужны существенно разные способы реализации метода, могут сделать это довольно просто.
oo :: class create fruit {  method eat {}  {  добавляет  "вкуснятина!"  } } Оо :: класс создать банан {  суперкласса фруктового конструктор  {}  {  мой переменный очищенный набор очищенные 0  }  метод кожуры {}  {  мой переменный очищенный набор очищенного 1  путы  «кожу теперь прочь»  }  метод съедобного ?  {}  {  мойпеременная peeled return  $ peeled  }  метод eat {}  {  if  { ! [ мой съедобный ? ]}  {  my peel }  next  } } set b [ новый банан ] $ b  eat   выводит "скин теперь снял" и "вкусно!" фрукт уничтожить $ b  есть   ошибка "неизвестная команда"

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

  • incr Tcl
  • XOTcl
  • Itk
  • Snit
  • Стоп

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

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

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

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

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

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

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

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

Пакеты расширений [ править ]

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

Тк
Самым популярным расширением Tcl является набор инструментов Tk , который предоставляет библиотеку графического пользовательского интерфейса для различных операционных систем . Каждый графический интерфейс состоит из одного или нескольких кадров . У каждого кадра есть менеджер по расположению.
Ожидать
Одно из других очень популярных расширений Tcl - Expect extension. Ранние тесные отношения Expect с Tcl в значительной степени ответственны за популярность Tcl в разнообразных областях использования, таких как тестирование Unix, где Expect был (и все еще используется) очень успешно для автоматизации telnet, ssh и последовательных сеансов для выполнения. множество повторяющихся задач (например, написание сценариев для приложений, которые раньше были только интерактивными). Tcl был единственным способом запустить Expect, поэтому Tcl стал очень популярным в этих областях промышленности.
Плитка / ТТК
Плитка / TTK [36] является стилями и тематизации коллекции виджета , который может заменить большинство виджетов в 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
Tix, расширение интерфейса Tk, представляет собой набор компонентов пользовательского интерфейса, расширяющих возможности приложений Tcl / Tk и Python. Это программный пакет с открытым исходным кодом, поддерживаемый добровольцами из Tix Project Group и выпущенный под лицензией BSD. [37]
Itcl / IncrTcl
Itcl - это объектная система для Tcl, обычно называемая [incr Tcl] (это способ увеличения в Tcl, аналогичный по способу имени C ++).
Tcllib
Tcllib - это набор пакетов со сценариями для Tcl, которые можно использовать без этапов компиляции.
Тклиб
Tklib - это набор служебных модулей для Tk и дополнение к Tcllib.
tDOM
tDOM - это расширение Tcl для синтаксического анализа XML, основанное на парсере Expat.
TclTLS
TclTLS - это расширение OpenSSL для Tcl.
TclUDP
Расширение TclUDP [38] предоставляет простую библиотеку для поддержки сокетов протокола дейтаграмм пользователя (UDP) в Tcl.
Базы данных
Tcl Database Connectivity (TDBC), часть Tcl 8.6, представляет собой общий интерфейс доступа к базе данных для сценариев Tcl. В настоящее время он поддерживает драйверы для доступа к базам данных MySQL , ODBC , PostgreSQL и SQLite . В будущем планируется больше. Доступ к базам данных также поддерживается с помощью расширений, специфичных для баз данных, которых доступно множество. [39]

См. Также [ править ]

  • Яйцо
  • Ожидать
  • TclX
  • Tkdesk
  • Сравнение интегрированных сред разработки Tcl
  • Сравнение языков программирования
  • Список языков программирования
  • Модули окружения

Ссылки [ править ]

  1. ^ a b «Разработка ядра Tcl / Tk» . Разработчик Tcl Xchange . Проверено 1 ноября 2016 .
  2. ^ «Условия лицензии Tcl / Tk» . Разработчик Tcl Xchange . Проверено 2 ноября 2016 .
  3. ^ "Tcl Dev Kit - Компилятор" . ActiveState Docs . Проверено 2 ноября 2016 .
  4. ^ Lerdorf, Расмус (2007-04-26). «PHP на гормонах - история презентации PHP Расмуса Лердорфа на конференции MySQL в Санта-Кларе, Калифорния» . Сеть разговоров . Проверено 11 декабря 2009 .
  5. ^ «PowerShell и WPF: WTF» . Блог Windows PowerShell . Microsoft. Архивировано из оригинала 25 декабря 2008 года . Проверено 3 апреля 2019 года .
  6. Кенни, Кевин (4 июля 2005 г.). «Re: Сертификация TCL» . Группа новостейcomp.lang.tcl .
  7. ^ «Язык» . Разработчик Tcl Xchange . Проверено 2 ноября 2016 .
  8. ^ Основы Tcl , Глава 1 Практическое программирование на Tcl и Tk , ISBN 0-13-038560-3 
  9. ^ a b Изнутри Tcl и Tk Toolkit , ISBN 0-201-63337-X 
  10. ^ "Использование Tcl / Tk" . Разработчик Tcl Xchange . Проверено 2 ноября 2016 .
  11. ^ «Сценарии Cisco IOS с Руководством по настройке TCL» . Поддержка Cisco . Проверено 2 ноября 2016 .
  12. ^ Джон Остерхаут. «История ТЦЛ» . Персональные страницы . Стэнфордский университет . Проверено 9 августа 2011 .
  13. ^ "История Tcl" . Разработчик Tcl Xchange . Проверено 2 ноября 2016 .
  14. ^ «Джон К. Остерхаут - лауреат премии» . ACM Awards . Проверено 4 ноября 2016 .
  15. ^ Из Tcler Wiki Tcl vs. TCL
  16. ^ "Объявление о выпуске Tcl / Tk 8.0" . Разработчик Tcl Xchange . Проверено 1 июля 2014 .
  17. ^ "Объявление о выпуске Tcl / Tk 8.1" . Разработчик Tcl Xchange . Проверено 1 июля 2014 .
  18. ^ a b «Новые возможности регулярных выражений в Tcl 8.1» . Разработчик Tcl Xchange . Проверено 2 ноября 2016 .
  19. ^ "Объявление о выпуске Tcl / Tk 8.2" . Разработчик Tcl Xchange . 1999-08-18 . Проверено 1 июля 2014 .
  20. ^ "Объявление о выпуске Tcl / Tk 8.4" . Разработчик Tcl Xchange . 2013-06-01 . Проверено 1 июля 2014 .
  21. ^ "СОВЕТ № 237: Целые числа произвольной точности для Tcl" . Разработчик Tcl Xchange . Проверено 1 ноября 2016 .
  22. ^ "СОВЕТ № 194: СОВЕТ № 194: Процедуры как значения через применить" . Разработчик Tcl Xchange . Проверено 1 ноября 2016 .
  23. ^ "Объявление о выпуске Tcl / Tk 8.5" . Разработчик Tcl Xchange . 2013-09-18 . Проверено 1 июля 2014 .
  24. ^ a b "Объявление о выпуске Tcl / Tk 8.6" . Разработчик Tcl Xchange . 2013-09-20 . Проверено 1 июля 2014 .
  25. ^ "Конференции Tcl / Tk" . Разработчик Tcl Xchange . Проверено 1 ноября 2016 .
  26. ^ a b c «СОВЕТ № 257: объектная ориентация для Tcl» . Разработчик Tcl Xchange . Проверено 1 ноября 2016 .
  27. ^ "Загрузить исходники Tcl / Tk" . Разработчик Tcl Xchange . Проверено 1 ноября 2016 .
  28. ^ "Безопасный Tcl" . Разработчик Tcl Xchange . Проверено 1 ноября 2016 .
  29. Браун, Лори (18–20 сентября 1996 г.). «Безопасность мобильного кода» . В Bossomaier, Терри; Чабб, Люси (ред.). Материалы 2-й совместной конференции, AUUG '96 и Asia-Pacific WWW '96 . Мельбурн, Австралия. п. 50 . Проверено 22 марта 2011 .
  30. ^ Уэлч, Брент Б .; Джонс, Кен; Хоббс, Джеффри (2003). Практическое программирование на Tcl и Tk . 1 (4-е изд.). Prentice Hall PTR. п. 291. ISBN. 0-13-038560-3.
  31. ^ "Страница руководства Tcl - Встроенные команды Tcl" . Разработчик Tcl Xchange . Проверено 14 июня 2014 .
  32. ^ "Додекалог" . Tcler's Wiki . Проверено 14 июня 2014 . (Также содержит более короткую версию правил "Octalogue".)
  33. ^ "Страница руководства верхнего уровня - Встроенные команды" . Разработчик Tcl Xchange . Проверено 14 июня 2016 .
  34. ^ "Страница руководства upvar - Встроенные команды" . Разработчик Tcl Xchange . Проверено 14 июня 2016 .
  35. ^ "Tcl C API" . tcl.tk . Проверено 2 ноября 2016 .
  36. ^ "Плитка: улучшенный движок темы для Tk" . SourceForge . Проверено 7 августа 2016 года .
  37. ^ "Лицензия Tix" . SourceForge . Проверено 7 августа 2012 года .
  38. ^ "TclUDP" . Tcl'ers Wiki . Проверено 7 августа 2012 года .
  39. ^ "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 , Upper Saddle River, NJ, США, 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 Sources , основной сайт загрузки исходного кода Tcl и Tk
  • Вики Тклера
  • TkDocs
  • Tcl / Tk корейский учебник