LINUX.ORG.RU

Tcl в 2016 году.

 ,


3

3

Вроде неплохой язык, выучился довольно просто, батареек огромное количество на все случаи жизни, работает почти везде, в т.ч. и под виндой, есть Tk чтобы быстро накидать простой гуй. Все меня в нем устраивает, но почему он так мало распространён? Ведь есть же всё, чтобы писать код и решать задачи. Не загнется ли он в ближайшее время из-за малого сообщества и падающей популярности? Что с ним не так?

★★★★

Ответ на: комментарий от tailgunner

нужны нормальные структуры данных. А их в Tcl просто нет.

Да ладно, есть там всякие структуры. Просто ты не осилил наверное.

Xenius ★★★★★ ()
Ответ на: комментарий от Xenius

есть там всякие структуры

«Кому и кобыла невеста» (ц)

tailgunner ★★★★★ ()

Tcl

Tcl прекрасный язык для рядовых задач. Уже лет 5 его использую, в сравнении с остальными языками, Tcl любимый. Потому что гибкий. Потому что очень высокая скорость разработки. Полностью уверен, что то, как вы оперируете языком зависит от практики. Иногда можно попросту и не понимать код, потому что сложный и разбираться в нем требует высокие затраты. Постоянно использую Tcl/Ttk в связке с phantom.js - пишу парсеры и боты. Первое выступает в качестве роутера+UI. Две сотни строк кода на Tcl/Tk, сотня на JS - получается отличный парсер Авито, конфигурируемый и сохраняющий состояния, так же можно настроить таргетинг. Хороший результат? Хороший. На это ушел день, кстати. Малоопытный программист не сможет продумать верную структуру кода. Кто-то будет писать партянки кода, простого как земля, а кто-то будет делать это с головой - сделает с hooks, как, например, это сделано в Tkabber, будет инкапсуляция и полиморфизм. Tcl позволяет делать хаки почти так же круто, как в Js, это огромное преимущество, когда требуется реализовать несложную задачу. За все время я только один раз почувствовал дискомфорт, это случилось когда код разросся до 5000 строчек. Я не продумал структуру и вообще скандачка начал писать, вот и попал в тупик. Такие ситуации бывают с любым языком, тут уже почти полностью играет человеческий фактор. Предпочитаю Tcl всем другим скриптовым языкам из-за скорости разработки и гибкости

anonymous ()

Потому что сложные конструкции на тикле кумарятся сложно. Где там кто куда подставляется и т.д.

А в остальном язык неплох.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от tailgunner

«Кому и кобыла невеста» (ц)

Опиши чего конкретно тебе не хватило

Xenius ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

Ну, у железячников tcl - это фетиш и стандарт де-факто для всяческой автоматизации разработки.

Kosyak ★★★★ ()
Ответ на: комментарий от Xenius

Вернуть из функции умеренно сложный ассоциативный массив.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Есть пруф на невозможность использовать в твоем случае array get|array set?

anonymous ()

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

http://imgur.com/jNPaiOF http://imgur.com/5bWghBl

Первое - морда для удаленного диспетчера задач, второе программа для управления роботом с телефона.

WRG ★★★★ ()
Ответ на: комментарий от anonymous

Есть пруф на невозможность использовать в твоем случае array get|array set?

Я так и сделал, естественно.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Ну вполне нормальная практика. С выходом 8.6 использовать dick стало клево, <=8.5 - array get|set тоже неплохо.

anonymous ()
Ответ на: комментарий от anonymous

Ну вполне нормальная практика

Насколько я понимаю, ассоциативный массив встроен в язык. И если такой объект нельзя вернуть из функции, то это не язык, а смешной уродец.

tailgunner ★★★★★ ()
Ответ на: комментарий от Xenius

Разве upvar не есть то самое замыкание (обращение к параметру вышестоящей функции)?

Оно не полноценное, нельзя его вернуть или где-то сохранить. Можно нагородить лямбду с сохранением контекста в строке, но это убогость уровня цепепе.

anonymous ()
Ответ на: комментарий от anonymous

Я поимаю, что есть способы обойти это. Но я также понимаю, что невозможность вернуть ассоциативный массив - это баг в ДНК авторов языка.

tailgunner ★★★★★ ()
Ответ на: комментарий от anonymous

array - это какой-то прикол, что курили авторы? Почему dict появился только в 8.5? Как раньше то писали без него?

anonymous ()
Ответ на: комментарий от anonymous

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

anonymous ()
Ответ на: комментарий от gorky

Я знаю, просто пример фичи безальтернативно требующей поддержки рантайма привёл.

Gentooshnik ★★ ()
Ответ на: комментарий от Xenius

Это на моей практике главная (если не единственная серьёзная) проблема с Tcl на самом деле. Когда хочется странного приходится пилить расширение на C. К счастью, странного хочется крайне редко.

Gentooshnik ★★ ()
Ответ на: комментарий от pawnhearts

Низкоуровневые хаки разной степени полноценности и в CL делали. Проблема в том, что они либо как-то ограничивают, либо делают предположения (как по ссылке), что в общем то одно и то же.

Gentooshnik ★★ ()
Ответ на: комментарий от Xenius

Нет, потому что upvar из лямбды найдёт переменные из точки вызова этой лямбды, а не объявления. У upvar динамический скоуп, а у *лексических* замыканий - лексический.

Gentooshnik ★★ ()
Ответ на: комментарий от Xenius

Впрочем, на практике upvar покрывает 90% юз-кейсов лексических замыканий.

Gentooshnik ★★ ()
Ответ на: комментарий от anonymous

тикле так вовсе никакой информации о типах нет - вот тебе строка

Так вот же она, информация!

DonkeyHot ★★★★★ ()

Что с ним не так?

«Не так» выглядит арифметика и популярные структуры данных. Не то, чтобы чем-то сильно хуже, но непривычно для начинающего (освоившего пару более баззвордовых языков) пользователя. Меня, в своё время, напугали lindex и set(или expr - уже не помню). Хорошо, что я dict-а не нашёл, наверное заикался бы.

А язык роскошный, жалею, что сбежал.

DonkeyHot ★★★★★ ()

почему он так мало распространён

ну, это смотря где. Его очень любят всякие там вендоры EDA-софта (те же Synopsys, Mentor, с ними же Actel, Xilinx). Это только из тех, что я видел и которыми пользовался.

demidrol ★★★★★ ()
Ответ на: комментарий от anonymous

Оно не полноценное, нельзя его вернуть или где-то сохранить.

Что значит нельзя вернуть? Можно написать return $var где $var ранее получена с помощью upvar

или где-то сохранить

set othervar $var

Xenius ★★★★★ ()
Ответ на: комментарий от Gentooshnik

Впрочем, на практике upvar покрывает 90% юз-кейсов лексических замыканий.

Ладно, а что не покрывает-то? Можно пример конкретной задачи?

Xenius ★★★★★ ()

тикле так вовсе никакой информации о типах нет - вот тебе строка

А как жэ: puts [string is integer «123»] puts [string is double «12.3»] puts [string is boolean «yes»]

anonymous ()
Ответ на: комментарий от pawnhearts

... и получить громоздкое, тормозящее приложение с неприятным временем отклика?!

Chaser_Andrey ★★★★★ ()
Ответ на: комментарий от Chaser_Andrey

Просто докупи оперативки и проц помощнее. Тем более работать оно будет на облаке.

pawnhearts ★★★★★ ()
Ответ на: комментарий от pawnhearts

Нет, пожалуй, я сделаю более разумный выбор - сделаю ставку на классические GUI-фреймворки, которые легче и не завязаны на облаках.

Chaser_Andrey ★★★★★ ()
Ответ на: комментарий от pawnhearts

Если нужен гуй сделай его на react/angular и запускай в webkit.

Это как тот самый PHP, который можно собрать как десктопное приложение? Webkit... Жесть жи, ну.

anonymous ()
Ответ на: комментарий от Gentooshnik

Функцию возвращающую замыкание, например.

Это как?

Xenius ★★★★★ ()
Ответ на: комментарий от vvviperrr

а как же gitk

Сравни с gitg, написанном на православнейшем я/п Vala.

anonymous ()

Haskell в 2016 году

реквестирую тред с таким же содержанием

umren ★★★★★ ()
Ответ на: комментарий от anonymous

Какой забавный костыль.

  1. При создании замыкания нужно явно указывать все захватываемые переменные.
  2. Переменные в каждом скоупе где лежит переменная с замыканием свои. https://ideone.com/cZ1661 Должно быть 1 2 3 4 5

Есть альтернативное решение, где окружение складывается в специальный namespace. Это решает вторую проблему, но создаёт новую - у замыкания оказываются копии переменных, а не «ссылки» на оригиналы.

Gentooshnik ★★ ()
Ответ на: комментарий от anonymous

Всё плохо. Такое замыкание вообще делает себе своё окружение. https://ideone.com/sHZiGi

Должно быть 1 2 3 4 5 5. Это не замыкание, а лямбда с состоянием. Такое можно на Tcl в три раза проще сделать.

Gentooshnik ★★ ()
Последнее исправление: Gentooshnik (всего исправлений: 1)
Ответ на: комментарий от Gentooshnik

Это не замыкание, а лямбда с состоянием.

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

anonymous ()
Ответ на: комментарий от anonymous

херачить строки и шурудить очумелыми ручками стек вызовов.

А мне нравится. :]

Gentooshnik ★★ ()

Все меня в нем устраивает, но почему он так мало распространён?

реклама. её нет. совсем.

влияние рекламы на распространённость языка программирования можно проследить на примере python и, как альтернатива, ruby

Ведь есть же всё, чтобы писать код и решать задачи.

да, смешно смотреть, как любители python используют костыльный Tkinter, но продолжают вещать про вырвиглазность Tcl/Tk :)

Не загнется ли он в ближайшее время из-за малого сообщества и падающей популярности?

потихоньку загибается, но, в моём случае, наличие:

* охренительной вики http://wiki.tcl.tk/ , где есть даже игрушки http://wiki.tcl.tk/20801 (там можно подсмотреть интересное :)
* шпаргалки с http://pleac.sourceforge.net/pleac_tcl/index.html
* нормальные сборки tclkit с https://code.google.com/archive/p/tclkit/downloads (1.5 - 2 Мб как плата за реальную кросс-платформенность)
* и моя любимая сборка eTcl от Evolane http://wiki.tcl.tk/15260 (бережно сохранённая с умершего сайта :(

сохраняют высокий рейтинг Tcl/Tk в моём личном списке инструментария
и, да, http://wiki.tcl.tk/16867 (мелкий web-сервер с cgi на Tcl, периодически используется с завидным постоянством под tclkit)

а ещё https://habrahabr.ru/post/89919/ и https://habrahabr.ru/post/89822/ — это просто красиво :)

Что с ним не так?

set, expr и, когда-то судьбоносное решение менеджмента Sun развивать Java, а не Tcl/Tk

P.S. Tcl/Tk - это, пожалуй, единственный язык программирования, по-поводу которого даже жалко, что не начал использовать его раньше :)

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.