Croco ([info]croco) wrote,
@ 2008-01-22 17:20:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Current mood: tired
Entry tags:programming

об изобретателях парадигм
Нет, я всё-таки напишу. Страна должна знать своих героев.

Редактировал я тут недавно статью статью "Парадигма программирования" на Википедии. Ну, отредактировал и ладно. А через некоторое время решил по ссылочкам прогуляться. В том числе -- по ссылочке "Автоматное программирование".

И увидел я там шикарную фразу, которая меня вогнала в некоторый ступор. Фраза звучала так:

Автоматное программирование предложено А.А.Шалыто в 1991 году

Что характерно, в англоязычной части Википедии тоже обнаружилась статья про автоматное программирование. И там оказалось написано то же самое.

Особенно меня удивило то, что я уже лет пять студентам рассказываю, как использовать в событийно-ориентированных приложениях технику автоматного программирования, а сам эту технику использую примерно с года эдак 1992го (раньше я вообще программировать не умел, увы мне), но ни о каком Шалыто никогда почему-то не слышал.
"Как же так?!" -- подумал я. И попробовал в этом деле разобраться. Для начала запостил соответствующий вопрос в [info]ru_cs.

Там сходу нашелся один сторонник Шалыто (к счастью, только один, и не агрессивный). Он, правда, так и не смог объяснить мне, что же нового в работах Шалыто, да ещё настолько, чтобы присваивать себе авторство всей автоматной парадигмы, но некая несомненная польза от нашей с ним встречи всё же была: он выдал мне email самого Шалыто, чтобы я вопросы мог задать напрямую.

Поскольку к тому времени у меня оформилось подозрение, что это не в меру активные студенты из самых лучших побуждений попросту подставили своего научного руководителя, уважаемого профессора, доктора наук и всё такое, я решил, что связаться с Шалыто действительно необходимо, хотя бы для того, чтобы он знал о происходящем. Сказано -- сделано. Собравшись с мыслями, написал я по выданному мне адресу следующее письмо:
Уважаемый Анатолий Абрамович!

Я работаю на факультете ВМиК МГУ, занимаюсь практическими
методами сочетания разнородных стилей программирования.

Редактируя статью "Парадигмы программирования" для Википедии, я
наткнулся на статьи, посвященные парадигме автоматного
программирования и лично Вам:

http://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%BB%D1%8B%D1%82%D0%BE
http://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
http://en.wikipedia.org/wiki/Automata-Based_Programming
http://en.wikipedia.org/wiki/Anatoly_Shalyto

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

Заранее признателен за ответ.

С уважением,
--
Андрей Викт. Столяров
ВМиК МГУ

Через несколько дней я получил ответ, от которого моя челюсть отпала ещё сильнее:
    Андрей Викторович!

    Указанные статьи написаны с моим участием - поэтому с ними
    согласен.
[...skip...]

Ещё продолжая надеяться на лучшее, я сочинил второе письмо. Привожу его
текст целиком:
Уважаемый Анатолий Абрамович!

Ваше письмо привело меня в состояние крайнего удивления.

Дело в том, что программирование в стиле конечных автоматов
(statemachine-based programming) известно по меньшей мере с
середины 1960х годов. Во всяком случае, в известной книге Ахо и
Ульмана "Теория синтаксического анализа, перевода и компиляции"
оно уже активно используется, а английский оригинал этой книги
вышел в 1973 году -- причем книга представляет собой не
оригинальное исследование, а скорее обзор имеющихся результатов.
В русском переводе (М.:МИР, 1978) на стр. 295 в первом томе можно
найти, например, следующее примечание:

<<<<<<<<<<<<<<<<<<<
первой большой системой, в которой при построении лексических
анализаторов использовалась техника конечных автоматов, была
система AED RWORD. Обзор этой системы дан Джонсоном и др. [1968].
Томпсон [1968] приводит алгоритм, который по регулярному
выражению строит программу в машинном языке, моделирующую
соответствующий недетерминированный конечный автомат...
>>>>>>>>>>>>>>>>>>>

В библиографии при этом имеются следующие ссылки:

Томпсон [1968] (Thompson K.) Regular expression search algorithm,
Comm. ACM, 11:6, 419-422

Джонсон и др. [1968] (Johnson W. L., Porter J. H., Ackley S. I.,
Ross D. T.) Automatic generation of efficient lexical processors
using finite state techniques, Comm ACM, 11:12, 805-813

Я не проводил специальных исследований на эту тему, но
практически уверен, что и эти люди не были первыми, кто применял
"технику конечных автоматов" или, если угодно, парадигму конечных
автоматов в программировании.

Должен отметить также, что мышление в терминах конечных автоматов
(или в терминах машин состояний, что практически то же самое)
характерно далеко не только для теории трансляции.  Машины
состояний (и разбиение кода программы на обработчики отдельных
состояний) -- это основная техника, применяемая в
событийно-ориентированном программировании (которое, опять таки,
восходит к середине 1970х, к Smalltalk'у, и сейчас применяется
при реализации серверных программ как альтернатива обслуживающим
процессам и тредам); насколько мне известно, в криптографии
работа в терминах явных состояний тоже достаточно популярна.

Я готов допустить, что возглавляемая Вами исследовательская
группа под "автоматным программированием" понимает нечто отличное
от "программирования в терминах конечных автоматов", чем и
обусловлено утверждение о том, что "автоматное программирование
предложено А.Шалыто в 1991 году". Следует отметить, однако, что
подобные особые случаи применения терминологии должны быть
оговорены в явном виде, особенно если учесть энциклопедические
традиции Википедии и действующие там (заметим, явно
сформулированные и опубликованные) правила.

В список парадигм автоматное программирование включил не я,
статья "Парадигма программирования" исходно существовала в виде
stub'а, и там эта ссылка уже была. Я предполагал, что по ссылке
описывается именно то, что обычно подразумевается под парадигмой
автоматного программирования, и был крайне озадачен, обнаружив
там то, что там сейчас есть.

Считаю, что статья, которая сейчас называется "Автоматное
программирование" и соответствующая статья на английском должны
быть переименованы таким образом, чтобы не вводить читателей в
заблуждение. Статью про парадигму автоматного программирования
(то есть программирования в терминах конечных автоматов) я готов
при необходимости написать сам.

Один из вариантов -- сделать страницу "Автоматное
программирование" страницей disambiguation, то есть указать, что
термин "автоматное программирование" имеет различные значения.
Вопрос здесь в том, как назвать предложенную Вами методологию
(так, чтобы название отличалось от "Автоматное
программирование"). Это может быть что-то вроде "Автоматное
программирование (switch-технология)" либо "Автоматное
программирование (методология Шалыто)", либо что-то ещё. Хотелось
бы узнать Ваши пожелания на эту тему.

С наилучшими пожеланиями,
А. Столяров

Ответа на сей раз пришлось ждать чуть дольше, но он всё-таки воспоследовал.
       Сильно Вас благодарю, что Вы "не машите шашкой", а
       интерсуетесь моим мнением.

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

       Пока четыре замечания.
       1. Непейвода Н.Н. в своих первых книгах этот стиль называл
       программирование от состояний, а теперь называет автоматное
       программирование и считает, что "Термин "автоматное программирование"
       принадлежит, насколько нам известно, А.А. Шалыто. Во всяком случае, ему
       принадлежит заслуга его развития вопреки моде и мнению
       большинства".(http://www.intuit.ru/department/se/progstyles/9/1.html)

       Так, что если мне принадлежит не парадигма, так, по крайней
       мере, ее название.
       2. Где вы найдете так сформулированную парадигму:" Парадигма автоматного
       программирования состоит в представлении программ как систем
       автоматизированных объектов".  http://ru.wikipedia.org/wiki/%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%BD%D0
%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%
B2%D0%B0%D0%BD%D0%B8%D0%B5
       Это построение программ в целом, а не только применение
       автоматов для описания поведения программ.

       Под термином "автоматное программирование" понимается не построение и
       реализация конечных автоматов, а проектирование и исполнение программ в
       целом, поведение которых описывается автоматами.
       http://is.ifmo.ru/reflections/automats/

       3. Важно не кто первый что-то где-то предложил, а кто певым
       предложил это сделать методологией. Например, в книге "100
       выдающихся людей" приведен пример с мытьем рук перед операцией.
       Кто первым это предложил неизвестно, а кто стал это читать в
       медицинских институтах и ввел в обязательную практику хорошо
       известен (посмотрю, сейчас не помню).
       4. Аналогичные доводы я уже слышу много лет (частичный ответ
       здесь http://ru.wikipedia.org/wiki/Switch-технология раздел
       1.7).

       Потом напишу еще доводы.

       Если это Вас убеждает или нет,в любом случае очень хотел бы прочесть Ваше
       мнение.


С уважением, Шалыто





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

Так что я ответил лаконичным "Ваша позиция понятна" и приступил к действиям. Для начала я изучил соответствующие страницы обсуждения, высказал там своё мнение (попутно заметил, что stich-технологию кто-то уже пытался номинировать на удаление), пометил статьи про автоматное программирование шаблоном "к полному переписыванию", а персональную биографию Шалыто -- "к быстрому удалению". В этом, впрочем, я погорячился, сказался недостаток опыта: надо было просто "к удалению", поскольку критериям для быстрого удаления статья не соответствует, а вот "недостаточно значимой" явно является. Ну да ладно, это я ещё успею.

На странице обсуждения вот тут: http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5 разгорелся нешуточный флейм. Интересно, кстати, что я практически сразу заметил одну интересную особенность: вся, казалось бы, изрядная толпа моих оппонентов состоит исключительно из шалытовских студентов. Ну, и сам он там пару раз отметился.

Доводы их сводятся в итоге к одному: якобы под автоматным программированием следует понимать (они вообще заявляют "понимается") не программирование в терминах конечных автоматов, а именно вот эту вот методологию, предложенная Шалыто. То, что никто кроме самого Шалыто и его студентов этого не знает, их нимало не смущает. Ну и, естественно, это для них достаточный повод заявлять, что именно Шалыто и придумал автоматное программирование (не уточняя при этом, что конкретно имеется в виду). Разумеется, их не смущает и то впечатление, которое эта фраза вызывает у людей, с группой Шалыто до сей поры не сталкивавшихся.

А что она такое впечатление вызывает -- это к бабке не ходи. Вот сходу нашлось: http://www.cyberforum.ru/programming-theory/thread604.html



Уже не первый год в книгах описывают технику, называемую, например, "автоматным программированием". Суть в том, что различные процедуры программы представляются в виде "состояний", а правила их вызова -- в виде "переходов между состояниями" конечного автомата.

Типичный пример использования -- например, при создании стратегии жизни игрового персонажа, пусть будет муравья. Муравей либо отдыхает, либо атакует врага, либо ищет пищу.

Каждая из этих моделей поведения представляется отдельной процедурой, а вызов процедур определяется "автоматом" примерно такого вида:

режим = ОТДЫХАТЬ;
switch(режим)
{
case ОТДЫХАТЬ: fun_REST(); break;
case ИСКАТЬ: fun_SEARCH(); break;
case АТАКОВАТЬ: fun_ATTACK(); break;

// а здесь идёт логика переключений
if(враг рядом) режим = АТАКОВАТЬ;
if(голодный) режим = ИСКАТЬ;
в противном случае режим = ОТДЫХАТЬ;
};

Эта, наверняка многим известная методика описана в куче книг и представляется почти что народной. Однако судя по статье (равно как и по куче других ссылок в инете) данный подход был изобретён лишь в 1991 году (!), к тому же в России.

Если честно, отказываюсь в это верить. Безусловно, перечисленные в статьи люди сделали очень много для развития этого подхода; им принадлежит творческое его развитие и авторская реализация разных систем программирования, но всё-таки... это же классика.

А теперь внимание, вопрос. Может ли кто-нибудь указать на (1) более раннее описание сходной техники; (2) определить название того, как это называется ("автоматное программирование"?) и когда этот термин появился (со ссылками, разумеется); (3) привести примеры использования данного подхода (не моделирования обычных конечных автоматов -- это любой движок регулярных выражений делает) в сравнительно старых проектах?


(хммм... по указанному адресу цитата уже исчезла, но вот копия в кеше гугла: жать сюда) Интересно, куда это в самый ненужный момент цитаты деваются?

Дальше -- больше. Обнаружились вполне академичные статьи некоего Б.Кузнецова, который тоже интересуется автоматным программированием, с Шалыто знаком, даже не просто знаком, а соавторствовал в нескольких статьях, но, судя по тексту статьи, изобретателем автоматного программирования Шалыто не считает, как и 1991 -- годом, когда его изобрели. Статья вот тут: http://www.softcraft.ru/design/ap/ap01.shtml Автору я сегодня послал письмо, но ответа пока нет.


Короче говоря, я покамест готовлю статью для Википедии взамен той лабуды, которая там сейчас есть. Черновик можно посмотреть тут: http://ru.wikipedia.org/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:DrCroco/automata_programming Русский вариант практически готов, только добавить ссылок; нужен, подозреваю, ещё и английский, чтобы всё сделать одновременно. Смущает меня только одно: толпа шалытовских студентов хотя и не блещет аргументами, но всё-таки довольно многочисленна, и бодаться с ними в одиночку я уже подустал. Может, поможет кто? Приветствуется любое содействие -- как в виде прямого участия в том флейме, так и в виде ссылок на источники, и в виде привлечения внимания общественности к проблеме.

В конце концов, ну так же нельзя

UPD: Статья была в итоге заменена на мой текст (как русская, так и английская). Шалыто меня напоследок кем-то там обозвал и, кажется, успокоился. Кто-то из его сторонников в итоге сделал статью с названием "Автоматное программирование (технология программирования)", что лично у меня возражений не вызывает. Правда, там так и осталось непонятно, чем это отличается от "просто автоматного программирования", но это уже к авторам статьи, не ко мне.

Очень надеюсь, что тему можно сдавать в архив.


(Post a new comment)


[info]petchik
2008-01-22 04:24 pm UTC (link)
"а проектирование и исполнение программ в целом, поведение которых описывается автоматами."
Я все забыл или на 4ой, кажется по счету лекции нам рассказывали, что ЛЮБАЯ программа описывается конечным автоматом?

(Reply to this)(Thread)


[info]croco
2008-01-22 04:31 pm UTC (link)
Это смотря что понимать под "конечным автоматом" :-)) Если посмотреть на английскую статью и на русскую, окажется, что там описываются совершенно разные понятия. Регулярным автоматом (который в русской статье под видом конечного) ни фига всё не описывается, он не является алгоритмически полным.

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

(Reply to this)(Parent)(Thread)

(no subject) - [info]petchik, 2008-01-22 04:36 pm UTC
(no subject) - [info]croco, 2008-01-22 05:04 pm UTC
(no subject) - [info]petchik, 2008-01-22 05:30 pm UTC
(no subject) - [info]croco, 2008-01-22 05:51 pm UTC
(no subject) - [info]petchik, 2008-01-22 06:10 pm UTC
(no subject) - [info]croco, 2008-01-22 06:42 pm UTC

[info]netp_npokon
2008-01-22 05:45 pm UTC (link)
/me не силен в википедических терминах, но у них есть какой-то шаблон, который вешается на спорные статьи (см. русскую статью про Нагорный Карабах). В этом случае, судя по всему, к редактированию будут привлечены модераторы.

(Reply to this)(Thread)


[info]croco
2008-01-22 05:49 pm UTC (link)
Там один из пятерых членов Арбитража уже отметился (kaganer). Нет, ну оно понятно, если что -- будет война правок, потом арбитраж, всё такое. Я даже практически не сомневаюсь, что в итоге выиграю. Просто в одиночку против этой своры команды мне будет несколько тяжеловато.

(Reply to this)(Parent)


[info]nzeemin
2008-01-22 06:16 pm UTC (link)
А я бы на вашем месте кстати написал Н.Н.Непейводе, которому я думаю и самому небезынтересно было бы узнать, что на него ссылаются в подобных спорах. Если встречу его в университете — обязательно спрошу.

(Reply to this)(Thread)


[info]croco
2008-01-22 06:47 pm UTC (link)
Тут, боюсь, всё будет не очень просто. Дело в том, что Непейвода уже когда-то согласился (хотя явно не без скрипа и внутренних сомнений, судя по стилю), что Шалыто какое-то отношение к изобретению автоматного программирования имеет. То есть, как это ни печально, Непейвода как раз оказался среди тех, кто повёлся на вышеупомянутую казуистику. В самом деле, Непейвода в своей книжке описывает под именем "автоматного программирования" ничто иное, как программирование в терминах автоматов, без всякой шалытовской новизны; и тем не менее, реверанс в сторону Шалыто в книге сделан.

Теперь, боюсь, Непейводе нужно будет заново вникать в проблему, и не факт, что он захочет это делать -- ведь решение он один раз уже принял.

(Reply to this)(Parent)

не совсем в тему
[info]alexott
2008-01-22 07:26 pm UTC (link)
а ты даешь своим студентам в списке литературы: Finkel - Advanced Programming Languages Design - она доступна свободно с сайта издательства addison-wesley (если я не ошибаюсь)

(Reply to this)(Thread)

Re: не совсем в тему
[info]croco
2008-01-23 10:00 pm UTC (link)
Студентам я читаю операционные системы, Финкель тут не в кассу несколько. Или ты про старшекурсников?

Кстати, спасибо, что напомнил про Финкеля. Благо он у меня есть в виде распечатки (не от тебя, кстати?) По обсуждаемой теме, правда, ни хрена там нет, но с высоты реализации схемовских континуаций мне было очень интересно перечитать главу про continuations в смысле языка Io.

(Reply to this)(Parent)(Thread)

Re: не совсем в тему - [info]alexott, 2008-01-24 07:30 am UTC

[info]gouriev
2008-01-22 08:37 pm UTC (link)
Очень интересная дискуссия.
Вы отожгли.

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


А к Вам у меня возник более частный вопрос.
Вы приводите событийно-управляемые программы
как пример использования автоматного программирования.
В чем здесь аналогия ?

инструкции switch() вроде-бы недостаточно...

Автомат меняет свое состояние под воздействием
входного символа (внешнего события).

В событийной программе внешние события конечно есть,
а вот где состояние, которое программа могла бы менять.

Событийный подход в чистом виде никакого состояния не требует (не запрещает, конечно, но оставляет за рамками).
Или я что-то пропустил ?

(Reply to this)(Thread)


[info]netp_npokon
2008-01-22 08:55 pm UTC (link)
Кстати, +1
Можно какой-нибудь Self привести в пример.

(Reply to this)(Parent)


[info]croco
2008-01-22 09:24 pm UTC (link)
"Автомат" -- это не только та убогая хрень, которая представляется диаграммой Мура. Автомат в более общем смысле -- это такая штука, у которой есть внутреннее состояние и которая работает по шагам, причём шаги не перекрываются по времени, а состояние является единственным способом передачи информации между шагами.

Событийно-ориентированное программирование как раз именно в чистом виде и требует явного выделения состояний, то есть работ в сугубо автоматном стиле (получили управление, сменили состояние, отдали управление -- а всё остальное сделаем на следующем шаге). Достаточно представить себе реализованный в одном процессе SMTP-сервер. Есть пяток соединений, на одном из них только ушел greeting и пока ничего не пришло, на другом давно уже прошли все MAIL FROM, RCPT TO и прочее и идёт приём тела сообщения, на третьем клиент прислал MAIL FROM и завис, на четвёртом ещё что, и и т.п. Суть тут в том, что на каждое пришедшее нечто от любого из клиентов (то есть событие) необходимо реагировать сменой состояния (возможно, ещё клиенту что-то отправить, если есть такая возможность) и тут же отдавать управление назад в главный цикл, чтобы не блокировать работу других сессий. Тут, собственно, только два варианта: либо делать state-machine-based (то есть автоматное программирование), либо плодить процессы или треды.

И вообще, мало мне было шалытят, ещё и от своих теперь отбиваться (ворчит)

(Reply to this)(Parent)(Thread)

(no subject) - [info]gouriev, 2008-01-23 01:35 am UTC
(no subject) - [info]croco, 2008-01-23 03:43 pm UTC
(no subject) - [info]gouriev, 2008-01-24 05:28 pm UTC

[info]croco
2008-01-22 09:35 pm UTC (link)
Кстати, раз уж назвались груздем -- э... там я на флеймовой страничке вам ответил, хочу дальнейших комментариев.

(Reply to this)(Parent)(Thread)

(no subject) - [info]gouriev, 2008-01-23 01:00 am UTC
раз уж назвались груздем... - [info]gouriev, 2008-01-23 01:14 am UTC
Re: раз уж назвались груздем... - [info]croco, 2008-01-23 03:37 pm UTC
Re: раз уж назвались груздем... - [info]gouriev, 2008-01-24 05:40 pm UTC
Re: раз уж назвались груздем... - [info]dmitri_pavlov, 2008-01-25 01:58 am UTC
????? - [info]gouriev, 2008-01-25 02:22 am UTC
Re: ????? - [info]dmitri_pavlov, 2008-01-25 04:06 am UTC
:O) - [info]gouriev, 2008-01-25 06:13 am UTC
Re: :O) - [info]dmitri_pavlov, 2008-01-31 07:02 am UTC
Re: :O) - [info]gouriev, 2008-01-31 04:25 pm UTC
А ларчик просто открывался - [info]gouriev, 2008-01-29 06:38 pm UTC
Re: А ларчик просто открывался - [info]dmitri_pavlov, 2008-01-31 06:58 am UTC
Re: А ларчик просто открывался - [info]dmitri_pavlov, 2008-01-31 06:44 pm UTC
Re: А ларчик просто открывался - [info]gouriev, 2008-01-31 07:21 pm UTC
советы постороннего - [info]gouriev, 2008-01-24 06:54 pm UTC
> а вот где состояние, которое программа могла бы менят - [info]poige, 2008-01-24 07:04 am UTC

[info]maxcom
2008-01-22 08:47 pm UTC (link)
спасибо, интересная статья

(Reply to this)


[info]gamajun
2008-01-22 09:43 pm UTC (link)
Знаком я с этими статьями в википедии. Действительно, от претензий в духе "а мы первые назвали это парадигмой программирования" несколько коробит. Есть даже специализированные языки программирования, в которых программа представляет собой совокупность описаний конечных автоматов, event-driven. В качестве примера могу привести язык STATL, который граждане из штатов разработали под свои нужды где-то в промежутке между 1993 и 2000 г.: http://www.cs.ucsb.edu/~seclab/projects/stat/index.html

В нём прямо так и пишут программу:
state s0;
state s1;

transition s0->s0
event ...
{
...
}

и так далеею
Имеет место быть какой-то очень мутный терминологический спор. :-)

(Reply to this)(Thread)

(no subject) - [info]gouriev, 2008-01-23 01:17 am UTC
(no subject) - [info]gamajun, 2008-01-23 02:05 pm UTC
(no subject) - [info]gouriev, 2008-01-24 05:13 pm UTC
(no subject) - [info]alexott, 2008-01-23 07:37 am UTC
(no subject) - [info]gamajun, 2008-01-23 02:00 pm UTC
(no subject) - [info]alexott, 2008-01-23 02:08 pm UTC
(no subject) - [info]dbg, 2008-01-23 08:18 am UTC
(no subject) - [info]gamajun, 2008-01-23 02:01 pm UTC
(no subject) - [info]croco, 2008-01-23 04:17 pm UTC

[info]leonov
2008-01-23 12:05 am UTC (link)
Еще стоит заметить, что идея того самого UniMod, на который ссылаются в флейме, в середине 90-х носилась в воздухе и помимо школы Шалыто - взять модель на uml либо шлеер-меллоровскую (на книжку которых "Объектно-ориентированный анализ: моделирование мира в состояниях", кстати, есть ссылки в статьях на шалытовском сайте) модель состояний в чистом автоматном виде и либо сгенерить из нее код, либо честно воспроизвести асинхронную передачу сообщений, не преобразуя ее в синхронные вызовы. Я таких движков в середине 90-х видел несколько, ну и (скромно так) сам к диссеру писал с прицелом на распределенные системы (куда такая модель естественно укладывается, в отличие от простого построения локальных программ, где от ее бездумного применения часто можно только лишнюю головную боль огрести).

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

(Reply to this)(Thread)

(no subject) - [info]croco, 2008-01-23 09:56 pm UTC

[info]dmitri_pavlov
2008-01-23 02:01 am UTC (link)
В ссылке на язык STATL в конце списка литературы есть такая ссылка:
P.A. Porras, "STAT - A state transition analysis tool for intrusion detection," M.S. thesis, Computer Science Dep., University of California Santa Barbara, June 1992.

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

(Reply to this)


[info]dmitri_pavlov
2008-01-23 02:02 am UTC (link)
Или вот статья:
K. Ilgun, R.A. Kemmerer, and P.A. Porras, "State Transition Analysis: A Rule-Based Intrusion Detection Approach," IEEE Transaction on Software Engineering, 21(3), March 1995.

В ней наверняка должны быть необходимые ссылки.

(Reply to this)


[info]dmitri_pavlov
2008-01-23 02:43 am UTC (link)
Самое интересно — это то, что они, фактически, предлагают добавить к языку программирования всего одну новую конструкцию (привожу в С-подобном синтаксисе):

while (1)
switch (state, input)
{

case (S, I):
state = T;
output = O;
break;

}

Здесь присваивание output на самом деле означает вызов функции.

И это — всё. Я могу говорить об этом с уверенностью,
так как общался с ними довольно длительное время.
И даже написал в качестве курсовой работы программу
в этом стиле: http://is.ifmo.ru/works/serpent/
Эта программа реализует алгоритм с крайне нетривиальной
внутренней логикой. Видимо, на этом сайте это самый нетривиальный проект.

Конечно, ни о какой новизне автоматного программирования
речи идти не может, всё это было известно задолго до 1990-х годов.

Вряд ли здесь можно говорить о новой парадигме программирования — одной новой конструкции для
этого маловато.

То есть «автоматное программирование» —
это хорошо разрекламированная пустышка.

Что характерно, в их варианте статьи не приводится
никаких примеров. А в вашем варианте хорошо видно, что
все примеры являются различными способами реализации
той конструкции, на которую я указал выше.

Я рекомендую обозначить этот момент в новом варианте
статьи явно.

(Reply to this)(Thread)

(no subject) - [info]croco, 2008-01-23 09:54 pm UTC
ну не скажите - [info]gouriev, 2008-01-24 06:00 pm UTC
(no subject) - [info]dmitri_pavlov, 2008-01-25 01:41 am UTC
(no subject) - [info]croco, 2008-01-25 10:26 pm UTC
(no subject) - [info]dmitri_pavlov, 2008-01-31 07:04 am UTC

[info]alexott
2008-01-23 07:42 am UTC (link)
кстати - statecharts есть в UML. К тому же я нашел вот такую вот статью в описании boost.statechart -> http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf, в которой в конце есть большой список литературы, в том числе и описание языков statechart

(Reply to this)(Thread)

(no subject) - [info]alexott, 2008-01-23 07:48 am UTC

[info]frbrgeorge
2008-01-23 09:27 pm UTC (link)
Я с Шалытой этой общался на OSF Russia 2005. Оно совсем неглупое, но изредка слабовменяемое, когда речь заходит о чём-то из области его убеждений. Это нормально, печально же то, что во всех этих областях он чувствует себя 100% компетентным. Так, например, он считает, что свободный софт никогда не документируется, поэтому его идеи об обязательном документировании всего и вся -- откровение почище апокалипсиса, которые мы, хакеры волосатые, понять всё равно не в состоянии.

(Reply to this)(Thread)

(no subject) - [info]croco, 2008-01-23 09:34 pm UTC
(no subject) - [info]leozub, 2008-02-20 09:49 pm UTC
(no subject) - [info]croco, 2008-02-21 07:31 pm UTC

[info]igde
2008-01-24 09:26 am UTC (link)
Мне кажется, Шалыто вполне может претендовать на авторство. Не меньше, чем Кей на авторство ООП. Другое дело, ценность этих "парадигм" может различаться. :-)
Вы отнесли "Автоматное программирование" к "подходам и приёмам". По Шалыто же это - одна из "основных моделей программирования".
Например, вряд ли кто-то кроме учеников Шалыто станет обходить дерево с помощью конечного автомата.

(Reply to this)(Thread)

(no subject) - [info]croco, 2008-01-24 09:46 am UTC
(no subject) - [info]igde, 2008-01-24 01:14 pm UTC
(no subject) - [info]croco, 2008-01-24 02:24 pm UTC
(no subject) - [info]igde, 2008-01-24 03:26 pm UTC
(no subject) - [info]croco, 2008-01-24 04:16 pm UTC
(no subject) - [info]igde, 2008-01-25 06:43 am UTC
(no subject) - [info]croco, 2008-01-25 11:18 am UTC
(no subject) - [info]igde, 2008-01-25 01:43 pm UTC
(no subject) - [info]croco, 2008-01-25 07:05 pm UTC
(no subject) - [info]croco, 2008-01-24 02:26 pm UTC
(no subject) - [info]dmitri_pavlov, 2008-01-25 01:49 am UTC
(no subject) - [info]croco, 2008-01-24 09:47 am UTC
(no subject) - [info]lazyreader, 2008-02-03 07:05 pm UTC
(no subject) - [info]lazyreader, 2008-02-03 07:04 pm UTC

[info]dmitri_pavlov
2008-01-25 01:48 am UTC (link)
Здесь надо отметить, что есть довольно близкая концепция
— синхронное программирование.
Вот, например сайт:
http://www-verimag.imag.fr/SYNCHRONE/
Я прослушал несколько лекций одного из основателей этой
парадигмы Николаса Халбвакса, и понял, что та курсовая,
ссылку на которую я дал выше, написана мною в стиле
синхронного программирования. Такое вот удивительное
апостериорное открытие. Хотя сама курсовая
писалась именно в стиле автоматного программирования.

Возможно, стоит как-то отразить это в новой статье.

(Reply to this)


[info]dmitri_pavlov
2008-01-25 01:53 am UTC (link)
Что характерно, все настоящие парадигмы программирования
имеют по несколько языков их реализующих.
В то же время для автоматного программирования Шалыто
ни одного языка не предложено.
Это, судя по всему, потому, что язык будет состоять
из одной конструкции, как я указал выше.
Я как-то говорил Шалыто, что без языка его слова
про новую парадигму никто не будет рассматривать всерьёз.
С тех пор дело не сдвинулось с мёртвой точке.
Возможно потому, что они понимают, что как только появится
язык, все поймут, что ничего нового в этой парадигме нет,
она и так была известна раньше.

(Reply to this)


[info]gleb_semenov
2008-01-25 10:35 pm UTC (link)
А еще есть Саратовский иинститут Саратовской физики -
http://lj.rossia.org/~ded_mitya/238463.html

А вы тут о "превосходстве званий"... :)

(Reply to this)


[info]elentin
2008-02-15 02:09 pm UTC (link)
Текущая версия (12:15, 7 февраля 2008) (править) (отменить)
Pavel.mavrin (обсуждение | вклад)

Строка 1: Строка 1:
+
{{другие значения|Автоматное программирование (технология программирования)}}

Автоматное программирование
[править]
Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

У этого термина существуют