ALT Linux Team development discussions
 help / color / mirror / Atom feed
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 уже выучили - это очень маленький язык.

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


--
Стас.



             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