Подробности записи журнала 395039

15:07, 13 января 2011: 103 «Ссылка» 213.80.196.244 (обсуждение) на странице Tcl, меры: Метка (просмотреть)

Изменения, сделанные в правке

* [http://tcl.apache.org/rivet/ Rivet] - модуль Tcl для Apache.
* [http://tcl.apache.org/rivet/ Rivet] - модуль Tcl для Apache.
* [[AMSN]] - программа с открытым исходным кодом для мгновенного обмена сообщениями
* [[AMSN]] - программа с открытым исходным кодом для мгновенного обмена сообщениями
* [[MacPorts]] - система для установки программного обеспечения, распространяемого в исходных кодах, для операционной системы Mac OS X.
* [[http://tclmon.sourceforge.net/ | TclMon]] - система мониторинга сетей


== Книги ==
== Книги ==

Параметры действия

ПеременнаяЗначение
Имя учётной записи (user_name)
'213.80.196.244'
ID страницы (page_id)
11614
Пространство имён страницы (page_namespace)
0
Название страницы (без пространства имён) (page_title)
'Tcl'
Полное название страницы (page_prefixedtitle)
'Tcl'
Действие (action)
'edit'
Описание правки/причина (summary)
'/* Приложения */ '
Была ли правка отмечена как «малое изменение» (больше не используется) (minor_edit)
false
Вики-текст старой страницы до правки (old_wikitext)
'{{Карточка языка программирования | name = Tcl | logo = [[Файл:Tcl.svg|70px|]]| semantics = [[Императивное программирование|императивный]], [[скриптовый язык|скриптовый]] | class = [[интерпретатор]] | year = 1988 | designer = [[Остераут, Джон|Джон Оустерхаут]] | latest_release_version = 8.5.9 / 8 сентября 2010 | latest_test_version = 8.6b1 / 23 декабря 2008 | typing = динамическая | influenced_by = [[Командная оболочка UNIX|Shell]], [[Lisp]] | influenced = [[Python]] }} '''Tcl''' (от {{lang-en|Tool Command Language}} — «командный язык инструментов», читается «тикль» или «ти-си-эль») — [[скриптовый язык]] высокого уровня. Tcl часто применяется совместно с [[графический интерфейс пользователя|графической]] [[библиотека (программирование)|библиотекой]] [[Tk]] (Tool Kit). Связку Tcl/Tk по-русски иногда называют «Так-тикль» (английский вариант --- «тикль-ток»). Области применения языка — [[Прототипирование программного обеспечения#Быстрое прототипирование|быстрое прототипирование]], создание графических интерфейсов для [[консольная программа|консольных программ]] (пакетов программ), [[Скриптовый язык#Встраиваемые|встраивание]] в прикладные программы, [[Тестирование программного обеспечения|тестирование]]. Также Tcl применяется в [[веб-разработка|веб-разработке]]. Tcl, наряду с [[Perl]] и [[Python]], стал одним из трёх классических скриптовых языков общего назначения. Эта троица фигурирует не только в качестве списка свободных дистрибутивов, собираемых в [[ActiveState]], но и, например, как языки, на которых (помимо диалекта [[PL/pgSQL]]) можно писать [[триггер (базы данных)|триггеры]] и [[хранимая процедура|хранимые процедуры]] популярного сервера БД [[PostgreSQL]]. Tcl, как встраиваемый язык, нашел применение и в сфере [[САПР]] ([[САПР|CAD]]|[[CAM]]|[[Computer-aided engineering|CAE]])<ref>[http://wiki.tcl.tk/12092 CAD software history] в [http://wiki.tcl.tk/ TclWiki]</ref><ref>[http://www.sapr.ru/article.aspx?id=7985&iid=322 Современные компьютерные технологии на службе Nike, Inc.] в журнале [http://www.sapr.ru/ САПР и графика], № 10’2000</ref>. Он, к примеру, используется как средство настройки баз данных, в постпроцессоре [[Unigraphics]]. Кроме того, он де-факто является языком автоматизации и интеграции во всех ведущих программных пакетах разработки микросхем ([[ПЛИС]] и [[ASIC]]). == Особенности == В Tcl данными всех типов, включая код программы, можно манипулировать как строками. Это делает его языком с естественной поддержкой [[метапрограммирование|метапрограммирования]]. Эта [[парадигма программирования]] учитывалась в ходе разработки и эволюции языка. Программа на Tcl состоит из [[команда (программирование)|команд]], разделённых символами новой строки или точками с запятой. Каждая команда состоит из набора полей, разделённых пробелами. Первое поле должно быть именем команды, а необязательные остальные поля — передаваемые этой команде аргументы. Команда возвращает значение, иногда пустое. То есть, как и в [[Lisp|Лиспе]], в Tcl используется префиксная нотация. [[ключевое слово|Ключевых слов]] как таковых нет — понятие команды в Tcl аналогично понятию [[Процедура (программирование)|процедуры]] или [[Функция (программирование)|функции]] распространённых языков программирования. Это относится и к управляющим конструкциям языка. В сочетании с элементарным синтаксисом это обеспечивает хорошую расширяемость языка, в том числе и библиотеками, написанными на других языках, таких как [[Си (язык программирования)|C]]/[[C++]] или [[Java]]. В Tcl также качественно реализована [[Событийно-ориентированное программирование|модель управления программой на основе событий]]. События могут генерироваться таймером, при появлении данных в канале, изменении значения переменной, при завершении какой-либо внешней программы, или просто при работе пользователя с интерфейсом Tk. Можно задавать свои события и управлять ими. Как и большинство современных [[Скриптовые языки|скриптовых языков]] Tcl содержит развитые средства работы с регулярными выражениями, работает с [[Ассоциативный массив|ассоциативными массивами]] и другими динамическими структурами данных. В базовом Tcl нет поддержки [[Объектно-ориентированное программирование|ООП]], однако существует множество расширений Tcl объектно-ориентированными механизмами, реализованных в виде подключаемых библиотек на [[Си (язык программирования)|Си]], или самом Tcl. Вот самые распространённые из них<ref>если ни одна из реализаций объектной модели вас не устраивает, либо вы интересуетесь, как это работает, можете ознакомиться со статьёй [http://www.wjduquette.com/tcl/objects.html Creating Object Commands]{{ref-en}} от создателей [[SNIT]]</ref>: {|class="standard" ! расширение||реализовано на||особенности используемой модели |- |[[XOTcl]] |C |мощная объектная система с динамическим определением классов и методов, близкая к [[CLOS]] |- |[[incr Tcl]] |C |[[Объектно-ориентированное программирование|ООП]] в стиле, близком к [[C++]], расширенном введением ''конфигураторов'' |- |[[Snit]] |Tcl |реализация объектной модели на основе [[Делегирование (программирование)|делегирования]], а не [[Наследование (программирование)|наследования]] |- |[[STOOOP]] |Tcl |ООП в стиле, максимально близком к C++, также введён механизм ''переключения классов'' |} Пространства имён поддерживаются на уровне ядра языка. В настоящее время бета-тестирование проходит новый [[Объектно-ориентированное программирование|ООП]]-фреймвок [http://wiki.tcl.tk/18152 TclOO], который планируется включить в будущие версии ядра языка. Это компактная, но мощная объектно-ориентированная система, которую можно использовать как непосредственно, так и как базу для построения расширенных моделей ООП. На Tcl легко программировать в [[Функциональное программирование|функциональном стиле]]: он обеспечивает такие механизмы, как функции высшего порядка и абстракции функций<ref>см. также [http://wiki.tcl.tk/967 Steps towards functional programming]</ref>, хотя Tcl редко используют таким образом. Вот пример того, как можно осуществить [[Композиция функций|композицию двух функций]]: <source lang=tcl>proc o {f g x} {$f [$g $x]}</source> В версии 8.5 в Tcl также введена команда ''apply'', значительно облегчающая программирование в этом стиле. Вот пример её использования из официальной документации: <source lang=tcl>proc map {lambda list} { set result {} foreach item $list { lappend result [apply $lambda $item] } return $result } map {x {return [string length $x]:$x}} {a bb ccc dddd} </source> результатом работы этого примера будет <pre>1:a 2:bb 3:ccc 4:dddd</pre> == История == Язык разработан [[Оустерхаут, Джон|Джоном Оустерхаутом]] (John Ousterhout) в то время, когда он работал в университете Калифорнии в Беркли. Первоначальной целью было создание универсального языка для встраивания в [[консольная программа|консольные приложения]]. Вслед за этим Оустерхаут расширил свой язык средствами создания [[Графический интерфейс пользователя|графических интерфейсов]] — так появился Tcl/Tk.<ref>[См. http://www.tcl.tk/about/history.html History of Tcl]</ref> За 4 года развития в университетских стенах Тикль-сообщество выросло до нескольких сотен тысяч программистов. В 1993 году было разработано первое объектно-ориентированное расширение — [[incr Tcl]]. В 1994 г. Оустерхаут становится ведущим инженером проекта SunScript. В течение следующих 4 лет, став одним из проектов корпорации [[Sun Microsystems|Sun]], Тикль не только остался [[Свободное программное обеспечение|свободно распространяемой]] системой, но и значительно усовершенствовался, стал [[Кроссплатформенное программное обеспечение|кросс-платформенным]]. Заметный удар по популярности языка нанёс [[Ричард Столлман]], опубликовав в сентябре 1994 г. в ряде новостных групп рекомендацию «Почему вы не должны использовать Tcl» <ref>[http://www.vanderburg.org/OldPages/Tcl/war/ Why you should not use Tcl]</ref>. В ней он на основании утверждений, что ''«Tcl разработан не как серьёзный язык программирования»'' и ''«Tcl имеет особый синтаксис, притягательный для [[хакер]]ов из-за своей простоты. Но синтаксис Tcl кажется странным для большинства пользователей.»'', а также в связи с продвижением [[Emacs Lisp]] вынес вердикт: ''«проект [[GNU]] не собирается использовать Tcl в программном обеспечении GNU»''. Помимо субъективных претензий к дизайну языка, Столлман указал на объективный на тот момент недостаток — низкое быстродействие. Тем не менее, рост количества разработчиков, активно использующих тикль, составил за этот период 600 %. В 1998 г. в связи с [[Java]]-бумом и связанной с ним острой конкурентной борьбой корпорация уже не могла уделять тиклю прежнего внимания. Джон Остераут покидает Sun и создаёт (при поддержке Sun) компанию Scriptics, продолжая развитие технологии Tcl/Tk<ref>[http://www.osp.ru/cw/1998/07/27311/ Камерон Лэрд, Кэтрин Сорэз, SunWorld, США. Создатель Tcl уходит из Sun в новое предприятие], Computerworld № 07/1998</ref><ref>[http://www.osp.ru/cw/1998/36/31691/ Роберт Макмиллан, SunWorld. Tcl: путь к новой жизни], Computerworld № 36/1998</ref>. Это была одна из первых коммерческих программных фирм, чья деятельность строилась вокруг бесплатного [[Свободное программное обеспечение|свободного ПО]]. [[Файл:Tcl logo.gif|frame|Цветовое решение логотипа, принятое в 90-х гг. XX века]] В марте 1998 года Оустерхаут пишет ставшую классической статью «Сценарии: высокоуровневое программирование для XXI века»<ref>[http://home.pacbell.net/ouster/scripting.html John K. Ousterhout Scripting: Higher Level Programming for the 21st Century]{{ref-en}}.<br /> [http://www.osp.ru/os/1998/03/179470/ Перевод этой статьи]{{ref-ru}} в журнале «Открытые системы», № 3, 1998</ref>, в которой назвал скриптовые языки языками системной интеграции, потому что они ориентированы прежде всего на работу с объектами операционной среды, а не с элементарными данными. Это позволяет без написания тысяч [[количество строк кода|строк кода]] двумя-тремя командами «склеивать» такие объекты в одно целое. В том же году он выиграл за разработку языка Tcl две крупных награды. Первая — это [[ACM]] Software System Award, вручаемая за «наиболее значимое программное обеспечение». Этой наградой до этого были отмечены такие основополагающие системы, как стек протоколов [[TCP/IP]], первая [[электронная таблица]], первая [[реляционная база данных]], [[World Wide Web]], [[Unix]], [[PostScript]] и [[Smalltalk]]. Вторая — это ежегодная USENIX Software Tools User Group (STUG) Award, в знак признания выдающегося программного обеспечения. В 1999 году выходит Tcl 8.0 — в этой реализация впервые появилась компиляция в [[байткод]], что позволило в 6 раз поднять быстродействие<ref name="bench">см. [http://wiki.tcl.tk/1611 Tcl Benchmarks]</ref>. В следующую модификация Tcl 8.1 введена полноценная поддержка [[юникод]]а, в ней впервые реализована [[многопоточность]]. В связи c этим релизом Остераут заявил: {{цитата|«В целом 8.1 переводит Tcl в новую категорию, поскольку теперь его можно использовать для серверных приложений. Си, Си++ и Java можно по-прежнему использовать для создания частей приложений, критических с точки зрения производительности, а Tcl — для интеграции и создания интерфейсных компонентов».'' <ref>[http://www.osp.ru/cw/1999/21/35698/ Tcl: корпоративный вариант] — Computerworld № 21/1999</ref>}} В 2000 году фирма Scriptics была переименована в Ajuba Solutions, а затем куплена фирмой Interwoven, не заинтересованной в работе со [[Свободное программное обеспечение|свободным ПО]]. В связи с этим разработка Tcl была передана сообществу программистов. Так была сформирована [http://www.tcl.tk/community/coreteam/ Tcl Core Team]. На 9-ой конференции по Tcl/Tk, проходившей в [[Ванкувер]]е, была представлена виртуальная файловая система [[MetaKit#StarKit|StarKit]], обеспечившая новый, удобный для обычного пользователя способ распространения Tcl программ. == Синтаксис Tcl == ; Скрипт : команды, разделённые переводом строки или точкой с запятой (;). ; Команда : слова, разделённые пробелами. <source lang=tcl> commandName argument1 argument2 … argumentN</source> Первое слово — имя команды, остальные — её аргументы. Любой аргумент может быть заменён другой командой, помещённой в квадратные скобки. Любые аргументы в фигурных скобках передаются команде «как есть», в виде единого аргумента. === Символы, имеющие особое значение === * <tt>$ </tt> — вызывает подстановку значения переменной. * <tt>[]</tt> — вызывает подстановку результата выполнения команды внутри скобок. * <tt><nowiki>""</nowiki></tt> — группирует аргументы в один с подстановкой значений переменных. * <tt>{}</tt> — группирует аргументы в один без подстановки значений переменных. * <tt>\ </tt> — экранирует следующий символ или вызывает подстановку управляющего символа. * <tt># </tt> — начало однострочного комментария, должен быть после неэкранированного символа перевода строки или «;» (точки с запятой). === Замечания о процессе разборки скрипта === * Разбивка на слова, подстановка значений переменных и результатов выполнения команд производятся за один проход по команде. * Все символы, находящееся внутри скобок <tt>{}</tt> и кавычек <tt>""</tt>, рассматривается как одно слово. * Первое слово команды рассматривается как встроенная или определённая процедура. === Примеры команд === * '''Присваивание''' обозначается словом ''set'', а не знаком равенства. Синтаксис: <source lang=tcl>set переменная значение</source> Пример: <source lang=tcl>set a 2</source> <source lang=tcl>set b 3</source> * '''Комментарий''' обозначается символом ''#'' Синтаксис: <source lang=tcl># текст комментария</source> Пример: <source lang=tcl># это комментарий</source> * '''Вывод (печать)''' реализуется командой ''puts'' Синтаксис: <source lang=tcl>puts выражение</source> Пример: <source lang=tcl> puts "Привет! Это я." puts 123 puts $a puts "b = $b" </source> * '''Цикл''' ''пока'' реализуется командой ''while'', имеющей два аргумента. Первый — Tcl выражение (выражения фактически пишутся на миниатюрном языке, состоящем из математических операций и операций сравнения в стиле языка [[Си (язык программирования)|C]]. Второй аргумент — это скрипт, выполняемый при каждой [[Итерация|итерации]]. Его, как правило, помещают в фигурные скобки, чтобы избежать немедленного выполнения. Синтаксис: <source lang=tcl> while { Выражение_Tcl_С_Логическим_Значением } { TclКоманда другаяTclКоманда … … } </source> <!-- старый вариант while { [TclКомандаСЛогическимЗначением] } { TclКоманда другаяTclКоманда … … } --> Пример: <source lang=tcl> while { $x < 10 } { puts $x incr x } </source> * '''Условная''' команда Синтаксис: <source lang=tcl> if { Выражение_Tcl_С_Логическим_Значением } { КомандаTcl } </source> Пример: <source lang=tcl> if {$x < 0} { set x 0 } </source> * Команда ветвления Пример: <source lang=tcl> switch -glob — $var { {see} - {saw} - {seen} { puts "Все это значит одно и то же!"} } </source> * Команда может не иметь аргументов, например <source lang=tcl>pwd</source> просто возвращает текущий рабочий каталог. А командой <source lang=tcl>set wdir [pwd]</source> вы сохраните имя текущего каталога в переменной ''wdir''. * Команда может возвращать список, например <source lang=tcl>glob Образец</source> возвратит список имён файлов текущей директории, удовлетворяющих шаблону ''Образец''. === Процедуры === Процедуры определяются следующим образом <source lang=tcl> proc имяПроцедуры { списокАргументов } { … … } </source> === Ассоциативные массивы === Следующий фрагмент кода создаст и инициализирует [[ассоциативный массив]] (называемый в других языках также карта, словарь, или хеш). <source lang=tcl> set capital(France) Paris set capital(Italy) Rome set capital(Germany) Berlin set capital(Poland) Warsaw set capital(Russia) Moscow set capital(Spain) Madrid </source> Для запроса и вывода одного из значений ассоциативного массива используется <source lang=tcl>puts $capital(Italy)</source> Список всех стран (ключей массива) можно получить командой <source lang=tcl>array names capital</source> Результат не будет отсортирован, потому что массивы Tcl базируются на [[хеш-таблица]]х. <source lang=tcl>Poland Spain Russia Germany Italy France</source> Сортировку можно выполнить командой <source lang=tcl>lsort [array names capital]</source> Чтобы сослаться на массив (передать его как ссылку) используется имя содержащей его переменной: <source lang=tcl> proc demo arrName { upvar 1 $arrName arr ;# tie the reference to a local name #do something with arr } </source> Для доступа к массиву по значению, используется ''array get'' или ''array set''. Например, чтобы скопировать один массив в другой: <source lang=tcl>array set Newarr [array get Oldarr]</source> В Tcl 8.5 введены массивы, передаваемые по значению — словари (''dict''). Для преобразования скалярной переменной в массив и наоборот следует удалить существующую переменную при помощи команды ''unset''. === Область видимости переменных === По умолчанию внутри процедуры видны только ''определённые в ней'' переменные. За пределами определения процедуры её переменные недоступны, иначе чем через механизм передачи параметров. Вы можете иметь переменные в процедуре с таким же именем, как и в основной программе, при этом значения этих переменных будут различаться, по сути это будут разные переменные. Чтобы изменить это поведение используются команды ''global'' или ''upvar''. == Примеры == Дополнительные примеры с комментариями на русском вы можете найти на [http://lug-wiki.nnov.ru/ wiki-ресурсе Нижегородской Группы Пользователей Linux] в разделе [http://lug-wiki.nnov.ru/index.php/Programming_Gems::Tcl/Tk Programming Gems::Tcl/Tk].<ref>примеры на английском см. также в [http://wiki.tcl.tk/1306 Tcl examples] и [wb:en:Tcl Programming/Tk examples|Programming:Tcl Tcl/Tk examples]</ref> === Здравствуй, мир! === Программа [[Hello, world]] выглядит так <source lang=tcl>puts "Здравствуй, мир!"</source> или так <source lang=tcl>puts {Здравствуй, мир!}</source> === Сложение чисел массива === Метод (A) — Сложение с использованием цикла 'foreach' <source lang=tcl> set numbers {1 2 3 4 5 6 7 8 9 10} set result 0 foreach number $numbers { set result [expr {$result + $number}] } puts $result </source> Метод (B) — Гораздо более элегантный способ с использованием команды 'join' <source lang=tcl> set numbers {1 2 3 4 5 6 7 8 9 10} puts [expr [join $numbers +]] </source> === Список содержимого массива === В массиве ''tcl_platform'', содержится информация о свойствах платформы, на которой запущен Tcl. Список имён свойств может быть получен с помощью <source lang=tcl>array names tcl_platform </source> Следующий фрагмент выводит их вместе со значениями: <source lang=tcl> foreach i [array names tcl_platform] { puts "$i = $tcl_platform($i)" } </source> Если свойства должны быть отсортированы <source lang=tcl> foreach i [lsort [array names tcl_platform] ] { puts "$i = $tcl_platform($i)" } </source> Здесь демонстрируется вложенность команд. Они могут быть вложены на любую глубину. Подобного же результата можно достичь с помощью команды ''parray'' (появившейся в Tcl 8.5). === Пересечение множеств === Процедура ''filter'' возвращает те элементы списка, для которых ''script'' принимает значение TRUE: <source lang=tcl> proc filter {list script} { set res {} foreach e $list {if {[uplevel 1 $script $e]} {lappend res $e}} return $res } </source> Команда ''uplevel 1'' позволяет вычислить выражение в контексте, в котором вызывается слово ''filter''. Процедура ''in'' — это сокращённая запись для включения (инклюзии) множеств: <source lang=tcl> proc in {list e} { expr {[lsearch -exact $list $e]>=0} } </source> Проверка: <source lang=tcl> % filter {a b c} {in {b c d}} b c </source> === Факториал === <source lang=tcl>proc ! x {expr {$x<2? 1: $x*[! [incr x -1]]}}</source> Здесь демонстрируется, что именем команды могут быть любые строки, а также известный по другим языкам оператор ''?:''. == Реализация, дистрибутивы, инструменты == Tcl — [[интерпретация|интерпретируемый]] язык, то есть [[компьютерная программа|программы]] на Tcl готовы к выполнению без [[компилятор|компиляции]] и [[Компоновщик|компоновки]]. Интерпретатор Tcl [[Портирование программного обеспечения|портирован]] на большинство распространённых [[Компьютерная платформа|платформ]]. Он распространяется под [[свободный софт|свободной]] [[копилефт|некопилефтной]] [http://www.tcl.tk/software/tcltk/license.html лицензией], позволяющей использовать его без ограничения в разработке [[проприетарное ПО|проприетарных приложений]], а также создавать проприетарные производные системы. Разработчики относят её [[Лицензия BSD|к BSD подобным]], хотя по сравнению с лицензией BSD лицензия Tcl накладывает меньшее количество запретов. === Реализация === В настоящее время работа над ядром языка Tcl ведётся [http://wiki.tcl.tk/977 группой разработчиков] именуемой [http://tcl.tk/community/coreteam/ Tcl Core Team]. Самые свежие версии Tcl-транслятора и основных библиотек доступны в [[Репозиторий|репозитории]] на [[SourceForge.net]], [http://tcl.tk/community/sourceforge.html см. список]. Транслятор Tcl компилирует программу в промежуточное представление — [[байткод]], а затем интерпретирует её. В отличие от, например [[Python]] — это промежуточное представление не сохраняется на диск, программа может хранится только в исходных текстах, возможно упакованных в [[MetaKit#StarKit|StarKit]] модуль или с помощью какого-нибудь другого [[враппер]]а. В зависимости от параметров компиляции интерпретатор Tcl может поддерживать или не поддерживать [[многопоточность]]. Хотя в большинстве учебников по Tcl для начинающих говорится что-то вроде «в Tcl есть всего один тип переменных — строка», на самом деле трансляторы Tcl уже давно как устроены по-другому. Внутри Tcl использует систему динамических типов с автоматическим, прозрачным преобразованием к строковому виду. Tcl входит практически во все дистрибутивы [[Linux]]. Для [[Microsoft Windows]] требуется отдельный установочный пакет. В настоящее время текущая стабильная версия Tcl 8.4, её основные отличия от предыдущей — новые функции (оптимизация 64-битного кода, VFS, дополнения в плане [[Интроспекция (программирование)|интроспекции]]) и некоторое повышение быстродействия за счёт оптимизации работы с байткодом. Новые возможности, добавленные в версии 8.1 (в частности, поддержка многопотокового выполнения, средства интернационализации и работа с символами Unicode), замедлили работу Tcl по сравнению с давшей скачок скорости восьмой версией примерно на 19 %. Разработчики 8.4 приложили все усилия для того, чтобы максимально повысить скорость выполнения программ, добиться, чтобы они работали не только не медленнее, но даже быстрее, чем это было при появлении версии 8.0. Эта цель была достигнута практически для всех средств Tcl и Tk — версия 8.4 в среднем в 8 раз быстрее чем версия 7.6<ref name="bench" />. Текущая версия TCL — 8.5. ==== Альтернативные реализации и диалекты ==== Существует также альтернативная реализация Tcl написанная на [[Java]] — [http://tcljava.sourceforge.net/ Jacl], ведутся эксперименты по трансляции Tcl программ в код виртуальной машины [[Parrot]], разрабатываемой для шестой версии [[Perl]]. Для программирования [[Встраиваемая система|встраиваемых систем]] и встраивания в приложения разработан специальный диалект Tcl [http://jim.berlios.de/ Jim]. Это интерпретатор реализующий большое подмножество Tcl, расширенное дополнительными механизмами [[Объектно-ориентированное программирование|объектно-ориентированного]] и [[Функциональное программирование|функционального]] программирования и занимающий в скомпилированном виде менее 100 килобайт. Другой диалект Tcl — скриптовый язык мобильных устройств [http://www.hecl.org/ Hecl], реализованный на [[Java]] ([[J2ME]]). === Использование в веб-разработке === В web-программировании Tcl обычно используется вместе с веб-сервером [[AOLServer]] или одним из «облегчённых» веб-серверов, вроде [[lighttpd]], ориентированным на [[FastCGI]]. Для интеграции Tcl с [[Apache]] существует модуль [http://tcl.apache.org/rivet/ Rivet]. Существуют также такие проекты, как [http://www.tcl.tk/software/tclhttpd/ TclHttpd] и его преемник — [http://code.google.com/p/wub/ Wub], являющиеся полноценными Web-[[фреймворк]]ами. На базе нового объектного расширения языка TclOO разрабатывается веб-фреймвок [http://woof.magicsplat.com/ Woof] (Web Oriented Object Framework). Помимо использования в качестве языка реализации веб-приложений, TCL может использоваться как скриптовый язык для расширения существующих приложений. К примеру на нём пишут модуле модули для IRC бота [[Eggdrop]]. === Дистрибутивы === Все нижеперечисленные дистрибутивы распространяются свободно и собраны из компонентов, имеющих ту или иную [[Свободное программное обеспечение|свободную лицензию]]. Большинство из них — [[Кроссплатформенное программное обеспечение|кроссплатформены]] (кроме ''WinTclTk'' и ''Tcl/Tk Aqua''), хотя в [[Unix]]-системах Tcl/Tk обычно является частью дистрибутива [[Операционная система|ОС]]. * [http://www.activestate.com/Products/ActiveTcl/ ActiveTcl] *: Самый распространённый дистрибутив TCL. Подобно другим продуктам компании [[ActiveState]] включает в себя большой набор библиотек и расширений. В windows-версиях включает в себя средства интеграции с [[WSH]]. Какие либо [[Инструментальное программное обеспечение|инструментальные средства]], облегчающие жизнь программиста, отсутствуют. Фирма продаёт пакет TclDevKit содержащий средства отладки и создания автономных программ (последнее на базе технологии [[MetaKit#StarKit|StarKit]]) и Komodo — универсальное [[Интегрированная среда разработки|IDE]] для скриптовых языков, включающее средства визуального программирования [[Tk]]-форм. * [http://wintcltk.sourceforge.net/ WinTclTk] *: Более компактный, дистрибутив ориентированный на работу с [[XOTcl]] — объектно-ориентированным расширением Tcl. Список включённых в него библиотек несколько уже, чем в ActiveTcl, но «джентльменский набор» вы здесь найдёте. В этот дистрибутив входят [http://tloona.sourceforge.net/ Tloona IDE] — [[Интегрированная среда разработки|среда разработки]] традиционного типа и [http://www.xdobry.de/xotclIDE/ XOTclIde] — среда объектно-ориентированного программирования в стиле [[Smalltalk]], обе — с отладчиками. Также на сайте разработчиков свободно доступен пакет для создания единого запускаемого файла TkWrapper основанный на [http://freewrap.sourceforge.net/ FreeWrap] — технологии, альтернативной [[MetaKit#StarKit|StarKit]], основанной на простом [[ZIP]]-сжатии. Последняя на сегодняшний день версия — 8.5.6. * [http://www.equi4.com/tclkit/ TclKit] *: Это Tcl/Tk c базовым набором библиотек в одном компактном выполняемом файле. Дистрибутив создан с использованием технологии [[MetaKit#StarKit|StarKit]]. Содержит Библиотеку [[MetaKit]] позволяющую управлять содержанием этого файла. * [http://sourceforge.net/projects/dqsoftware dqkit] *: Альтернативная сборка, известная как «TclKit на стероидах», имеется несколько вариантов, отличающихся составом библиотек, поддержкой многопоточности и т. д. * [http://tcltkaqua.sourceforge.net/ Tcl/Tk Aqua] *: Дистрибутив для [[Mac OS]]. Существует три варианта: '''TclTkAquaBI''' — надмножество ActiveTCL, компактный дистрибутив '''TclTkAqua''' и минимальный набор '''TclTkAquaStandalone'''. == Достоинства и недостатки == Недостатком ранних версий Tcl/Tk, несомненно, было низкое быстродействие. Версии ниже 8-й использовали прямую интерпретацию исходного текста, однако использование [[байткод]]а разрешило эту проблему. Сейчас по быстродействию Tcl не сильно отличается от [[PHP]]<ref>[http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=tcl&lang2=php Computer Language Benchmarks Game] — сравнение производительности языков программирования. </ref>, хотя заметно уступает таким скриптовым языкам как, например, [[Python]] или [[Lua]]. Сложные или [[Критический участок кода|критические по времени выполнения участки кода]] рекомендуется выполнять в виде внешних модулей на [[Си (язык программирования)|C]]/[[C++]]. Tcl/Tk, отличает непривычность синтаксиса для программистов на «традиционных» языках. Он ближе к стандартному синтаксису [[Командная оболочка UNIX|оболочки Unix]]. Этот синтаксис может быть произвольно изменён (как и в других «программируемых языках программирования», таких как [[Forth]]<ref>Интересен симбиозе Forth и Tcl в рамках проекта [http://holonforth.com/new/tcl/holont.html HolonT], где Forth транслируется в Tcl код.</ref> или [[Common Lisp]]). Это может быть преимуществом для программиста-индивидуала или небольшой группы программистов, но делает Tcl/Tk вряд ли пригодным для использования в качестве языка общего назначения при разработке в промышленном масштабе. Хотя наличие стандартизированных расширений снижает остроту этой проблемы. Tcl может использоваться и в крупных проектах в пределах своей «экологической ниши» (встроенные скрипты, «склеивание» компонент, WEB-программирование). Хотя Tcl обладает всеми свойствами [[Функциональное программирование|функционального языка]], его интерпретатор до версии 8.6 не производил оптимизацию хвостовой рекурсии, что затрудняло использование чисто функционального стиля, уменьшало его эффективность. Впрочем, гибкость языка позволяет обойти эту проблему, реализовав подобие такой оптимизации на высоком уровне<ref>в [http://wiki.tcl.tk/1348 Tail call optimization] описана эта проблема и обозначены возможные пути её решения.</ref>. Наконец, появившаяся в тестовой версии 8.6 команда ''tailcall'' позволяет без особых проблем использовать хвостовую рекурсию. Наиболее тесная интеграция Tcl с [[графический интерфейс пользователя|графической]] [[библиотека (программирование)|библиотекой]] [[Tk]], которая зачастую используется и в сочетании с другими языками программирования — несомненное преимущество Tcl. Для создания [[GUI]] оболочек к [[консольная программа|консольным программам]] или пакетам консольных программ Tcl может оказаться наилучшим выбором. По количеству разработанных для Tcl библиотек расширений и инструментальных средств несколько уступает [[Python|Питону]], а тем более [[Perl|Перлу]], но вряд ли вы столкнётесь с их нехваткой. Чего, правда, нельзя сказать о количестве документации и литературы по Tcl, особенно — русскоязычной. == См. также == {{Портал|Свободное программное обеспечение|}} * [[Tk]] * [[Forth]] * [[SQLite]] * [[Perl]] * [[Expect]] == Ссылки == * [http://www.tcl.tk/ www.tcl.tk]{{ref-en}} — Официальный сайт * [http://wiki.tcl.tk/ wiki.tcl.tk]{{ref-en}} — Tcl Wiki: Ресурс, посвящённый Tcl * [http://tmml.sourceforge.net/doc/ tmml.sourceforge.net/doc]{{ref-en}} — Официальная документация по Tcl/Tk и стандартной библиотеке Tcl * [http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html]{{ref-en}} — Учебник по Tcl 8.5 * [[:en:b:Tcl Programming]] {{ref-en}} — Викиучебник «Программирование на TCL» * [http://pleac.sourceforge.net/pleac_tcl/index.html pleac.sourceforge.net/pleac_tcl]{{ref-en}} — PLEAC-Tcl — Коллекция решённых на Тикле задач (удобна для сравнения с другими языками) === На русском языке === * [http://www.opennet.ru/links/sml/36.shtml www.opennet.ru/links/sml/36.shtml] — Ссылки на русскую документацию * [http://community.livejournal.com/ru_tcl/ community.livejournal.com/ru_tcl] — Сообщество программистов на Tcl * [http://www.cs.tut.fi/~yk/ns2ru/tcl.html www.cs.tut.fi/~yk/ns2ru/tcl.html] — Краткое введение в TCL * [http://tclstudy.narod.ru/index.html tclstudy.narod.ru/index.html] — Уроки для самостоятельного освоения tcl и tk * [http://www.cs.tut.fi/~yk/ns2ru/otcl.html www.cs.tut.fi/~yk/ns2ru/otcl.html] — Введение в OTCL ; Блоги посвящённые TCL * [http://geomapx.blogspot.com/search/label/Tcl geomapx.blogspot.com] — Описание некоторых компонент фрэймворка для AOL Server, патчи для tclsqlite и AOL Server, библиотеки и скрипты. * [http://etcl.ru/ etcl.ru] — Про Tcl/Tk от Evolane и его применения в простых задачах ==== Статьи и Обзоры ==== * [http://www.osp.ru/os/1998/03/179470/ Сценарии: высокоуровневое программирование для XXI века] - статья Джона Остераута (создателя Tcl) о сценарных языках. * [http://www.russianenterprisesolutions.com/techno/tcl.html Сергей Бобровский, Так-тикль — язык системной интеграции ], PC/Week RE, 1997 * [http://www.itc.ua/article.phtml?ID=1228 Tcl/Tk — «двойной чай» для любителей кофе], статья Андрея Зубинского в «Компьютерном Обозрении», № 7, 23 — 29 февраля 2000 г. * [http://itc.ua/search/all/%D0%B4%D1%80%D0%B5%D0%B2%D0%BD%D1%8F%D1%8F%20%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F%20%D0%B1%D1%83%D0%B4%D1%83%D1%89%D0%B0%D1%8F Древняя, новая, будущая], цикл статей Андрея Зубинского в «Компьютерном Обозрении». * [http://www.citforum.ru/database/postgres/tcl.shtml Доступ к PostgreSQL из программ на языке Tcl] — статья на [http://www.citforum.ru/ CitForum] е * [http://www.ibm.com/developerworks/ru/library/au-tcldsktop/ Вильям Б. Циммерли. Технология Tcl] — Используйте Tcl/Tk для организации рабочего стола и автоматизации вашей работы === Приложения === * [http://openacs.org/ openacs.org]{{ref-en}} — [[система управления содержимым]] вебсайтов с богатыми возможностями расширения ([[CMF]]) на языке Tcl, расширенном [[XOtcl]]. Работает совместно с [[AOLServer]] * [http://code.google.com/p/ucome/ Ucome]{{ref-en}} — более компактная Tcl [[система управления содержимым|CMS]]. * [http://code.google.com/p/wub/ Wub] — веб-фреймворк на Tcl, наследник [[HTTP]]-сервера TclHttpd * [http://www.project-open.org/ project-open]{{ref-en}} — система групповой работы c веб-интерфейсом, работающая под управлением AOLserver. * [[Html Viewer 3]] — минималистичный web-браузер, написанный на Tcl/Tk * [http://simpledevlib.sourceforge.net/ The Simple Development Library]{{ref-en}} — библиотека полезных утилит для разработки Tcl/Tk-проектов. * [[AOLServer]] - web-сервер фирмы [[AOL]] со встроенным Tcl. * [http://wiki.tcl.tk/2090 NaviServer] - web-сервер написанный на Си и Tcl. * [http://tcl.apache.org/rivet/ Rivet] - модуль Tcl для Apache. * [[AMSN]] - программа с открытым исходным кодом для мгновенного обмена сообщениями == Книги == === На русском языке === <!--* {{книга |автор = Брент Б. Уэлш, Кен Джонс, Джеффри Хоббс |заглавие = Практическое программирование на Tcl и Tk |оригинал = Practical Programming in Tcl and Tk |ссылка = |издание = 4-е изд |место = М. |издательство = [[Вильямс (издательство)|«Вильямс»]] |год = 2004 |страницы = 1136 |isbn = 0-13-038560-3 }} дублирует следующую книгу с потерей ISBN перевода --> * Брент Б. Уэлш, Кен Джонс, Джеффри Хоббс «Практическое программирование на Tcl и Tk», ISBN 5-8459-0661-X, : оригинал: Brent Welch, Ken Jones, Jeffrey Hobbs «Practical Programming in Tcl and Tk», ISBN 0-13-038560-3 ([http://www.beedub.com/book/ электронная версия]<ref>полностью доступно первое издание, выборочно, более новые</ref>) ([http://derlab.ru/?page/tcl Частичный перевод]) * Москвин П. В. «Азбука TCL», ISBN 5-93517-130-9 * Алексей Петровский, Командный язык программирования TCL (Tool Command Language), ISBN 5-901321-16-2 === На английском языке === * Clif Flynt «Tcl/Tk, Second Edition : A Developer’s Guide», ISBN 1-55860-802-8 : 1-е издание «Tcl/Tk for Real Programmers», ISBN 0-12-261205-1 * John K. Ousterhout, «Tcl and the Tk Toolkit», ISBN 0-201-63337-X * Mark Harrison, Michael McLennan, «Effective Tcl/Tk Programming. Writing Better Programs in Tcl and Tk», ISBN 0-201-63474-0 * J. Adrian Zimmer «Tcl/Tk For Programmers», ISBN 0-8186-8515-8 * «Tcl/Tk Cookbook» from Lakshmi Sastry Advanced Interactive Systems Group([http://www.dci.clrc.ac.uk/Publications/Cookbook/ электронная книга]) * Salvatore Sanfillipo «Tcl Wise. Guide to the Tcl Programming Language» ([http://www.invece.org/tclwise/ первые 9 глав on-line]) * Paul Raines, Jeff Tranter «Tcl/Tk in a Nutshell: A Desktop Quick Reference», ISBN 1-56592-433-9 * Chad Smith «[incr Tcl/Tk] from the Ground Up», ISBN 0-07-212106-8 * David Maggiano «CGI Programming with Tcl», ISBN 0-201-60629-1 * J. M. Ivler, Kamran Husain, «Cgi Developer’s Resource: Web Programming in Tcl and Perl», ISBN 0-13-727751-2 == Примечания == {{reflist|2}} {{Языки программирования}} {{Хорошая статья|Компьютер}} [[Категория:Языки программирования семейства Tcl]] [[Категория:Скриптовые языки]] [[Категория:Объектно-ориентированные языки программирования]] [[Категория:Свободные компиляторы и интерпретаторы]] [[bg:Tcl]] [[bug:Tcl]] [[ca:Tcl]] [[cs:Tcl]] [[de:Tcl]] [[en:Tcl]] [[eo:Tcl]] [[es:Tcl]] [[et:Tcl]] [[fi:TCL]] [[fr:Tool Command Language]] [[gl:TCL]] [[he:TCL]] [[is:Tcl]] [[it:Tcl]] [[ja:Tcl/Tk]] [[ko:Tcl]] [[la:Tcl]] [[ms:Tcl]] [[nl:Tcl]] [[no:Tcl]] [[pl:Tcl]] [[pt:Tcl]] [[ro:Tcl/TK]] [[sr:Tcl]] [[sv:Tcl]] [[tg:Tcl]] [[tr:Tcl]] [[uk:Tcl]] [[vi:Tcl]] [[zh:Tcl]]'
Вики-текст новой страницы после правки (new_wikitext)
'{{Карточка языка программирования | name = Tcl | logo = [[Файл:Tcl.svg|70px|]]| semantics = [[Императивное программирование|императивный]], [[скриптовый язык|скриптовый]] | class = [[интерпретатор]] | year = 1988 | designer = [[Остераут, Джон|Джон Оустерхаут]] | latest_release_version = 8.5.9 / 8 сентября 2010 | latest_test_version = 8.6b1 / 23 декабря 2008 | typing = динамическая | influenced_by = [[Командная оболочка UNIX|Shell]], [[Lisp]] | influenced = [[Python]] }} '''Tcl''' (от {{lang-en|Tool Command Language}} — «командный язык инструментов», читается «тикль» или «ти-си-эль») — [[скриптовый язык]] высокого уровня. Tcl часто применяется совместно с [[графический интерфейс пользователя|графической]] [[библиотека (программирование)|библиотекой]] [[Tk]] (Tool Kit). Связку Tcl/Tk по-русски иногда называют «Так-тикль» (английский вариант --- «тикль-ток»). Области применения языка — [[Прототипирование программного обеспечения#Быстрое прототипирование|быстрое прототипирование]], создание графических интерфейсов для [[консольная программа|консольных программ]] (пакетов программ), [[Скриптовый язык#Встраиваемые|встраивание]] в прикладные программы, [[Тестирование программного обеспечения|тестирование]]. Также Tcl применяется в [[веб-разработка|веб-разработке]]. Tcl, наряду с [[Perl]] и [[Python]], стал одним из трёх классических скриптовых языков общего назначения. Эта троица фигурирует не только в качестве списка свободных дистрибутивов, собираемых в [[ActiveState]], но и, например, как языки, на которых (помимо диалекта [[PL/pgSQL]]) можно писать [[триггер (базы данных)|триггеры]] и [[хранимая процедура|хранимые процедуры]] популярного сервера БД [[PostgreSQL]]. Tcl, как встраиваемый язык, нашел применение и в сфере [[САПР]] ([[САПР|CAD]]|[[CAM]]|[[Computer-aided engineering|CAE]])<ref>[http://wiki.tcl.tk/12092 CAD software history] в [http://wiki.tcl.tk/ TclWiki]</ref><ref>[http://www.sapr.ru/article.aspx?id=7985&iid=322 Современные компьютерные технологии на службе Nike, Inc.] в журнале [http://www.sapr.ru/ САПР и графика], № 10’2000</ref>. Он, к примеру, используется как средство настройки баз данных, в постпроцессоре [[Unigraphics]]. Кроме того, он де-факто является языком автоматизации и интеграции во всех ведущих программных пакетах разработки микросхем ([[ПЛИС]] и [[ASIC]]). == Особенности == В Tcl данными всех типов, включая код программы, можно манипулировать как строками. Это делает его языком с естественной поддержкой [[метапрограммирование|метапрограммирования]]. Эта [[парадигма программирования]] учитывалась в ходе разработки и эволюции языка. Программа на Tcl состоит из [[команда (программирование)|команд]], разделённых символами новой строки или точками с запятой. Каждая команда состоит из набора полей, разделённых пробелами. Первое поле должно быть именем команды, а необязательные остальные поля — передаваемые этой команде аргументы. Команда возвращает значение, иногда пустое. То есть, как и в [[Lisp|Лиспе]], в Tcl используется префиксная нотация. [[ключевое слово|Ключевых слов]] как таковых нет — понятие команды в Tcl аналогично понятию [[Процедура (программирование)|процедуры]] или [[Функция (программирование)|функции]] распространённых языков программирования. Это относится и к управляющим конструкциям языка. В сочетании с элементарным синтаксисом это обеспечивает хорошую расширяемость языка, в том числе и библиотеками, написанными на других языках, таких как [[Си (язык программирования)|C]]/[[C++]] или [[Java]]. В Tcl также качественно реализована [[Событийно-ориентированное программирование|модель управления программой на основе событий]]. События могут генерироваться таймером, при появлении данных в канале, изменении значения переменной, при завершении какой-либо внешней программы, или просто при работе пользователя с интерфейсом Tk. Можно задавать свои события и управлять ими. Как и большинство современных [[Скриптовые языки|скриптовых языков]] Tcl содержит развитые средства работы с регулярными выражениями, работает с [[Ассоциативный массив|ассоциативными массивами]] и другими динамическими структурами данных. В базовом Tcl нет поддержки [[Объектно-ориентированное программирование|ООП]], однако существует множество расширений Tcl объектно-ориентированными механизмами, реализованных в виде подключаемых библиотек на [[Си (язык программирования)|Си]], или самом Tcl. Вот самые распространённые из них<ref>если ни одна из реализаций объектной модели вас не устраивает, либо вы интересуетесь, как это работает, можете ознакомиться со статьёй [http://www.wjduquette.com/tcl/objects.html Creating Object Commands]{{ref-en}} от создателей [[SNIT]]</ref>: {|class="standard" ! расширение||реализовано на||особенности используемой модели |- |[[XOTcl]] |C |мощная объектная система с динамическим определением классов и методов, близкая к [[CLOS]] |- |[[incr Tcl]] |C |[[Объектно-ориентированное программирование|ООП]] в стиле, близком к [[C++]], расширенном введением ''конфигураторов'' |- |[[Snit]] |Tcl |реализация объектной модели на основе [[Делегирование (программирование)|делегирования]], а не [[Наследование (программирование)|наследования]] |- |[[STOOOP]] |Tcl |ООП в стиле, максимально близком к C++, также введён механизм ''переключения классов'' |} Пространства имён поддерживаются на уровне ядра языка. В настоящее время бета-тестирование проходит новый [[Объектно-ориентированное программирование|ООП]]-фреймвок [http://wiki.tcl.tk/18152 TclOO], который планируется включить в будущие версии ядра языка. Это компактная, но мощная объектно-ориентированная система, которую можно использовать как непосредственно, так и как базу для построения расширенных моделей ООП. На Tcl легко программировать в [[Функциональное программирование|функциональном стиле]]: он обеспечивает такие механизмы, как функции высшего порядка и абстракции функций<ref>см. также [http://wiki.tcl.tk/967 Steps towards functional programming]</ref>, хотя Tcl редко используют таким образом. Вот пример того, как можно осуществить [[Композиция функций|композицию двух функций]]: <source lang=tcl>proc o {f g x} {$f [$g $x]}</source> В версии 8.5 в Tcl также введена команда ''apply'', значительно облегчающая программирование в этом стиле. Вот пример её использования из официальной документации: <source lang=tcl>proc map {lambda list} { set result {} foreach item $list { lappend result [apply $lambda $item] } return $result } map {x {return [string length $x]:$x}} {a bb ccc dddd} </source> результатом работы этого примера будет <pre>1:a 2:bb 3:ccc 4:dddd</pre> == История == Язык разработан [[Оустерхаут, Джон|Джоном Оустерхаутом]] (John Ousterhout) в то время, когда он работал в университете Калифорнии в Беркли. Первоначальной целью было создание универсального языка для встраивания в [[консольная программа|консольные приложения]]. Вслед за этим Оустерхаут расширил свой язык средствами создания [[Графический интерфейс пользователя|графических интерфейсов]] — так появился Tcl/Tk.<ref>[См. http://www.tcl.tk/about/history.html History of Tcl]</ref> За 4 года развития в университетских стенах Тикль-сообщество выросло до нескольких сотен тысяч программистов. В 1993 году было разработано первое объектно-ориентированное расширение — [[incr Tcl]]. В 1994 г. Оустерхаут становится ведущим инженером проекта SunScript. В течение следующих 4 лет, став одним из проектов корпорации [[Sun Microsystems|Sun]], Тикль не только остался [[Свободное программное обеспечение|свободно распространяемой]] системой, но и значительно усовершенствовался, стал [[Кроссплатформенное программное обеспечение|кросс-платформенным]]. Заметный удар по популярности языка нанёс [[Ричард Столлман]], опубликовав в сентябре 1994 г. в ряде новостных групп рекомендацию «Почему вы не должны использовать Tcl» <ref>[http://www.vanderburg.org/OldPages/Tcl/war/ Why you should not use Tcl]</ref>. В ней он на основании утверждений, что ''«Tcl разработан не как серьёзный язык программирования»'' и ''«Tcl имеет особый синтаксис, притягательный для [[хакер]]ов из-за своей простоты. Но синтаксис Tcl кажется странным для большинства пользователей.»'', а также в связи с продвижением [[Emacs Lisp]] вынес вердикт: ''«проект [[GNU]] не собирается использовать Tcl в программном обеспечении GNU»''. Помимо субъективных претензий к дизайну языка, Столлман указал на объективный на тот момент недостаток — низкое быстродействие. Тем не менее, рост количества разработчиков, активно использующих тикль, составил за этот период 600 %. В 1998 г. в связи с [[Java]]-бумом и связанной с ним острой конкурентной борьбой корпорация уже не могла уделять тиклю прежнего внимания. Джон Остераут покидает Sun и создаёт (при поддержке Sun) компанию Scriptics, продолжая развитие технологии Tcl/Tk<ref>[http://www.osp.ru/cw/1998/07/27311/ Камерон Лэрд, Кэтрин Сорэз, SunWorld, США. Создатель Tcl уходит из Sun в новое предприятие], Computerworld № 07/1998</ref><ref>[http://www.osp.ru/cw/1998/36/31691/ Роберт Макмиллан, SunWorld. Tcl: путь к новой жизни], Computerworld № 36/1998</ref>. Это была одна из первых коммерческих программных фирм, чья деятельность строилась вокруг бесплатного [[Свободное программное обеспечение|свободного ПО]]. [[Файл:Tcl logo.gif|frame|Цветовое решение логотипа, принятое в 90-х гг. XX века]] В марте 1998 года Оустерхаут пишет ставшую классической статью «Сценарии: высокоуровневое программирование для XXI века»<ref>[http://home.pacbell.net/ouster/scripting.html John K. Ousterhout Scripting: Higher Level Programming for the 21st Century]{{ref-en}}.<br /> [http://www.osp.ru/os/1998/03/179470/ Перевод этой статьи]{{ref-ru}} в журнале «Открытые системы», № 3, 1998</ref>, в которой назвал скриптовые языки языками системной интеграции, потому что они ориентированы прежде всего на работу с объектами операционной среды, а не с элементарными данными. Это позволяет без написания тысяч [[количество строк кода|строк кода]] двумя-тремя командами «склеивать» такие объекты в одно целое. В том же году он выиграл за разработку языка Tcl две крупных награды. Первая — это [[ACM]] Software System Award, вручаемая за «наиболее значимое программное обеспечение». Этой наградой до этого были отмечены такие основополагающие системы, как стек протоколов [[TCP/IP]], первая [[электронная таблица]], первая [[реляционная база данных]], [[World Wide Web]], [[Unix]], [[PostScript]] и [[Smalltalk]]. Вторая — это ежегодная USENIX Software Tools User Group (STUG) Award, в знак признания выдающегося программного обеспечения. В 1999 году выходит Tcl 8.0 — в этой реализация впервые появилась компиляция в [[байткод]], что позволило в 6 раз поднять быстродействие<ref name="bench">см. [http://wiki.tcl.tk/1611 Tcl Benchmarks]</ref>. В следующую модификация Tcl 8.1 введена полноценная поддержка [[юникод]]а, в ней впервые реализована [[многопоточность]]. В связи c этим релизом Остераут заявил: {{цитата|«В целом 8.1 переводит Tcl в новую категорию, поскольку теперь его можно использовать для серверных приложений. Си, Си++ и Java можно по-прежнему использовать для создания частей приложений, критических с точки зрения производительности, а Tcl — для интеграции и создания интерфейсных компонентов».'' <ref>[http://www.osp.ru/cw/1999/21/35698/ Tcl: корпоративный вариант] — Computerworld № 21/1999</ref>}} В 2000 году фирма Scriptics была переименована в Ajuba Solutions, а затем куплена фирмой Interwoven, не заинтересованной в работе со [[Свободное программное обеспечение|свободным ПО]]. В связи с этим разработка Tcl была передана сообществу программистов. Так была сформирована [http://www.tcl.tk/community/coreteam/ Tcl Core Team]. На 9-ой конференции по Tcl/Tk, проходившей в [[Ванкувер]]е, была представлена виртуальная файловая система [[MetaKit#StarKit|StarKit]], обеспечившая новый, удобный для обычного пользователя способ распространения Tcl программ. == Синтаксис Tcl == ; Скрипт : команды, разделённые переводом строки или точкой с запятой (;). ; Команда : слова, разделённые пробелами. <source lang=tcl> commandName argument1 argument2 … argumentN</source> Первое слово — имя команды, остальные — её аргументы. Любой аргумент может быть заменён другой командой, помещённой в квадратные скобки. Любые аргументы в фигурных скобках передаются команде «как есть», в виде единого аргумента. === Символы, имеющие особое значение === * <tt>$ </tt> — вызывает подстановку значения переменной. * <tt>[]</tt> — вызывает подстановку результата выполнения команды внутри скобок. * <tt><nowiki>""</nowiki></tt> — группирует аргументы в один с подстановкой значений переменных. * <tt>{}</tt> — группирует аргументы в один без подстановки значений переменных. * <tt>\ </tt> — экранирует следующий символ или вызывает подстановку управляющего символа. * <tt># </tt> — начало однострочного комментария, должен быть после неэкранированного символа перевода строки или «;» (точки с запятой). === Замечания о процессе разборки скрипта === * Разбивка на слова, подстановка значений переменных и результатов выполнения команд производятся за один проход по команде. * Все символы, находящееся внутри скобок <tt>{}</tt> и кавычек <tt>""</tt>, рассматривается как одно слово. * Первое слово команды рассматривается как встроенная или определённая процедура. === Примеры команд === * '''Присваивание''' обозначается словом ''set'', а не знаком равенства. Синтаксис: <source lang=tcl>set переменная значение</source> Пример: <source lang=tcl>set a 2</source> <source lang=tcl>set b 3</source> * '''Комментарий''' обозначается символом ''#'' Синтаксис: <source lang=tcl># текст комментария</source> Пример: <source lang=tcl># это комментарий</source> * '''Вывод (печать)''' реализуется командой ''puts'' Синтаксис: <source lang=tcl>puts выражение</source> Пример: <source lang=tcl> puts "Привет! Это я." puts 123 puts $a puts "b = $b" </source> * '''Цикл''' ''пока'' реализуется командой ''while'', имеющей два аргумента. Первый — Tcl выражение (выражения фактически пишутся на миниатюрном языке, состоящем из математических операций и операций сравнения в стиле языка [[Си (язык программирования)|C]]. Второй аргумент — это скрипт, выполняемый при каждой [[Итерация|итерации]]. Его, как правило, помещают в фигурные скобки, чтобы избежать немедленного выполнения. Синтаксис: <source lang=tcl> while { Выражение_Tcl_С_Логическим_Значением } { TclКоманда другаяTclКоманда … … } </source> <!-- старый вариант while { [TclКомандаСЛогическимЗначением] } { TclКоманда другаяTclКоманда … … } --> Пример: <source lang=tcl> while { $x < 10 } { puts $x incr x } </source> * '''Условная''' команда Синтаксис: <source lang=tcl> if { Выражение_Tcl_С_Логическим_Значением } { КомандаTcl } </source> Пример: <source lang=tcl> if {$x < 0} { set x 0 } </source> * Команда ветвления Пример: <source lang=tcl> switch -glob — $var { {see} - {saw} - {seen} { puts "Все это значит одно и то же!"} } </source> * Команда может не иметь аргументов, например <source lang=tcl>pwd</source> просто возвращает текущий рабочий каталог. А командой <source lang=tcl>set wdir [pwd]</source> вы сохраните имя текущего каталога в переменной ''wdir''. * Команда может возвращать список, например <source lang=tcl>glob Образец</source> возвратит список имён файлов текущей директории, удовлетворяющих шаблону ''Образец''. === Процедуры === Процедуры определяются следующим образом <source lang=tcl> proc имяПроцедуры { списокАргументов } { … … } </source> === Ассоциативные массивы === Следующий фрагмент кода создаст и инициализирует [[ассоциативный массив]] (называемый в других языках также карта, словарь, или хеш). <source lang=tcl> set capital(France) Paris set capital(Italy) Rome set capital(Germany) Berlin set capital(Poland) Warsaw set capital(Russia) Moscow set capital(Spain) Madrid </source> Для запроса и вывода одного из значений ассоциативного массива используется <source lang=tcl>puts $capital(Italy)</source> Список всех стран (ключей массива) можно получить командой <source lang=tcl>array names capital</source> Результат не будет отсортирован, потому что массивы Tcl базируются на [[хеш-таблица]]х. <source lang=tcl>Poland Spain Russia Germany Italy France</source> Сортировку можно выполнить командой <source lang=tcl>lsort [array names capital]</source> Чтобы сослаться на массив (передать его как ссылку) используется имя содержащей его переменной: <source lang=tcl> proc demo arrName { upvar 1 $arrName arr ;# tie the reference to a local name #do something with arr } </source> Для доступа к массиву по значению, используется ''array get'' или ''array set''. Например, чтобы скопировать один массив в другой: <source lang=tcl>array set Newarr [array get Oldarr]</source> В Tcl 8.5 введены массивы, передаваемые по значению — словари (''dict''). Для преобразования скалярной переменной в массив и наоборот следует удалить существующую переменную при помощи команды ''unset''. === Область видимости переменных === По умолчанию внутри процедуры видны только ''определённые в ней'' переменные. За пределами определения процедуры её переменные недоступны, иначе чем через механизм передачи параметров. Вы можете иметь переменные в процедуре с таким же именем, как и в основной программе, при этом значения этих переменных будут различаться, по сути это будут разные переменные. Чтобы изменить это поведение используются команды ''global'' или ''upvar''. == Примеры == Дополнительные примеры с комментариями на русском вы можете найти на [http://lug-wiki.nnov.ru/ wiki-ресурсе Нижегородской Группы Пользователей Linux] в разделе [http://lug-wiki.nnov.ru/index.php/Programming_Gems::Tcl/Tk Programming Gems::Tcl/Tk].<ref>примеры на английском см. также в [http://wiki.tcl.tk/1306 Tcl examples] и [wb:en:Tcl Programming/Tk examples|Programming:Tcl Tcl/Tk examples]</ref> === Здравствуй, мир! === Программа [[Hello, world]] выглядит так <source lang=tcl>puts "Здравствуй, мир!"</source> или так <source lang=tcl>puts {Здравствуй, мир!}</source> === Сложение чисел массива === Метод (A) — Сложение с использованием цикла 'foreach' <source lang=tcl> set numbers {1 2 3 4 5 6 7 8 9 10} set result 0 foreach number $numbers { set result [expr {$result + $number}] } puts $result </source> Метод (B) — Гораздо более элегантный способ с использованием команды 'join' <source lang=tcl> set numbers {1 2 3 4 5 6 7 8 9 10} puts [expr [join $numbers +]] </source> === Список содержимого массива === В массиве ''tcl_platform'', содержится информация о свойствах платформы, на которой запущен Tcl. Список имён свойств может быть получен с помощью <source lang=tcl>array names tcl_platform </source> Следующий фрагмент выводит их вместе со значениями: <source lang=tcl> foreach i [array names tcl_platform] { puts "$i = $tcl_platform($i)" } </source> Если свойства должны быть отсортированы <source lang=tcl> foreach i [lsort [array names tcl_platform] ] { puts "$i = $tcl_platform($i)" } </source> Здесь демонстрируется вложенность команд. Они могут быть вложены на любую глубину. Подобного же результата можно достичь с помощью команды ''parray'' (появившейся в Tcl 8.5). === Пересечение множеств === Процедура ''filter'' возвращает те элементы списка, для которых ''script'' принимает значение TRUE: <source lang=tcl> proc filter {list script} { set res {} foreach e $list {if {[uplevel 1 $script $e]} {lappend res $e}} return $res } </source> Команда ''uplevel 1'' позволяет вычислить выражение в контексте, в котором вызывается слово ''filter''. Процедура ''in'' — это сокращённая запись для включения (инклюзии) множеств: <source lang=tcl> proc in {list e} { expr {[lsearch -exact $list $e]>=0} } </source> Проверка: <source lang=tcl> % filter {a b c} {in {b c d}} b c </source> === Факториал === <source lang=tcl>proc ! x {expr {$x<2? 1: $x*[! [incr x -1]]}}</source> Здесь демонстрируется, что именем команды могут быть любые строки, а также известный по другим языкам оператор ''?:''. == Реализация, дистрибутивы, инструменты == Tcl — [[интерпретация|интерпретируемый]] язык, то есть [[компьютерная программа|программы]] на Tcl готовы к выполнению без [[компилятор|компиляции]] и [[Компоновщик|компоновки]]. Интерпретатор Tcl [[Портирование программного обеспечения|портирован]] на большинство распространённых [[Компьютерная платформа|платформ]]. Он распространяется под [[свободный софт|свободной]] [[копилефт|некопилефтной]] [http://www.tcl.tk/software/tcltk/license.html лицензией], позволяющей использовать его без ограничения в разработке [[проприетарное ПО|проприетарных приложений]], а также создавать проприетарные производные системы. Разработчики относят её [[Лицензия BSD|к BSD подобным]], хотя по сравнению с лицензией BSD лицензия Tcl накладывает меньшее количество запретов. === Реализация === В настоящее время работа над ядром языка Tcl ведётся [http://wiki.tcl.tk/977 группой разработчиков] именуемой [http://tcl.tk/community/coreteam/ Tcl Core Team]. Самые свежие версии Tcl-транслятора и основных библиотек доступны в [[Репозиторий|репозитории]] на [[SourceForge.net]], [http://tcl.tk/community/sourceforge.html см. список]. Транслятор Tcl компилирует программу в промежуточное представление — [[байткод]], а затем интерпретирует её. В отличие от, например [[Python]] — это промежуточное представление не сохраняется на диск, программа может хранится только в исходных текстах, возможно упакованных в [[MetaKit#StarKit|StarKit]] модуль или с помощью какого-нибудь другого [[враппер]]а. В зависимости от параметров компиляции интерпретатор Tcl может поддерживать или не поддерживать [[многопоточность]]. Хотя в большинстве учебников по Tcl для начинающих говорится что-то вроде «в Tcl есть всего один тип переменных — строка», на самом деле трансляторы Tcl уже давно как устроены по-другому. Внутри Tcl использует систему динамических типов с автоматическим, прозрачным преобразованием к строковому виду. Tcl входит практически во все дистрибутивы [[Linux]]. Для [[Microsoft Windows]] требуется отдельный установочный пакет. В настоящее время текущая стабильная версия Tcl 8.4, её основные отличия от предыдущей — новые функции (оптимизация 64-битного кода, VFS, дополнения в плане [[Интроспекция (программирование)|интроспекции]]) и некоторое повышение быстродействия за счёт оптимизации работы с байткодом. Новые возможности, добавленные в версии 8.1 (в частности, поддержка многопотокового выполнения, средства интернационализации и работа с символами Unicode), замедлили работу Tcl по сравнению с давшей скачок скорости восьмой версией примерно на 19 %. Разработчики 8.4 приложили все усилия для того, чтобы максимально повысить скорость выполнения программ, добиться, чтобы они работали не только не медленнее, но даже быстрее, чем это было при появлении версии 8.0. Эта цель была достигнута практически для всех средств Tcl и Tk — версия 8.4 в среднем в 8 раз быстрее чем версия 7.6<ref name="bench" />. Текущая версия TCL — 8.5. ==== Альтернативные реализации и диалекты ==== Существует также альтернативная реализация Tcl написанная на [[Java]] — [http://tcljava.sourceforge.net/ Jacl], ведутся эксперименты по трансляции Tcl программ в код виртуальной машины [[Parrot]], разрабатываемой для шестой версии [[Perl]]. Для программирования [[Встраиваемая система|встраиваемых систем]] и встраивания в приложения разработан специальный диалект Tcl [http://jim.berlios.de/ Jim]. Это интерпретатор реализующий большое подмножество Tcl, расширенное дополнительными механизмами [[Объектно-ориентированное программирование|объектно-ориентированного]] и [[Функциональное программирование|функционального]] программирования и занимающий в скомпилированном виде менее 100 килобайт. Другой диалект Tcl — скриптовый язык мобильных устройств [http://www.hecl.org/ Hecl], реализованный на [[Java]] ([[J2ME]]). === Использование в веб-разработке === В web-программировании Tcl обычно используется вместе с веб-сервером [[AOLServer]] или одним из «облегчённых» веб-серверов, вроде [[lighttpd]], ориентированным на [[FastCGI]]. Для интеграции Tcl с [[Apache]] существует модуль [http://tcl.apache.org/rivet/ Rivet]. Существуют также такие проекты, как [http://www.tcl.tk/software/tclhttpd/ TclHttpd] и его преемник — [http://code.google.com/p/wub/ Wub], являющиеся полноценными Web-[[фреймворк]]ами. На базе нового объектного расширения языка TclOO разрабатывается веб-фреймвок [http://woof.magicsplat.com/ Woof] (Web Oriented Object Framework). Помимо использования в качестве языка реализации веб-приложений, TCL может использоваться как скриптовый язык для расширения существующих приложений. К примеру на нём пишут модуле модули для IRC бота [[Eggdrop]]. === Дистрибутивы === Все нижеперечисленные дистрибутивы распространяются свободно и собраны из компонентов, имеющих ту или иную [[Свободное программное обеспечение|свободную лицензию]]. Большинство из них — [[Кроссплатформенное программное обеспечение|кроссплатформены]] (кроме ''WinTclTk'' и ''Tcl/Tk Aqua''), хотя в [[Unix]]-системах Tcl/Tk обычно является частью дистрибутива [[Операционная система|ОС]]. * [http://www.activestate.com/Products/ActiveTcl/ ActiveTcl] *: Самый распространённый дистрибутив TCL. Подобно другим продуктам компании [[ActiveState]] включает в себя большой набор библиотек и расширений. В windows-версиях включает в себя средства интеграции с [[WSH]]. Какие либо [[Инструментальное программное обеспечение|инструментальные средства]], облегчающие жизнь программиста, отсутствуют. Фирма продаёт пакет TclDevKit содержащий средства отладки и создания автономных программ (последнее на базе технологии [[MetaKit#StarKit|StarKit]]) и Komodo — универсальное [[Интегрированная среда разработки|IDE]] для скриптовых языков, включающее средства визуального программирования [[Tk]]-форм. * [http://wintcltk.sourceforge.net/ WinTclTk] *: Более компактный, дистрибутив ориентированный на работу с [[XOTcl]] — объектно-ориентированным расширением Tcl. Список включённых в него библиотек несколько уже, чем в ActiveTcl, но «джентльменский набор» вы здесь найдёте. В этот дистрибутив входят [http://tloona.sourceforge.net/ Tloona IDE] — [[Интегрированная среда разработки|среда разработки]] традиционного типа и [http://www.xdobry.de/xotclIDE/ XOTclIde] — среда объектно-ориентированного программирования в стиле [[Smalltalk]], обе — с отладчиками. Также на сайте разработчиков свободно доступен пакет для создания единого запускаемого файла TkWrapper основанный на [http://freewrap.sourceforge.net/ FreeWrap] — технологии, альтернативной [[MetaKit#StarKit|StarKit]], основанной на простом [[ZIP]]-сжатии. Последняя на сегодняшний день версия — 8.5.6. * [http://www.equi4.com/tclkit/ TclKit] *: Это Tcl/Tk c базовым набором библиотек в одном компактном выполняемом файле. Дистрибутив создан с использованием технологии [[MetaKit#StarKit|StarKit]]. Содержит Библиотеку [[MetaKit]] позволяющую управлять содержанием этого файла. * [http://sourceforge.net/projects/dqsoftware dqkit] *: Альтернативная сборка, известная как «TclKit на стероидах», имеется несколько вариантов, отличающихся составом библиотек, поддержкой многопоточности и т. д. * [http://tcltkaqua.sourceforge.net/ Tcl/Tk Aqua] *: Дистрибутив для [[Mac OS]]. Существует три варианта: '''TclTkAquaBI''' — надмножество ActiveTCL, компактный дистрибутив '''TclTkAqua''' и минимальный набор '''TclTkAquaStandalone'''. == Достоинства и недостатки == Недостатком ранних версий Tcl/Tk, несомненно, было низкое быстродействие. Версии ниже 8-й использовали прямую интерпретацию исходного текста, однако использование [[байткод]]а разрешило эту проблему. Сейчас по быстродействию Tcl не сильно отличается от [[PHP]]<ref>[http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=tcl&lang2=php Computer Language Benchmarks Game] — сравнение производительности языков программирования. </ref>, хотя заметно уступает таким скриптовым языкам как, например, [[Python]] или [[Lua]]. Сложные или [[Критический участок кода|критические по времени выполнения участки кода]] рекомендуется выполнять в виде внешних модулей на [[Си (язык программирования)|C]]/[[C++]]. Tcl/Tk, отличает непривычность синтаксиса для программистов на «традиционных» языках. Он ближе к стандартному синтаксису [[Командная оболочка UNIX|оболочки Unix]]. Этот синтаксис может быть произвольно изменён (как и в других «программируемых языках программирования», таких как [[Forth]]<ref>Интересен симбиозе Forth и Tcl в рамках проекта [http://holonforth.com/new/tcl/holont.html HolonT], где Forth транслируется в Tcl код.</ref> или [[Common Lisp]]). Это может быть преимуществом для программиста-индивидуала или небольшой группы программистов, но делает Tcl/Tk вряд ли пригодным для использования в качестве языка общего назначения при разработке в промышленном масштабе. Хотя наличие стандартизированных расширений снижает остроту этой проблемы. Tcl может использоваться и в крупных проектах в пределах своей «экологической ниши» (встроенные скрипты, «склеивание» компонент, WEB-программирование). Хотя Tcl обладает всеми свойствами [[Функциональное программирование|функционального языка]], его интерпретатор до версии 8.6 не производил оптимизацию хвостовой рекурсии, что затрудняло использование чисто функционального стиля, уменьшало его эффективность. Впрочем, гибкость языка позволяет обойти эту проблему, реализовав подобие такой оптимизации на высоком уровне<ref>в [http://wiki.tcl.tk/1348 Tail call optimization] описана эта проблема и обозначены возможные пути её решения.</ref>. Наконец, появившаяся в тестовой версии 8.6 команда ''tailcall'' позволяет без особых проблем использовать хвостовую рекурсию. Наиболее тесная интеграция Tcl с [[графический интерфейс пользователя|графической]] [[библиотека (программирование)|библиотекой]] [[Tk]], которая зачастую используется и в сочетании с другими языками программирования — несомненное преимущество Tcl. Для создания [[GUI]] оболочек к [[консольная программа|консольным программам]] или пакетам консольных программ Tcl может оказаться наилучшим выбором. По количеству разработанных для Tcl библиотек расширений и инструментальных средств несколько уступает [[Python|Питону]], а тем более [[Perl|Перлу]], но вряд ли вы столкнётесь с их нехваткой. Чего, правда, нельзя сказать о количестве документации и литературы по Tcl, особенно — русскоязычной. == См. также == {{Портал|Свободное программное обеспечение|}} * [[Tk]] * [[Forth]] * [[SQLite]] * [[Perl]] * [[Expect]] == Ссылки == * [http://www.tcl.tk/ www.tcl.tk]{{ref-en}} — Официальный сайт * [http://wiki.tcl.tk/ wiki.tcl.tk]{{ref-en}} — Tcl Wiki: Ресурс, посвящённый Tcl * [http://tmml.sourceforge.net/doc/ tmml.sourceforge.net/doc]{{ref-en}} — Официальная документация по Tcl/Tk и стандартной библиотеке Tcl * [http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html]{{ref-en}} — Учебник по Tcl 8.5 * [[:en:b:Tcl Programming]] {{ref-en}} — Викиучебник «Программирование на TCL» * [http://pleac.sourceforge.net/pleac_tcl/index.html pleac.sourceforge.net/pleac_tcl]{{ref-en}} — PLEAC-Tcl — Коллекция решённых на Тикле задач (удобна для сравнения с другими языками) === На русском языке === * [http://www.opennet.ru/links/sml/36.shtml www.opennet.ru/links/sml/36.shtml] — Ссылки на русскую документацию * [http://community.livejournal.com/ru_tcl/ community.livejournal.com/ru_tcl] — Сообщество программистов на Tcl * [http://www.cs.tut.fi/~yk/ns2ru/tcl.html www.cs.tut.fi/~yk/ns2ru/tcl.html] — Краткое введение в TCL * [http://tclstudy.narod.ru/index.html tclstudy.narod.ru/index.html] — Уроки для самостоятельного освоения tcl и tk * [http://www.cs.tut.fi/~yk/ns2ru/otcl.html www.cs.tut.fi/~yk/ns2ru/otcl.html] — Введение в OTCL ; Блоги посвящённые TCL * [http://geomapx.blogspot.com/search/label/Tcl geomapx.blogspot.com] — Описание некоторых компонент фрэймворка для AOL Server, патчи для tclsqlite и AOL Server, библиотеки и скрипты. * [http://etcl.ru/ etcl.ru] — Про Tcl/Tk от Evolane и его применения в простых задачах ==== Статьи и Обзоры ==== * [http://www.osp.ru/os/1998/03/179470/ Сценарии: высокоуровневое программирование для XXI века] - статья Джона Остераута (создателя Tcl) о сценарных языках. * [http://www.russianenterprisesolutions.com/techno/tcl.html Сергей Бобровский, Так-тикль — язык системной интеграции ], PC/Week RE, 1997 * [http://www.itc.ua/article.phtml?ID=1228 Tcl/Tk — «двойной чай» для любителей кофе], статья Андрея Зубинского в «Компьютерном Обозрении», № 7, 23 — 29 февраля 2000 г. * [http://itc.ua/search/all/%D0%B4%D1%80%D0%B5%D0%B2%D0%BD%D1%8F%D1%8F%20%D0%BD%D0%BE%D0%B2%D0%B0%D1%8F%20%D0%B1%D1%83%D0%B4%D1%83%D1%89%D0%B0%D1%8F Древняя, новая, будущая], цикл статей Андрея Зубинского в «Компьютерном Обозрении». * [http://www.citforum.ru/database/postgres/tcl.shtml Доступ к PostgreSQL из программ на языке Tcl] — статья на [http://www.citforum.ru/ CitForum] е * [http://www.ibm.com/developerworks/ru/library/au-tcldsktop/ Вильям Б. Циммерли. Технология Tcl] — Используйте Tcl/Tk для организации рабочего стола и автоматизации вашей работы === Приложения === * [http://openacs.org/ openacs.org]{{ref-en}} — [[система управления содержимым]] вебсайтов с богатыми возможностями расширения ([[CMF]]) на языке Tcl, расширенном [[XOtcl]]. Работает совместно с [[AOLServer]] * [http://code.google.com/p/ucome/ Ucome]{{ref-en}} — более компактная Tcl [[система управления содержимым|CMS]]. * [http://code.google.com/p/wub/ Wub] — веб-фреймворк на Tcl, наследник [[HTTP]]-сервера TclHttpd * [http://www.project-open.org/ project-open]{{ref-en}} — система групповой работы c веб-интерфейсом, работающая под управлением AOLserver. * [[Html Viewer 3]] — минималистичный web-браузер, написанный на Tcl/Tk * [http://simpledevlib.sourceforge.net/ The Simple Development Library]{{ref-en}} — библиотека полезных утилит для разработки Tcl/Tk-проектов. * [[AOLServer]] - web-сервер фирмы [[AOL]] со встроенным Tcl. * [http://wiki.tcl.tk/2090 NaviServer] - web-сервер написанный на Си и Tcl. * [http://tcl.apache.org/rivet/ Rivet] - модуль Tcl для Apache. * [[AMSN]] - программа с открытым исходным кодом для мгновенного обмена сообщениями * [[MacPorts]] - система для установки программного обеспечения, распространяемого в исходных кодах, для операционной системы Mac OS X. * [[http://tclmon.sourceforge.net/ | TclMon]] - система мониторинга сетей == Книги == === На русском языке === <!--* {{книга |автор = Брент Б. Уэлш, Кен Джонс, Джеффри Хоббс |заглавие = Практическое программирование на Tcl и Tk |оригинал = Practical Programming in Tcl and Tk |ссылка = |издание = 4-е изд |место = М. |издательство = [[Вильямс (издательство)|«Вильямс»]] |год = 2004 |страницы = 1136 |isbn = 0-13-038560-3 }} дублирует следующую книгу с потерей ISBN перевода --> * Брент Б. Уэлш, Кен Джонс, Джеффри Хоббс «Практическое программирование на Tcl и Tk», ISBN 5-8459-0661-X, : оригинал: Brent Welch, Ken Jones, Jeffrey Hobbs «Practical Programming in Tcl and Tk», ISBN 0-13-038560-3 ([http://www.beedub.com/book/ электронная версия]<ref>полностью доступно первое издание, выборочно, более новые</ref>) ([http://derlab.ru/?page/tcl Частичный перевод]) * Москвин П. В. «Азбука TCL», ISBN 5-93517-130-9 * Алексей Петровский, Командный язык программирования TCL (Tool Command Language), ISBN 5-901321-16-2 === На английском языке === * Clif Flynt «Tcl/Tk, Second Edition : A Developer’s Guide», ISBN 1-55860-802-8 : 1-е издание «Tcl/Tk for Real Programmers», ISBN 0-12-261205-1 * John K. Ousterhout, «Tcl and the Tk Toolkit», ISBN 0-201-63337-X * Mark Harrison, Michael McLennan, «Effective Tcl/Tk Programming. Writing Better Programs in Tcl and Tk», ISBN 0-201-63474-0 * J. Adrian Zimmer «Tcl/Tk For Programmers», ISBN 0-8186-8515-8 * «Tcl/Tk Cookbook» from Lakshmi Sastry Advanced Interactive Systems Group([http://www.dci.clrc.ac.uk/Publications/Cookbook/ электронная книга]) * Salvatore Sanfillipo «Tcl Wise. Guide to the Tcl Programming Language» ([http://www.invece.org/tclwise/ первые 9 глав on-line]) * Paul Raines, Jeff Tranter «Tcl/Tk in a Nutshell: A Desktop Quick Reference», ISBN 1-56592-433-9 * Chad Smith «[incr Tcl/Tk] from the Ground Up», ISBN 0-07-212106-8 * David Maggiano «CGI Programming with Tcl», ISBN 0-201-60629-1 * J. M. Ivler, Kamran Husain, «Cgi Developer’s Resource: Web Programming in Tcl and Perl», ISBN 0-13-727751-2 == Примечания == {{reflist|2}} {{Языки программирования}} {{Хорошая статья|Компьютер}} [[Категория:Языки программирования семейства Tcl]] [[Категория:Скриптовые языки]] [[Категория:Объектно-ориентированные языки программирования]] [[Категория:Свободные компиляторы и интерпретаторы]] [[bg:Tcl]] [[bug:Tcl]] [[ca:Tcl]] [[cs:Tcl]] [[de:Tcl]] [[en:Tcl]] [[eo:Tcl]] [[es:Tcl]] [[et:Tcl]] [[fi:TCL]] [[fr:Tool Command Language]] [[gl:TCL]] [[he:TCL]] [[is:Tcl]] [[it:Tcl]] [[ja:Tcl/Tk]] [[ko:Tcl]] [[la:Tcl]] [[ms:Tcl]] [[nl:Tcl]] [[no:Tcl]] [[pl:Tcl]] [[pt:Tcl]] [[ro:Tcl/TK]] [[sr:Tcl]] [[sv:Tcl]] [[tg:Tcl]] [[tr:Tcl]] [[uk:Tcl]] [[vi:Tcl]] [[zh:Tcl]]'
Была ли правка сделана через выходной узел сети Tor (tor_exit_node)
0
Unix-время изменения (timestamp)
1294931259