Tcl

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

Tcl (от англ. tickling — щекотание, тикль) — когда-то популярный среди бородатых дядек и тетек программируемый язык метапрограммирования, позволяющий запрограммировать все то, что можно напрограммировать на Си, находясь при этом в дугу пьяным. Из-за данной особенности язык очень любим среди работников всяких НИИ, РАН и прочих CERNов. А еще наркоманами, пишущими на TCL настольные приложения, он обычно упоминается в связке с убогим графическим интерфейсом Tk в виде англоязычного мема — Tcl/Tk. Однако следует отметить, что в последнее время сообщество кардинально понизило унылость интерфейса Tk[1] — они выкинули Tk нахер и приделали биндинги к Qt, GTK, FLTK и даже написали NexTk.

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

Язык был создан профессором Остераутом во времена работы в альма-матери LSD и BSD. Признаков употребления веществ профессором во время создания Tcl не обнаружено. Ну, кроме самого факта создания Tcl. Позже создатель пытался внедрить язык в компанию Sun Microsystems, но не фартануло. Вместо этого Sun Microsystems придумали Яву. Вы не поверите, но потом была сделана реализация тикля уже на самой яве, и притом не одна. Фон Нейман вращается в гробу до сих пор.

Также одно время тикль успешно применялся для создания погремушек для недоадминов RedHat Linux — на нем был сделан гуй для управления сервером, службами и пакетами.

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

По мнению 95% быдлокодеров, синтаксис Tcl уродлив невообразимо, однако позволяет успешно программировать будучи сильно подшофе, причем программа потом будет работать.

Особо лютую ненависть язык вызывает среди лисперов, ввиду наличия нескольких типов скобок, применяемых для оформления программ. В отличие от Lisp-a в программы на Tcl можно вписывать еще квадратные и фигурные скобки.

Наличие макросов и чуть более чем одной системы объектного ориентирования понижают ЧСВ лисперов в 9 раз.

Самый бородатый лиспер, не осиливший синтаксис Tcl — Столлман. В своей громогласной речи «Tcl не нужен» Столлман не побрезговал показать свое ЧСВ, упомянув свой текстовый редактор, и обозначил трудности восприятия синтаксиса Tcl в сообществе «Мы не быдло юникс». После этого эпик фэйла Столлман люто, бешено возненавидел Остераута и позволил себе прилюдно обозвать его жлобом[2].

Так выглядит Hello world:

puts "Hello, World!"

А можно писать и вот так:

set a 118;set b -399;set c 467;set d -128;set e -229;set f 260;set g -111;set h 18;set q [scan "жопажопа" %c%c%c%c%c%c%c%c];set r {};foreach x $q {append r [format %c [incr x [incr a [incr b [incr c [incr d [incr e [incr f [incr g $h]]]]]]]]]};puts $r

или

proc < 1\ 0\ {l\ ""} {foreach O [split $0 $l] {append l [format %c [expr {[scan $O %c]+$1}]]};set l};return [< -1 {зпрб}]

GUI[править]

Одной из самых весомых фич языка является то, что он позволяет не просто написать программу, находясь в дугу пьяным, но еще и прикрутить к ней интерфейс пользователя, который, скорее всего, будет еще более страшен, чем собственно исходный код программы. Связано это с тем, что основной графический тулкит для TCL (Tk) использует старую как говно мамонта и страшную как старая вьетнамская проститутка тему Motif. Естественно, что на неподготовленную психику программы, написанные на Tcl/Tk, оказывают достаточно негативное влияние, после чего поциенты чаще всего начинают фапать на Qt или GTK+.

Особо негативное влияние на быдлокодеров оказывает исходный код хорошей Tk-программы, так как прописывать все виджеты вручную считается моветоном для программиста на tcl. Программы строятся динамически посредством написания обработчиков словарей и списков с параллельным использованием макр для еще более устрашающего вида велосипедов и придания квадратным колесам более сюрреалистических форм.

Впрочем, Tk можно использовать не только с тиклем, но и с кучей других языков, благо биндингов море (C, C++, Python, Ruby, Perl, Common Lisp — далеко не полный список), а консольную прогу можно обернуть напрямую из тикля.

В умелых руках Tk выглядит вполне нормально, так как давно уже был расширен до Ttk (темизированный Tk), из-за чего программы на сабже не отличимы от нативных.

Tcl vs Lisp[править]

Один из самых интересных срачей, которые много раз возникали на LOR'е благодаря некоторым активистам (скорее всего, троллям). Основоположником срача можно считать дедушку-Штоллмана, который так и не смог осилить лишпек с большим количеством шкобок. Адептам BSD и ЛСД чаще всего просто похуй. Смак самого по себе холивора состоит в том, что tcl и тиклеры одинаково нелюбимы лиспо-илитой (обычно фапают на CommonLisp или Scheme), лиспо-хипстерами (Clojure) и школьниками-штангистами (адепты Haskell). CL-щики не любят tcl за то, что тот имеет много скобочек, гораздо более развитую ООП-систему в лице XOTcl и очень мощные макры (фактически все программы на «тикле» — текст, в который осуществляются подстановки и вычисления перед тем, как он попадает в JIT). Схемщики не любят из-за наличия батареек и биндингов ко всему подряд и гнобят слабой реализацией ФП (лямды, замыкания, лень, каррирование — все приходится реализовывать через костыли и велосипеды). Лиспохипстеры тыкают палочкой с криками «не нужно», фапают на крутость JVM, за что и огребают от остальных. Штангисты просто смотрят на все это как на говно, молятся на жесткую типизацию и не понимают код tcl чуть менее, чем полностью.

Что интересно — программы на tcl могут быть более лаконичны, чем на lisp-family языках, но при этом — гораздо более запутанными, нежели код Haskell или Erlang, так как код в tcl представляется неотделимым целым от данных. Иными словами — всё есть строка. В рамках данной концепции в строку можно запихать любое действие, а любое действие может быть результатом вычисления, а результат вычисления — функцией, а функция — результатом динамической перегрузки оператора средствами макры, а перегрузка — результатом подстановки и выполнения… Благодаря этому из строки «Жопажопажопажопа!!!» матерые тиклеры и научились получать «Hello, world!».

Особый баттхёрт у неподготовленных быдлокодеров случается, когда tcl-код начинает перемешиваться с tk-кодом, сдобренным макрами, перегрузками и динамически-формированным кодом (когда из «жопажопажопажопа» получается не просто надпись на чёрном экране, а вполне себе сносное gui-приложение). Стоит отметить, что код на tcl/tk считается тем качественнее, чем более упорот алгоритм и, соответственно, менее он понятен не травмированной веществами психике. Хорошая tcl-программа выстраивает из списков, словарей и других данных код, который в свою очередь выстраивает код, который конструирует интерфейс и прописывает реакции виджетам. На такие джедайства в столь мизерном количестве строк лишпик Штоллмана не способен.

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

Web[править]

Давным давно для веб-сервера Apache было понаделано расширений, позволяющих использовать тикль для создания динамических страниц: http://tcl.apache.org/rivet/, http://tcl.apache.org/websh/. Совсем, как этот ваш PHP.

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

А еще помимо упомянутых выше негритянских балалаек есть разработки и для белых людей: http://www.aolserver.com/.

Интересные факты[править]

  • Наиболее известный мем, относящийся к Tcl/Tk — самый продвинутый в интернетах Jabber-клиент — tkabber. Интерфейс ткаббера доставляет массу лулзов пользователям всяких говно-квипов своей убогостью. Поэтому пользователи tkabber-а не перестают терзать авторов проекта вопросом «Почему Ткаббер такой страшный?».
  • Большой и толстый энтерпрайз также давно и сильно любит тикль. Например, Oracle, встроивший свою реализацию тикля в свою же БД аж по самые помидоры.
  • GUI-приложения, написанные на Tcl/Tk, под Яблоком тоже ужасны.
  • Анонимные аналитики ЛОРа утверждают, что GUI-программы на Tcl пишутся в 9 раз быстрее, чем на С++[3].
  • Количество вакансий для Tcl-программистов в этой стране есть величина постоянная, не превышающая количества букв в названии языка. В отличие от всего остального белого мира, где данная величина иногда может зашкаливать за 9.
  • Язык позволяет объявлять переменную с пустым именем. В эту переменную можно записать пустое значение. Хранится все это будет в пустой ячейке памяти. Можно, кстати, и не пустое, и даже целый массив, причём это реально используется.
  • Присваивание обозначается не «=» или «:=», а командой set. Классика жанра — «set set set» — создать переменную с именем set и присвоить ей значение — строку «set».
  • В Tcl можно запрограммировать деление на ноль.
  • Во избежание актов лютой ненависти со стороны быдлокодеров серверы проекта спрятали на секретной базе Dharma Initiative на островах Токелау в Тихом океане.
  • Во времена царя Гороха на тикле пейсались руками скрипты для эмулятора этого вашего ворлдофваркрафта в неофициальной версии сервера.
  • Автоматизация при разработке и тестировании микросхем, понапиханных в эти ваши компьютеры, мобильники и прочие айпэды, пишется чуть менее, чем полностью именно на тикле, только тссс!
  • В некоторых языках есть биндинги к библиотеке Tk.
  • Тикль для скриптинга юзает натуральный консольный кликер Expect
  • На Tcl пишутся металлические тетки (IVR), живущие на access-серверах Cisco
  • Если в играх серии The Elder Scrolls, а также в Fallout 3 и Fallout New Vegas, открыть консоль и набрать tcl, то персонаж сможет проходить сквозь текстуры.
  • Если при написании Tcl забыть переключить раскладку с русского, получится Есд.

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

Примечания[править]

  1. Кстати, унылость Tk тоже заметно уменьшилась...
  2. Stallman, taking advantage of an audience microphone, disrupted the proceedings with a tirade against panelist John Ousterhout, creator of the Tcl scripting language. Stallman branded Ousterhout a «parasite» on the free software community
  3. В современных версиях Tcl/Tk есть Themed Tk (ttk) виджеты. С ними интерфейс под виндой выглядит так же, как у любой другой виндовой программы без скинов, в соответствии с выбранной темой для XP/Висты. По быстродействию голый интерфейс (который ничего не делает) также от других программ не отличается. А тормозит только в случае криво написанного быдлокода. Но Ткаббер до сих пор таки страшный.
Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикFortran (Профессор)
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++Scala
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёздыПрограммист (существо)
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplaceФреймворкБыдлокодIndex.phpОхота за жукамиКуМирКлеточный автомат
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCampUnity3DКнижный PythonMallocСвязный списокSOLIDООПУказательNULLWeLang++
ЛюдиИлья КанторЮрий КлючевскийЭдуард ЛаасЭдвард СноуденСеймур Пейперт
Прочее++i + ++iDeadline%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодач