Вход:  Пароль:  
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия AltLinux/Sisyphus/Alterator/internals/1 за 2005-07-20 00:36:20..

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 – ещё никто не смог заменить ;)


Небольшое замечание в сторону Сизифа: В Сизифе пожалуй самая большая коллекция компиляторов и интерпретаторов схемы. Их пусть лучше представит их мантейнер. Я же хочу обратить внимание только на три:
* guile – не самый оптимальный по скорости, но зато непревзойдённый по удобству интеграции с C.
* gambit-c – очень хороший компилятор, но с бедноватым набором готовых библиотек
* scheme48 – один из лучших интерпретаторов с богатой библиотекой.


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


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


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


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


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


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


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


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


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


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


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


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


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



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


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


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