From: Stanislav Ievlev <inger@altlinux.org> To: devel@altlinux.ru Subject: [devel] I: alterator internals Date: Thu, 26 May 2005 12:13:53 +0400 Message-ID: <20050526081353.GA1324@basalt.office.altlinux.org> (raw) Привет всем! С этого письма начинается серия маленьких писем, призванных популярно и доступно объяснить, что же такое 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 уже выучили - это очень маленький язык. Продолжение следует .... -- Стас.
next reply other threads:[~2005-05-26 8:13 UTC|newest] Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top 2005-05-26 8:13 Stanislav Ievlev [this message] 2005-05-26 9:13 ` [JT] " Dmitry Lebkov 2005-05-26 9:14 ` Kirill A. Shutemov 2005-05-26 9:25 ` Constantin Mikhaylenko 2005-05-26 15:01 ` Aleksey Novodvorsky 2005-05-27 9:04 ` Kirill Maslinsky 2005-05-27 17:27 ` Alexey Voinov 2005-05-27 20:00 ` Maxim Tyurin 2005-05-28 4:47 ` Constantin Mikhaylenko 2005-06-03 10:03 ` Stanislav Ievlev 2005-06-03 10:48 ` [devel] " Michael Shigorin 2005-06-03 10:50 ` Stanislav Ievlev 2005-06-03 11:01 ` Alexey Gladkov 2005-06-03 11:24 ` Michael Shigorin 2005-07-21 10:38 ` Vitaly Ostanin 2005-07-21 12:37 ` Stanislav Ievlev
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20050526081353.GA1324@basalt.office.altlinux.org \ --to=inger@altlinux.org \ --cc=devel@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git