From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 26 May 2005 12:13:53 +0400 From: Stanislav Ievlev To: devel@altlinux.ru Message-ID: <20050526081353.GA1324@basalt.office.altlinux.org> Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit Subject: [devel] I: alterator internals X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 26 May 2005 08:13:54 -0000 Archived-At: List-Archive: List-Post: Привет всем! С этого письма начинается серия маленьких писем, призванных популярно и доступно объяснить, что же такое alterator. Надеюсь, что помимо того что эти письма осядут в архивах рассылки, кто-нибудь оформит всё это в wiki или в какую ещё документацию. Alterator находится в постоянном развитии, поэтому то что было сказано сегодня, через месяц может стать уже неактуальным, поэтому следите внимательно, дабы не было потом недоразумений ;) 1. Немного истории. Надеюсь никто из упомянутых ниже не будет возмущаться от скромности ;) Ведь именно они стояли у истоков сегодняшнего alterator, а без знания прошлого делать будущего никак нельзя. ALTerator - это гениальное изобретение Лёши Воинова (voins) и Гоши Курячего (george), в первоначальных обсуждениях ,если не ошибаюсь, ещё всегда принимал участие Лёша Гладков (legion), хотя в Кольчуге он формально задействован не был. Возник alterator в недрах проекта ИВК-Кольчуга, и первое его воплощение можно там наблюдать. Над движком ALTerator в рамках Кольчуги работали помимо выше означенных ещё Антон Качалов (mouse), Саша Николаев (avn), Лёша Турбин (at). Ну и конечно была масса профессиональных сисадминов, которые закладывали все собственно алгоритмы настройки. Подробности этой части работы пусть уже рассказывает voins. Для меня же главное - сам alterator. Вообще перечислять людей, сделавших тот или иной вклад в alterator очень сложно, ибо это значит перечислить практически всех. Не одно дельное замечание подчас переворачивало только что придуманную замечательную концепцию того или иного компонента. Ну хватит, заниматься ностальгией. 2. Альфа и Омега Чтобы хорошо понять 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. Комментировать их не буду и так всё понятно: (+ 1 2) (- 2 3) (+ 1 2 3 4 5 6 7) (* 1 2 3 4 5 6 7 0) (+ 1 (+ 3 5)) (* 3 (* 5 6)) (+ 1 (- 7 4)) (+ 1 (- 4 (+ 5 6))) Считайте что одну четверть Scheme уже выучили - это очень маленький язык. Продолжение следует .... -- Стас.