Вход:  Пароль:  
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия AltLinux/Sisyphus/Alterator/internals/1 за 2006-10-30 15:37:09..

AI-1

Stanislav Ievlev <inger@>


Привет всем!


С этого письма начинается серия маленьких писем, призванных популярно и доступно объяснить, что же такое alterator. Надеюсь, что помимо того что эти письма осядут в архивах рассылки, кто-нибудь оформит всё это в wiki или в какую ещё документацию.


Alterator находится в постоянном развитии, поэтому то что было сказано сегодня, через месяц может стать уже неактуальным, поэтому следите внимательно, дабы не было потом недоразумений ;) (а ты версии помечай ;)

0. Немного истории

Надеюсь никто из упомянутых ниже не будет возмущаться от скромности ;) Ведь именно они стояли у истоков сегодняшнего alterator, а без знания прошлого делать будущего никак нельзя.
ALTerator — это гениальное изобретение Лёши Воинова (voins) и Гоши Курячего (george); в первоначальных обсуждениях, если не ошибаюсь, ещё всегда принимал участие Лёша Гладков (legion), хотя в Кольчуге он формально задействован не был. Возник alterator в недрах проекта ИВК-Кольчуга, и первое его воплощение можно там наблюдать. Над движком ALTerator в рамках Кольчуги работали помимо выше означенных ещё Антон Качалов (mouse), Саша Николаев (avn), Лёша Турбин (at). Ну и, конечно, была масса профессиональных сисадминов, которые закладывали все собственно алгоритмы настройки. Подробности этой части работы пусть уже рассказывает voins. Для меня же главное — сам alterator.


Вообще перечислять людей, сделавших тот или иной вклад в alterator, очень сложно, ибо это значит перечислить практически всех. Не одно дельное замечание подчас переворачивало только что придуманную замечательную концепцию того или иного компонента.


Ну хватит заниматься ностальгией.

1. Альфа и Омега


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


Сразу спешу успокоить. Вообще говоря, одна из неповторимых особенностей alterator состоит в том, что любой его компонент можно написать на любом языке программирования. Так, части, собственно занимающиеся конфигурированием системы, в основном написаны на языке, понятном любому администратору — shell и awk.


Но всё-равно какой-то язык должен быть основным, а у alterator таким языком является Scheme (я позволю себе называть его просто Схема, чтобы реже переключаться с одного языка на другой).


Схема — это один из диалектов хорошо известного семейства языков LISP. LISP всегда существенно отличался от других языков. И не только несколько непривычным синтаксисом, но и большим изяществом и продуманностью.


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


Сразу порекомендую пользоваться нормальным текстовым редактором. Очень хорошо подойдёт vim и emacs. А вот mcedit навсегда вас отвадит от этого языка.


Это примерно как с поп-музыкой и чем-то другим. Первая всегда быстро приходит и также быстро уходит, а вторая не сразу придёт, зато никогда потом не покинет ;)


Всё это разглагольствование отнюдь не означает, что все остальные языки по боку. Portable Assembler C ещё никто не смог заменить ;)


Небольшое замечание в сторону Сизифа: там, пожалуй, самая большая коллекция компиляторов и интерпретаторов схемы. Их пусть лучше представит их мантейнер. Я же хочу обратить внимание только на три:


2.1 О порядке слов.


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


Способ 1: 2 + 3 (или «к двум прибавить три»).
Не самый удачный способ с точки зрения математики и языков программирования. Однако нас приучают к нему с детства, так же как и к десятичной системе счисления. Гораздо чаще произносится «два плюс три», но это скорее пословное оглашение записи, строго говоря — лишённое какого либо смысла, ибо плюсы бывают разными. Да и с точки зрения языков программирования, например того же C, получается несколько неудачно, ибо операция прибавления всё-таки обозначается как +=. А в C++ это вообще может быть оформленно как маловразумительная конструкция operator+().


Таким языком общается с миром большинство популярных языков программирования.


Способ 2: 2 3 + («два и три сложить»).
Очень непривычный, но удобный способ с точки зрения математики. Известен также под названием польская нотация (или польская запись). Математическое удобство превращается в то что компиляторы и интерпретаторы языков программирования, использующую такую нотацию получаются чрезвычайно компактными, что позволяет их «засунуть» в кремний. Таким языком общается с миром Форт и Постскрипт.


Способ 3: + 2 3 («сложить два и три»).
Может быть, не самый лучший с точки зрения науки, зато самый естественный. «сложить два и три» гораздо понятнее чем «два плюс три». Это не случайно, ибо это функциональный подход. Функция сложения применяется к двум и трём. В общем, то функция, пожалуй одно из самых основных понятий современного мира.


Таким языком общается с миром всё многочисленное семейство LISP (и ещё много других функциональных языков программирования)


Итак, когда вы захотите что-то сказать на Схеме, сначала надо назвать функцию, а потом перечислить, к кому её применить.


Например «вычесть из трёх четыре», «перемножить пять шесть и семь».


Теперь немного о формате вызова.


Стандартный, и известный по школе способ записи результата применения функции к своим аргументам – f(x). Ещё часто используется в математике бескобочный вариант – Ax,Fx,...
Но LISP идёт своим путём и описывает вызов как (f x). Казалось бы это ужасно, однако если функция много-аргументная, то мы экономим на спец. символах. f(x,y,z)запишется как (f x y z).
Собственно такая экономность и регулярность в синтаксисе LISP и отпугивает от него, но как мы увидим дальше, бедность и регулярность синтаксиса — это ещё и богатство, если бы не она, то не было бы и удобного способа описания интерфейса.


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


Сразу несколько простейших выражений на Scheme. Комментировать их не буду и так всё понятно:



Считайте что одну четверть Scheme уже выучили – это очень маленький язык.


Продолжение следует....


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]