- PVSM.RU - https://www.pvsm.ru -

Tcl — как скриптовый язык для университетских проектов стали использовать по всему миру

Tcl — как скриптовый язык для университетских проектов стали использовать по всему миру - 1

Одна из ключевых облачных фич — масштабирование (о возможностях облака с примерами из реального бизнеса мы расскажем 30 октября, подключайтесь [1]). Настраивать масштабирование, а также балансировщики нагрузки и виртуальные машины можно различными способами. Один из нетипичных вариантов — использование языка Tcl.

Tcl (Tool Command Language) разработал программист Джон Оустерхаут в середине 1980-х. Tcl достаточно универсален — он помогает управлять сетевыми устройствами и работать с облачными интерфейсами.

В начале девяностых вокруг решения сформировалось серьезное академическое комьюнити. Затем сообщество стало шире — участники разрабатывали новые расширения и средства для работы с БД.

История языка насчитывает уже больше тридцати лет, и сегодня мы расскажем о том, как продвигалось его развитие.

Первые шаги

Джон Оустерхаут получил степень бакалавра по физике в Йельском университете и стал доктором в области компьютерных наук в Университете Карнеги — Меллона. После завершения учёбы Оустерхаут преподавал в Калифорнийском университете в Беркли, где участвовал в развитии сетевой операционной системы Sprite и первой журнально-структурированной файловой системы.

Позже Оустерхаут разрабатывал инструменты для проектирования интегральных схем. Но для каждого из них приходилось кастомизировать командный язык, что увеличивало время разработки.

Поэтому в 1987 году Оустерхаут решил написать свой простой и универсальный язык с расширяемыми базовыми возможностями — так зародилась идея языка Tcl. Работу над ним разработчик начал в начале 1988 года, а уже весной использовал первую его версию в текстовом редакторе. Также он спроектировал Tk (Tool Kit), который дополняет Tcl инструментами для построения графических интерфейсов.

Впоследствии инженер использовал Tcl/Tk в нескольких учебных приложениях, а в 1990 году представил доклад об инструменте на престижной компьютерной конференции USENIX. После выступления Оустерхаута проектом заинтересовались многие разработчики в академическом сообществе. Тогда автор Tcl/Tk решил передать свое детище в open source.

Что интересно, на той же USENIX доклад Оустерхаута посетил инженер Дон Либес. Он давно планировал разработать программу для автоматизации интерактивных Unix-приложений, но проект тормозило отсутствие подходящего языка. Tcl помог ему реализовать Expect [2] для автоматизации смены паролей и управления маршрутизаторами, которое стало первой широко распространённой имплементацией Tcl.

Tcl/Tk набирает обороты

В период с 1989 по 1993 годы количество пользователей Tcl/Tk выросло до десятков тысяч. Дело в том, что инструментарий Tcl/Tk упростил разработку графических пользовательских интерфейсов под Unix. Приложения можно было написать на Tcl, не прибегая к другим языкам. Так, Tcl стали использовать в самых разных отраслях — от биржевой торговли до научной визуализации и автоматизации производства.

В это же время вокруг языка активно формировалось комьюнити. Его участниками стали инженеры Марк Диханс и Карл Лехенбауэр. Они написали TclX [3] — первое свободно распространяемое расширение Tcl для работы с файлами и датами. Многие решения TclX позже вошли в базовые релизы Tcl.

В 1993 году другой участник сообщества Майкл МакЛеннан написал расширение [incr Tcl] [4] с инструментами для объектно-ориентированного программирования на Tcl/Tk. Появлялись и другие приложения, например, BLT [5], которое добавило средства для визуализации, Sybtcl [6] и Oratcl [7] для работы с базами данных. Эти расширения были представлены на первой конференции Tcl, проведенной летом 1993 года, и впоследствии ставшей регулярной.

Со временем даже релизы Tcl синхронизировались с датами проведения конференций. Там Оустерхаут презентовал новую версию языка, а участники голосовали за добавление или удаление тех или иных функций простым поднятием руки. Хотя у некоторых членов комьюнити возникали сомнения в объективности такого подхода. Они отмечали, что часто у Оустерхаута уже было решение по вынесенному на голосование вопросу, поэтому он «не замечал» некоторые поднятые руки. Такой процесс голосования даже получил [8] собственное название — Oustervote.

Сообщество Tcl обменивалось опытом не только на конференциях. Оустерхаут запустил email-рассылку для комьюнити, которая позже переросла в форум. Группа comp.lang.tcl [9] стала местом для общения и обсуждения разных тем, посвящённых Tcl.

Tcl покидает академию

В 1994 году Оустерхаут решил уйти из Калифорнийского университета и принял предложение о работе от Sun Microsystems. Инженер планировал развивать Tcl как универсальный скриптовый язык, а ресурсы компании помогли бы ему в этом.

В Sun ушла и команда, работавшая над Tcl в Беркли. Однако изначально сообщество с недоверием отнеслось к переходу Оустерхаута — в частности, звучали опасения, что Tcl/Tk может стать проприетарным языком. Однако инженер заключил соглашение с компанией, по которому библиотеки Tcl и Tk должны были остаться опенсорсными.

По мере выхода релизов Tcl в комьюнити поняли, что поддержка Sun позволяет языку развиваться быстрее, и недоверие сменилось энтузиазмом.

С появлением новых версий Tcl/Tk начал поддерживать ОС Windows 95 и Macintosh. Продолжали появляться и расширения, например, Safe-Tcl для безопасного запуска недоверенных скриптов, Jacl и TclBlend для интеграции с Java. За три года число загрузок Tcl с сайта Sun увеличилось с 2 до 5 тыс. в неделю.

Также Tcl начал использовать бизнес. Так, NBC разработала на его базе интегрированную систему управления спутниковым вещанием, а крупный производитель сетевого оборудования внедрил Tcl в свой софт.

В 1996 году директор по технологиям Sun Эрик Шмидт предложил Оустерхауту выделить команду Tcl в независимую команду SunScript, чтобы запустить платные версии продуктов Tcl/Tk. Оустерхаут согласился, однако в 1997 году Шмидт покинул Sun. Руководство компании не поддержало развитие нового подразделения, поэтому SunScript пришлось распустить. Команда решила сосредоточиться на разработке бесплатных продуктов и сделать опенсорсными решения, которые должны были стать коммерческими — например, плагин SpecTcl и расширение WebTk. Реструктуризация также высвободила ресурсы для новых проектов, связанных с Java. Например, команда начала разработку пакета для интеграции с интерпретатором Tcl.

Однако со временем поддержка командного языка внутри Sun начала слабеть. Компания полностью сосредоточилась на развитии Java. По словам бывших сотрудников корпорации, руководство считало его перспективным инструментом в конкурентной борьбе против Microsoft.

Свой отпечаток наложила и история с Ричардом Столлманом. В 1994 году он опубликовал пост «Почему вам не следует использовать Tcl». Разработчик критиковал синтаксис языка и его проблемы с производительностью. Столлман утверждал, что Tcl больше подходит для нишевого использования и не сможет стать таким же популярным, как, например, Python. Есть мнение, что «гнев» основателя движения свободного программного обеспечения вызвало заявление Sun Microsystems о том, что Tcl может стать универсальным скриптовым языком.

Сомнения касательно будущего Tcl/Tk в составе Sun были и у самого Оустерхаута. Поэтому он решил продолжать работу над языком отдельно от компании.

Годы Scriptics

В январе 1998 года Оустерхаут основал компанию Scriptics вместе с Сарой Дэниелс, которая стала вице-президентом по продажам и маркетингу. В скором времени к ним присоединилось более половины команды, работавшей над Tcl в Sun. Компания начала разрабатывать коммерческий продукт TclPro, который вышел в сентябре 1998 года под лицензиями Named User и Shared Network. При этом Scriptics продолжила развитие опенсорсной версии Tcl/Tk. В 1998-м компания выпустила несколько патчей для Tcl 8.0, а в апреле 1999-го вышла версия языка, разработанная внутри Scriptics — Tcl/Tk 8.1. Релиз получил поддержку Юникода и новый пакет регулярных выражений.

Примерно в то же время Tcl/Tk получил награду ACM Software System Award и премию USENIX Software Tools User Group (STUG), а число еженедельных загрузок достигло планки в 12 тыс.

Независимая команда

В 1999-м в Scriptics начали разрабатывать программы на Tcl/Tk. Чтобы обозначить смену направления и расширение портфолио, компанию переименовали в Ajuba Solutions. Первый продукт — B2B-сервер — компания выпустила в 2000 году. Но в то же время произошел «крах доткомов», что помешало ему стать успешным.

Тогда многие бизнесы объединялись друг с другом, чтобы выжить, и Оустерхаут решил последовать их примеру. Он нашел потенциального покупателя — производителя CMS-решений Interwoven. Но Оустерхаут подозревал, что компанию интересует не Tcl/Tk, а XML-технологии для их CMS-продуктов, а также команда инженеров. Поэтому еще до продажи бизнеса он передал разработку ядра Tcl/Tk и TclPro в руки независимой группе программистов, получившей название Tcl Core Team.

В обязанности Tcl Core Team и по сей день входит внедрение новых функций, подготовка документации, сборка релизов и управление сайтом Tcl Developer Exchange. С 2000-го Оустерхаут не принимал активного участия в развитии проекта. Многие программисты из команды Scriptics/Ajuba Solutions ушли в другие компании, где руководили отделами по внедрению Tcl/Tk, оставаясь в составе Tcl Core Team.

Первая версия Tcl/Tk под руководством Tcl Core Team вышла в сентябре 2002 года. Это была версия 8.4, в которой появился упаковщик Starkit [10], упростивший распространение Tcl-приложений. В декабре 2007-го вышла версия 8.5, в которой были добавлены новые типы данных, репозиторий расширений и поддержка лямбда-выражений. Релиз 8.6 в 2012-м ознаменовал появление Tcl Object Oriented (TclOO).

Что мог предложить язык

Писать код на Tcl было до смешного просто. Каждая строка представляет собой отдельную команду, которая следует модифицированной парадигме UNIX: «Команда должна решать всего одну задачу, но делать это хорошо». Первое слово отражает имя (название), а все последующие — аргументы. Команды разделяют переводом строки или точкой с запятой, а аргументы — пробелами.

Программы на Tcl могут выполняться без компилирования, хотя профильный компилятор существует. Сам по себе язык расширяемый, также в Tcl реализована [11] модель событийно-ориентированного программирования, интегрированная с библиотекой ввода-вывода, что облегчает написание сетевых программ. Например, следующая программа представляет собой параллельный TCP-сервер, который выводит текущее время клиенту.

socket -server handler 9999
proc handler {fd clientaddr clientport} {
    set t [clock format [clock seconds]]
    puts $fd «Hello $clientaddr:$clientport, current date is $t»
    close $fd
}
vwait forever

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

Tcl сегодня

Когда-то в комьюнити программистов Tcl/Tk пророчили будущее «универсального языка» в интернете. Это будущее не наступило, однако многие разработчики до сих пор пишут на нем код, особенно в специализированных областях — например, для управления космическими спутниками и в автоматизации электронного проектирования (EDA).

Tcl/Tk продолжают использовать для построения графических интерфейсов. Достаточно вспомнить tkinter [12] — обёртку Python для Tk, а в Git встроена графическая утилита gitk [13], которая написана на Tcl/Tl, также есть расширение TclCloud [14] для автоматизации работы с виртуальной инфраструктурой.

Язык продолжает развиваться — в сентябре этого  года вышла версия [15] Tcl/Tk 9.0, которая, по сути, стала первым крупным релизом за 27 лет. Например, в неё вошла поддержка 64-битной архитектуры. Несмотря на то что Tcl уже не так активно используют, у него его есть будущее. Есть мнение, что на основе Tcl можно построить язык, который сможет соперничать с Ruby, Lisp и Python. Одна из возможных сфер для конкуренции — работа с большими языковыми моделями. Так, язык вполне можно использовать для управления промптами при работе с LLM.

Но даже если Tcl останется исключительно нишевым языком, им по-прежнему будут пользоваться энтузиасты. Они продолжат писать [16] на нем непрактичные, но интересные DIY-проекты вроде приложения на Android для управления кофемашиной в офисе.

Автор: randall

Источник [17]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/400714

Ссылки в тексте:

[1] подключайтесь: https://mws.ru/events/oblaka-v-dejstvii-webinar301024/?utm_source=habr.com&utm_medium=utm_campaign_webinar301024&utm_content=article&utm_term=webinar301024

[2] Expect: https://expect-lite.sourceforge.net/

[3] TclX: https://en.wikipedia.org/wiki/TclX

[4] [incr Tcl]: https://wiki.tcl-lang.org/page/incr+Tcl

[5] BLT: https://blt.sourceforge.net/

[6] Sybtcl: https://wiki.tcl-lang.org/page/Sybtcl

[7] Oratcl: https://oratcl.sourceforge.net/OraTcl_Users_Guide_and_Reference.pdf

[8] получил: https://wiki.tcl-lang.org/page/Oustervote

[9] comp.lang.tcl: https://groups.google.com/g/comp.lang.tcl

[10] Starkit: https://www.equi4.com/starkit/

[11] реализована: https://arc.net/l/quote/teubvads

[12] tkinter: https://docs.python.org/3/library/tkinter.html

[13] gitk: https://github.com/git/git/blob/master/gitk-git/gitk

[14] TclCloud: https://wiki.tcl-lang.org/page/TclCloud

[15] вышла версия: https://www.tcl-lang.org/software/tcltk/9.0.html?post=new

[16] продолжат писать: https://news.ycombinator.com/item?id=41092016

[17] Источник: https://habr.com/ru/companies/mws/articles/853166/?utm_campaign=853166&utm_source=habrahabr&utm_medium=rss