Изучаю TCL

Учу «Тикль» потихонечку — вечерами, урывками. Язык нравится очень простым синтаксисом, который позволяет делать крутые штуки — всё в языке считается строкой, а вопросом интерпретации строки занимается код. Это даёт возможность, например, расширять язык по необходимости.

Попробую пояснить как это работает. В данном случае все три параметра, передаваемых команде puts эквивалентны:

puts Hello; # это строка
puts "Hello"; # это тоже строка
puts {Hello}; # и это строка!

То есть фигурные скобки — это не «блок кода», а строка, правда со своими особыми правилами интерполяции. Это, вместе с конструкциями изменения уровня выполнения и позволяет создавать собственные дополнения к языку. Например, добавил в язык конструкцию unless (это такой if, только проверяется не истинность, а ложность условия):

proc unless {condition body} {
    ;# uplevel — конструкция, позволяющая выполнить блок выше по стеку
    ;# то есть, в данном случае, мы выполняем код в контектсе вызвавшего
    ;# процедуру unless кода, что позволяет увидеть все переменные, которые там определены
    uplevel [list if !($condition) $body]
}

set var false

;# Это наша новая команда
unless { $var } {
     puts "False: $var" ;# напечатает «False: false»
}

set var true

;# А это обычный if, которые есть в языке
if { $var } {
    puts "True: $var" ;#  напечатает «True: true»
}

Надо бы, конечно, что-то пописа́ть, чтобы лучше понять язык, задумки есть, скоро приступлю.

Поделиться
Отправить
11 комментариев
vladon

А зачем? Какой смысл?

Арефьев Тимур

У вас поиск по блогу сломался.

Евгений Степанищев (bolknote.ru)

Комментарий для vladon:

А зачем? Какой смысл?

Что зачем? Не понимаю.

Евгений Степанищев (bolknote.ru)

Комментарий для Арефьев Тимур:

У вас поиск по блогу сломался.

В чём это выражается?

PastorGL

тикль безумно крут, долгое время был моим любимым языком.

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

Евгений Степанищев (bolknote.ru)

Комментарий для PastorGL:

Тикль выглядит простым, но писать на нём без ТиКея мне нечего, а вот ТиКей пока идёт сложно — только я начал понимать что к чему, как выяснил, что теперь надо писать на Tlk — он интереснее и более развитый.

Евгений Степанищев (bolknote.ru)

Комментарий для PastorGL:

Tlk — он интереснее и более развитый.

На Ttk то есть.

Сергей

Самое вкусное в tcl это команда trace — возможность повесить callback на изменение переменной (включая массив) очень удобно для GUI (эдакий MVC для бедных).

Ну и язык без ключевых слов вообще (но с ключевыми скобками) это круто.

Евгений Степанищев (bolknote.ru)

Комментарий для Сергей:

Ну и язык без ключевых слов вообще (но с ключевыми скобками) это круто.

Ага, мне тоже это очень понравилось :)

Арефьев Тимур

Например, пишу в поиске «сова», найдено 0 заметок.

Евгений Степанищев (bolknote.ru)

Комментарий для Арефьев Тимур:

Это не у меня сломалось что-то, а у Яндекса. Надо на Гугл переходить.

Популярное