Учитель говорил: "Я передаю, но не создаю. Я верю
в древность и люблю ее".
Конфуций. Лунь юй
Увы, удел технического журналиста -- передавать, не созидая. Очень трудно успевать
сочетать и "передачу", и созидание даже в относительно спокойном мире
"чистой науки", а уж в бешеном потоке IT-индустрии, где "чтобы
стоять на одном месте, надо бежать изо всех сил", это просто невозможно.
Наверное, именно поэтому каждый технический журналист с особой щепетильностью
относится к своей "любимице" -- той теме, которая позволяет немного
расслабиться и отдохнуть от непрерывного калейдоскопа технологий, продуктов,
анонсов, отчетов... О "любимице" можно говорить долго, обстоятельно,
не торопясь, чем мы, собственно, и займемся (впрочем, не стоит обольщаться --
кормлением с ложечки под умиляющее сюсюканье я не утомлял даже свою дочку, когда
она была в позволительном для этого возрасте).
Tcl/Tk в ОС Windows демонстрирует
отличную поддержку всех возможностей GUI этой платформы, включая альфа-прозрачность
окон |
Итак, для соблюдения журналистской традиции достаточно. Пора приступать к
делу. Предмет нашего разговора -- кросс-платформенная среда разработки и интеграции
программ Tcl/Tk, истории и общим характеристикам которой некогда была посвящена
отдельная статья. Tcl/Tk далеко не нова (скорее даже вообще древняя, но
Учитель ведь говорил...) и по каким-то таинственным причинам незаслуженно непопулярна
на бывшем советском пространстве (о важной и очевидной причине невысокой популярности
Tcl/Tk в "сообществе сторонников лицензии GNU" в той давней статье
уже говорилось, -- судя по всему, у нас до сих пор слишком сильна вбиваемая
десятилетиями вера в святость и истинность любых слов любых бородатых идеологов).
И все-таки мы будем говорить именно о ней -- и дело не только в неотъемлемом
праве журналиста писать что хочется и даже не в личных симпатиях, которые вовсе
не скрываются. Дело в том, что за несколько прошедших лет я пытался найти нечто
новенькое, соответствующее моим скромным потребностям в "повседневном программировании"
(ну не обязательно журналисты проводят досуг в казино или за Unreal Tournament),
и ничего лучше Tcl/Tk найти не смог. От "нечто" требовалось одновременно:
мощная инструментальная поддержка (тратить время на то, что уже сделано, неразумно,
но еще менее разумно истязать себя какими-то катастрофически сложными в освоении
"хакерскими" штучками только из-за заботы о "хакерском"
имидже), кросс-платформенность (совсем отказаться от Unix-совместимых систем
не позволяет привычка, а от наивных попыток отыскать в мире этих самых систем
хоть отдаленные аналоги прикладных программ Windows удерживают опыт и здравый
смысл) и, наконец, то, что не имеет четких определений, но интуитивно понятно
-- "выразительность", "мощность", "красота" и
"удобство". Повторяю: ничего подобного Tcl/Tk найти не удалось. Есть,
без сомнения, замечательные разработки -- например Python, но все-таки "тикль"
(именно так принято называть Tcl/Tk) по ряду причин лично для меня, как для
"непрограммирующего программиста", остался вне конкуренции (выкладывать
сейчас же "на блюдечке" перечень этих причин нет никакой необходимости,
мы немного поговорим о них по ходу дела).
Рабочее место
Если каша была не из отборного... зерна, если мясо было
нарезано не достаточно мелко, если каша... прогоркла, ничего этого он не ел.
Продукты, имевшие дурной вид и запах, не ел. Плохо сваренное не ел, несвежее
не ел. Неправильно разделанное мясо не ел. Если не было соответствующей приправы,
не ел.
Конфуций. Лунь юй
К процессу изучения такой масштабной системы, как Tcl/Tk, следует достойно
подготовиться. Но здесь начинающего поджидает первая "ловушка": эта
система действительно одновременно и старая, и быстро развивающаяся -- соответственно,
она успела "обрасти" огромным количеством программ, как созданных
на ее основе, так и "сторонних" по отношению к ней, но все же "сопутствующих".
Относительно и первых, и вторых сразу стоит сделать очень важное замечание --
на протяжении своего развития Tcl/Tk прошла несколько "эпохальных"
этапов и претерпела далеко не косметические изменения. Поэтому какие-то сторонние
свободно распространяемые программы, к которым разработчики давно утратили интерес
(что вполне обычно), могут быть зависимы от версии "тикла", и, соответственно,
им требуется или модернизация, или "многоверсионная инсталляция" базовой
системы (это означает, что на один компьютер устанавливаются несколько версий
Tcl/Tk -- такое вполне допустимо). Ответ на вопрос, "целесообразна ли многоверсионная
инсталляция", естественно, зависит от ряда обстоятельств, и, тем не менее,
разумнее придерживаться простого правила: если требующая многоверсионной инсталляции
программа не уникальна (т. е. у нее есть аналоги, пусть даже не точные), небольшой,
но все-таки лишней головной боли от сопровождения нескольких версий Tcl/Tk на
одном компьютере лучше избежать. Короче говоря, будем придерживаться правила
Учителя -- "плохо сваренного и несвежего не едим".
Базовый инструментальный
набор "тиклера": расширенная консоль tkcon, интегрированная среда
Ased, средство быстрой разработки (RAD) VisualTcl |
Тот, кто учится не размышляя, впадет в заблуждение. Тот,
кто размышляет, не желая учиться, окажется в затруднении.
Конфуций. Лунь юй
Начнем мы с одного незначительного размышления (или размышления незначительными
не бывают?). Традиционные исполняемые программы содержат машинный код -- это,
как говорится, аксиома. Если, например, "заглянуть" во "внутренности"
любого exe- или com-файла текстовым редактором, то огромное количество "закорючек"
в окне программы эту аксиому подтвердит.
Tcl/Tk -- весьма скромная
в запросах к ресурсам система. Так, в "потреблении" памяти при
выполнении весьма сложных программ она сравнима с распространенным ICQ-клиентом
Miranda |
Учитель сказал: "Хотя он и прочитал триста стихотворений
“Ши цзин”, если ему передать дела управления государством, он не справится с
ними. Если его послать в соседние страны, он не сможет самостоятельно отвечать
на вопросы. Какая польза от того, что он столько прочитал?".
Конфуций. Лунь юй
Как говорил один программный персонаж из "Лавины" Стивенсона Нила,
"прошу прощения, вследствие внутренней структуры я склонен к отступлениям".
Время одного из таких отступлений пришло.
Многого прочесть о Tcl/Tk на русском языке вам не удастся -- насколько мне известно,
есть всего одна русскоязычная книга, посвященная этой среде программирования.
На английском же... книги по "тиклю" весьма дороги -- хотя бы потому,
что "тикль" используется в массе очень серьезных программных комплексов
астрономической сложности и цены (например, в системе управления жизненным циклом
изделий Unigraphics NX), и его хорошее знание, естественно, означает дополнительные
возможности, которые в отдельных странах принято прилично оплачивать. Наш же
журнал -- издание не академическое, и, хотя у этой статьи будет не одно продолжение,
99% работы по изучению системы вам придется проделать самим (иначе -- "какая
польза от того...", как сказал Учитель).
Итак, пора...
Давайте проведем первый "эксперимент". В консоли tkcons наберем
следующий текст и передадим его системе нажатием Enter: set Один 1.
В ответ система возвратит нам цифру "1". Теперь опять немного поразмышляем,
вооружившись предварительными сведениями о "проделанной работе". Использованное
слово set -- одна из многих команд "тикля", выполняющая
ряд различных действий в зависимости от числа слов и синтаксиса "предложения",
в котором она используется. Команды интерпретатор "распознает" согласно
простому принципу: первое слово -- всегда имя команды, далее до разделительного
символа следуют ее параметры. В нашем случае "предложение" предельно
простое, и слов всего три (собственно имя команды set и два параметра),
поэтому set выполняет действие создания переменной. Имя новой переменной заимствуется
из первого параметра команды (второго слова "предложения"), содержание
-- из второго параметра. Результатом выполнения команды является не только новая
переменная, но и подтверждение -- вывод содержимого переменной. Теперь мы можем
востребовать содержимое переменной с именем "тикль" второй формой
команды set : set Один. Заметьте, как умная консоль "подсветит"
второе слово в команде, обнаружив, что в системе есть такая переменная. Собственно,
на этом сведения заканчиваются, можно поразмышлять. И есть о чем -- хотя бы
о том, что "тикль" допускает в именах переменных не-ASCII-символы.
Нечасто такое свойство встречается в языках программирования. Более того, Tcl
допускает пробелы в именах переменных, специальные символы и даже... не содержащие
никаких символов имена (последнее является одним из свидетельств близости Tcl
к так называемым функциональным языкам, где в идеале вообще не должно быть переменных,
а процесс вычислений представляет собой функцию, оперирующую результатами вычисления
других функций, которые, в свою очередь, оперируют результатами выполнения...).
Правда, не нужно увлекаться этими возможностями, а стоит все-таки придерживаться
правил программистского благородства, думая о тех несчастных, кому волею судьбы
уготовано прочесть код вашей программы: не обращайте их жизнь в кошмар, не заставляйте
учить суахили, чтобы понять, что значат имена переменных в программе! Из этих
соображений давайте избавимся от демонстрирующей "продвинутость" системы,
но такой неблагородной переменной командой unset : unset Один.
Вот и еще одна команда пополнила арсенал ваших знаний: unset удаляет
из системы ранее созданную переменную, принимая в качестве параметра ее имя.
Следующий пример -- классический. C программы "Hello, World" неизбежно
начинали все, включая признанных гениальных программистов. Итак, вы знаете уже
почти все необходимое для ее написания (введите ее в консоли в одну строку,
не забывая разделяющих пробелов, и подтвердите нажатием Enter):
set Message "Hello, World\; I like Tcl!" ; |