Обсуждение:Автоматное программирование

Последнее сообщение: 10 месяцев назад от РоманСузи в теме «Примеры на Си/Си++»

Untitled править

Неужели именно Шалыто придумал автоматное программирование? :) — Эта реплика добавлена с IP 195.131.140.220 (о)

Под влиянием идей Шалыто мы с Вадимом Гуровым разработали среду автоматного программирования UniMod. На данный момент UniMod скачен более 45 тысяч раз. То есть, раз наш чисто академический продукт привлек внимание такого количества человек, значит автоматное программирование в виде идей сформулированных Шалыто распространено достаточно широко.
Maxim Mazin 19:23, 18 января 2008 (UTC)Ответить
Скачан 45 тысяч раз -- это означает только то, что он был скачан 45 тысяч раз, и не более того. Это даже не означает, что хотя бы одна тысяча из этих 45 принадлежит живым людям, а не поисковым роботам. Вот если бы у вас было 45 тысяч подтверждённых пользователей (то есть людей, которые реально это используют), это было бы интереснее. С другой стороны, даже это никак не могло бы отменить того факта, что автоматное программирование -- это парадигма (то есть способ мышления при написании программ), существующая по меньшей мере с середины шестидесятых годов прошлого века. Если исследовательская группа под руководством Шалыто решила дать этому термину другое значение, то это совершенно не может служить основанием для каких-либо утверждений относительно автоматного программирования, если только в утверждении не оговаривается, что имеется в виду не просто автоматное программирование, а именно то, что этими словами называют у Шалыто. DrCroco 20:17, 18 января 2008 (UTC)Ответить
Да, не было такого термина, по крайней мере, на русском языке - поэтому нельзя было применять автоматное программирование с середины шестидесятых годов прошлого века. Тогда, действительно, автоматы применялись при построении отдельных классов программ, например, компиляторов и протоколов. Потом появились реактивные системы, а в начале 2007 года ведущий научный сотрудник IBM (http://www.ibm.com/developerworks/ru/library/wa-finitemach1/index.html) вдруг для себя открыл, что их, а не автоматное программирование, хорошо применять программировании виджетов на языке Java Script и т.д. Суть моего предложения состоит в том, что автоматы не надо применять от случая к случаю, и удивляться каждый раз, когда они эффективны в новой предметной области, а объявить автоматное программирование парадигмой программирования, которая определяет способ мышления, по крайней мере, при сложном детемированном поведении. При этом основным понятием объявляется даже не автомат, а состояние, а суть парадигмы состоит не в применении автоматов в программировании, а как их использовать при написании программ в целом, рассматривая программу как систему автоматизированных объектов управления, каждый из которых состоит из объекта управления и системы управления (автоматов), охваченных обратными связями. Мы находимся в Интернете, набирете этот термин на русском языке в любом поисковике и увидите ссылки на кого он дает.Если надо, то пусть кто-то (могу и я) напишет дополнительную статью под названием "Автоматы в программировании" и там изложит об 194.85.160.55 известных примерах применения автоматов в программировании, что никак не отменяет наличия настоящей статьи. Шалыто А.А., зав.кафедрой Технологии программирования СПбГУ ИТМО. 194.85.160.55 12:51, 19 января 2008 (UTC)Ответить
Я совершенно не понимаю, как можно говорить о том, что "не было термина" в применении к словосочетанию, заведомо понятному любому программисту (из которых, повторюсь, практически никто никогда не слышал фамилии Шалыто). Новизну подхода, который в исследовательской группе Шалыто разработан, предлагаю не обсуждать: это дело учёных советов. Речь сейчас идёт значении термина. Повторю ещё раз: я совершенно не возражаю против наличия в Википедии (и где угодно ещё) статьи, посвященной автоматному программированию в понимании Шалыто, но только в том случае, если в названии статьи будет в явном виде оговорено то обстоятельство, что имеется в виду не общезначимое значение словосочетания "автоматное программирование", но такое его значение, которое предпочитают употреблять в исследовательской группе Шалыто. DrCroco 15:09, 20 января 2008 (UTC)Ответить

было бы неплохо добавить комментарии к коду. а то новичкам не совсем понята суть 128.73.99.70 19:10, 17 апреля 2012 (UTC)Ответить

Автоматное программирование(комментарий) править

До Switz-технологии были Case-, а ещё раньше Do while-технологии. Так что авторами подобных технологий можно назвать разработчиков языков, в которых присутствовали соответствующие операторы, была увядшая на корню R-технология Вельбицкого. А были ещё такие языки Lisp, Forth и т. п. — Эта реплика добавлена с IP 217.83.85.140 (о)

Операционая система Windows написана в основном с использованием синтаксических конструкций языков ассемблера, Си и Си++. Значит ли это, что авторами ОС Windows являются авторы этих языков? По всей видимости, — нет. Так же странно утверждение о том, что Switch-технология автоматически вытекает из существования соответствующей конструкции языка Си. Скорее Switch-технология — это набор шаблонов (pattern) и правил их использования при программной реализации конечного автомата.
Насколько мне известно, такие языки как Lisp и Forth существуют до сих пор. Более того для языка Forth так же существует технология эффективной реализации конечных автоматов, описанная Дж. Ноблом (Noble J.V. Finite State Machines in Forth. University of Virginia. Institute for Nuclear and Particle Phisics. 1995).
Maxim Mazin 19:22, 18 января 2008 (UTC)Ответить
Думаю, что switch-технологию мы обсуждаем зря, всему своё время и место. Термину "switch-технология" посвящена отдельная статья. У меня к той статье особых претензий нет, за исключением того, что я по-прежнему крайне скептически отношусь к возможности наличия там научной новизны. Но, так или иначе, уж термин-то "switch-технология" явно придуман Шалыто, других значений у этого термина не наблюдается, а что до notability -- так это пусть администраторы Википедии решают. Здесь же предлагается для начала разобраться с термином автоматное программирование. Это общезначимое словосочетание, в отличие от термина "switch-технология", и за пределами узкого круга последователей Шалыто действительное значение этого термина не вызывает никаких сомнений. DrCroco 20:22, 18 января 2008 (UTC)Ответить
Так все-таки, если автоматное программирование - это общезначимое словосочетание, понятное каждому программисту, то не могли бы вы тогда привести ссылку на работу, в которой оно вводится? Не бывает же так, чтобы что-то было всем известно, но нигде не упомянуто.fedor.tsarev 22:17, 20 января 2008 (UTC)Ответить

самореклама править

Автоматное программирование известно по меньшей мере с 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

(ссылка взята из двухтомника Ахо и Ульмана, который сам в оригинале издан в 1973 году)

Вы нашли ссылку на статью про применение конечных автоматов для создания лексических трансляторов, а не про автоматное программировние. Заслуга Шалыто в том, что он обобщил существующие до него "узкие" техники и предложил парадигму создания создания программ "целиком" на основе автоматного подхода. При этом не обошел вниманием вопросы документирования и верификации, чего до него опять же никто не делал в таком контексте. Также хочу отметить, что создателем языка Lisp считают Джона Мак-Карти, несмотря на то, что основу Lisp - лямбда исчесление - создал Алонзо Черч. В нашем случае точно такая же ситуация - Шалыто не придумал конечные автоматы, он создал более высокоуровневую технологию на их основе. --Vadim gurov
Ссылка, приведённая мною -- не на конечные автоматы (этим еще лет на сорок больше), а на использование оных при написании программ, то есть на автоматное программирование. Если исследовательская группа под руководством Шалыто использует термин "автоматное программирование" в значении ином, нежели "программирование в терминах конечных автоматов" -- то такое использование должно быть явно оговорено, поскольку отличается от общепринятого (например, возможна статья под заголовком автоматное программирование (методология Шалыто) (хотя по-моему ничего кроме смеха это не вызовет). Что характерно, г-ну Шалыто я это предложил в личной переписке, но он упёрся. При этом представляется совершенно однозначным, что статья под заголовком "автоматное программирование" должна описывать термин в его общепринятом смысле. Утверждение о том, что автоматное программирование предложено Шалыто, однозначно воспринимается сторонними людьми (всеми, кого я спрашивал, а я опросил человек десять) как утверждение о том, что Шалыто первый придумал использовать в программировании мышление в терминах конечных автоматов, что есть заведомый абсурд. Аналогия с Лиспом здесь неуместна, поскольку Маккарти не называл свой язык "лямбда-исчислением", он назвал его Лиспом. Если бы Шалыто не называл то, что он там изобрёл (кстати, я так и не понял из текста статьи, что конкретно он придумал нового) "автоматным программированием", претензий бы не было DrCroco 19:55, 18 января 2008 (UTC)Ответить
Извините, но вы заблуждаетесь, когда говорите, что "использование оных при написании..." и есть автоматное программирование. Существует большая разница между программами с автоматами и автоматным программированием. Автоматное программирование подразумевает иной образ мышления, т.е. осмысление всей программы в терминах автоматов. Фактически, разница такая же, как разница между структурным программированием и объектно-ориентированным. Автоматное программирование - это новая парадигма. Ваш аргумент, что якобы все прекрасно понимают и так, что есть автоматное программирование, слишком неубедителен. Точно так же, услышав термин ООП, можно сказать, что это программирование с использованием объектов. К слову, в приведенной книге компилятор не соответствует автоматному программированию, т.к. автоматы лишь используются как вспомогательный инструмент, а не как концепция всей программы. Понятие парадигмы автоматного программирования не столь очевидна, как кажется. Недостаточно просто применить автоматы в каких-то частных задачах, т.к. речь идет о парадигме программирования, то есть программировании _всех_ программ в данном стиле, о ином образе мышления. Для этого нужен опыт разработки в данном стиле и соответствующее исследование. Заслуги А.А.Шалыто в этом бесспорны, в том числе и новизна предложенных идей. Надеюсь, что я удачно выразил мысли, и вы смогли увидеть, в чем разница между автоматным программированием и программированием с автоматами (по крайней мере, в понимании учеников А.А.Шалыто). Цымбалюк Евгений. Разработчик текстового языка автоматного программирования ТАВР. 19:55, 21 января 2008 (UTC)Ответить
Не извиню. Мне уже надоело повторять, что такая трактовка термина (да и вообще восприятие словосочетания "автоматное программирование" как термина, а не как нарицательного словосочетания) есть исключительная особенность Шалыто и его исследовательской группы. В подтвержение этого я, заметим, ссылки приводил, а вот ваша команда покамест ни на одну неаффилированную с Шалыто публикацию, где "автоматное программирование" рассматривалось бы по-шалытовски, не сослалась. Даже в книжке Непейводы, на которую с таким облегчением ссылается Шалыто (ну наконец-то хоть кто-то меня услышал) под заголовком "автоматное программирование" описывается именно программирование в терминах автоматов, а не что-то иное. DrCroco 10:10, 22 января 2008 (UTC)Ответить
Интересно, "объектно-ориентированное программирование", это по-вашему термин или нарицательное словосочетание? Я уже говорил, что по словосочетанию ООП можно понять, о чем идет речь, но это "понимание" не будет содержать ни инкапсуляции, ни полиморфизма, ни чего-либо другого. Также и здесь, за термином "автоматное программирование" стоит полноценная парадигма, с расширенной моделью автоматов, с механизмами взаимодействия, с верификацией и т.д. и т.п. К слову, всеобщепонимаемых и очевидных "нарицательных словосочетаний" не бывает. Для кого-то "автоматное программирование", это вообще такое программирование, когда программируют автоматы! ;) В общем, утверждать, что этот термин очевиден - некорректно. Думаю, большинство из ваших знакомых, участвовавших в соцопросе об АП, единогласно согласились бы, что компилятор, использующий таблицу и стек, фактически, для эмуляции автомата, разбирающего входные символы, - это и есть "автоматное программирование". В этом кроется в том числе и ваше заблуждение об обозначенном термине. Парадигма автоматного программирования это не одно и тоже, что и "программирование с использованием автоматов"! Конечно, я нисколько не удивлен вашей реакцией, трудно смириться с мыслью, что кто-то сумел-таки сделать шаг в нужную сторону, оттолкнувшись от автоматов, как специализированных решений, в сторону нового образа мышления. Ну что ж, и с этим смиряются... Одним слово, если бы у вас была хоть одна ссылка на статью, говорящую об автоматном программировании, как о парадигме (до публикаций А.А.Шалыто), то ваше "праведное" возмущение не было бы голословным.
Читайте внимательнее. Именно этот "новый способ мышления" (a.k.a. парадигма программирования) и есть то, что известно по меньшей мере с середины 1960х. Зачем вы привязались к лексическому анализу, мне вообще не очень понятно -- это не более чем одна очень простая частная задача, решаемая, опять же, весьма частным случаем автомата. Сходу назову несколько областей, где автоматное программирование (именно как мышление в терминах автоматов, а не что-то иное) применяется десятилетиями: (1) ядра операционных систем (там нельзя надолго задерживаться в обработчике прерывания, так что выход один -- сменить состояние и вернуть управление, а дальше продолжать придётся при следующем вызове) (2) семантика языка Рефал (конечный автомат, именуемый Рефал-машиной, состояние -- поле зрения, шаг автомата -- замена очередного вызова функции на вычисленное значение; (3) реализация продолжений языка Scheme (ключ к пониманию -- недопустимость рекурсии при реализации, несмотря на то, что сама Схема рекурсивна насквозь, так что там тоже приходится мыслить автоматно, и особенно интересно становится при реализации, например, функции sort (это я как недавно реализовавший могу точно сказать); (4) развесистые ГУИ (не всем нравятся треды, а единственная альтернатива -- уметь мыслить в терминах состояний) э... Мало? Ну см. ниже, там ещё один важный случай DrCroco 16:49, 22 января 2008 (UTC)Ответить
P.S. Сейчас все больше и больше публикаций об удачном применении автоматов в тех или иных частных случаях, но очень мало статей про АП, как про новую парадигму. Не удивительно, что почти все источники "аффилированы с Шалыто", так как именно Анатолий Абрамович активно продвигает новую концепцию. Большенство программистов просто покрутят пальцем у виска, если им предложить программировать "в терминах автоматов" (думаю, в том числе и ваши "соцопросившиеся"), т.к. для этого нужен иной способ мышления и проектирования, отличный в том числе и от программ, которые используют таблицы и стек для эмуляции автомата компилятора. Это, кстати, лишь подтверждает непонимание столь очевидного "нарицательного словосочетания". Цымбалюк Евгений. 16:50, 22 января 2008 (UTC)Ответить
Про большинство программистов и палец у виска -- это очевидная ерунда. Всякий, кому хоть раз приходилось писать многопользовательское серверное приложение без возможности раскидать его по отдельным тредам или процессам, знает, как писать в терминах автоматов. Вызов select() в Unix'е появился, если не ошибаюсь, в конце 1970х (4.2BSD) -- так вот, все, кто его используют, заведомо умеют писать в терминах автоматов, потому что иначе там просто невозможно. DrCroco 16:49, 22 января 2008 (UTC)Ответить
Ах да, забыл совсем -- про аффилированные статьи. Тут с вашими доводами явно что-то не так. Дело в том, что статьи, с Шалыто не аффилированные, но при этом посвященные автоматному программированию (то есть вот прямо так, "автоматное программирование" там и упоминается) и не рассматривающие при этом автоматное программирование как нечно отличное от "программирования в терминах автоматов" -- как раз-таки есть, и на них я тут ссылки приводить уже несколько подустал. Даже, повторюсь в десятый раз, книжка Непейводы, на которую ваша группа любит ссылаться -- и та автоматное программирование определяет в том же значении, что и я (несмотря на все реверансы). DrCroco 17:02, 22 января 2008 (UTC)Ответить

В статье нет ни слова о таких вещах, например, как state machines vs. threads vs. processes, событийно-ориентированное программирование, etc. Вообще, лично я точно помню, что первый свой кусок кода в автоматном стиле я написал в 1992 году, и ни о каком Шалыто я тогда и слыхом не слыхивал.

Но это не означает что этого не было. --Vadim gurov

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

Ссылок действительно стоит добавить, тем более они в большом количестве присутствуют на сайте автора. Саморекламой статью считать нельзя, так как предлагаемый термин вошел в обиход и активно использовался еще до появления данной статьи. --Vadim gurov
Термин автоматное программирование никем, кроме самого Шалыто и участников его исследовательской группы не используется для обозначения чего бы то ни было иного, нежели программирование в терминах конечных автоматов. Даже Непейвода в своей книжке, используя термин автоматное программирование и делая реверанс в сторону Шалыто (кстати, реверанс весьма сомнительный), описывает не более чем именно что программирование в терминах автоматов. Ни о каком "вхождении в широкий обиход" тут не может быть и речи. DrCroco 19:59, 18 января 2008 (UTC)Ответить

DrCroco 20:39, 14 января 2008 (UTC)Ответить

Насколько я могу судить (с позиции в значительной степени дилетанта), А.Шалыто использует термин а.п. в несколько ином (более широком) смысле, чем более ранний термин "программирование с использованием модели конечного автомата". Соответственно нужно, на мой взгляд, разделить статьи (или написать статью с названием программирование с использованием модели конечного автомата или Конечные автоматы в программировании), проставив взаимные ссылки, и указав на отличия в содержании терминов.
тогда уж не в более широком, а в более узком. В любом случае, не в общепринятом. Что, учитывая при этом сделанное громкое заявление об авторстве, выглядит совершенно неприемлемо DrCroco 19:59, 18 января 2008 (UTC)Ответить
На самом деле, здесь ситуация несколько более странная. Термин автоматное программирование -- это вполне общезначимое словосочетание, однозначно воспринимающееся (всеми, кроме самого Шалыто и его учеников) как обозначение для программирования в терминах конечных автоматов или, если угодно, программирования в терминах машин состояний. Если сторонникам Шалыто очень хочется называть автоматным программированием нечто более узкое (методологию, которая, якобы, отличается от просто программирования в терминах автоматов -- хотя для меня остаётся открытым вопрос о том, чем именно она отличается, ну да ладно, я могу чего-то и не видеть) -- так вот, в этом случае термин должен быть уточнён. Иначе говоря, статья в таком случае должна называться не автоматное программирование, а как-нибудь вроде автоматное программирование (методология Шалыто) или там автоматное программирование (switch-технология). Кстати, заметим, что есть отдельная страница, посвященная switch-технологии; можно, например, объединить содержание этих статей под одним заголовком (но точно не под заголовком "автоматное программирование"). Я даже согласился бы с вариантом, при котором само название автоматное программирование делается disambiguation, а соответствующие статьи называются, например, автоматное программирование (парадигма программирования) и автоматное программирование (switch-технология). Кстати, как человек, для которого парадигмы программирования представляют собой основную сферу научных интересов, ответственно заявляю, что switch-технология и вообще то, что предложено Шалыто -- это не парадигма программирования. Методология -- возможно, но не парадигма. А парадигма соответствующая, повторюсь, известна уже сорок с лишним лет. DrCroco 20:49, 18 января 2008 (UTC)Ответить
Что касается обвинений автора в саморекламе - то, наверное, обсуждать это бессмысленно. Либо такой термин известен и употребляется в связи с концепцией, предлдоженной Шалыто, либо - нет. Мои впечатления от ряда публикаций - да, такой термин получил некоторую известность, во многом благодаря активной популяризации автором. А вот само описание концепции, если оно ненейтрально, вполне можно и подкорректировать. Только нужно найти того, кто с одной стороны хорошо знаком с предметом, а с другой - не является "апологетом" данного подхода.--Kaganer 11:58, 16 января 2008 (UTC)Ответить

Автоматы и автоматное программирование править

Конечные автоматы действительно известны уже очень давно. И об их использовании в программировании известно очень давно. Однако под «автоматным программированием» понимается вовсе не использование автоматов для решения некоторых задач в программировании (как у Ахо и Ульмана). «Автоматное программирование» подразумевает использование автомата в качестве основного инструмента описания программы. Возможно, уже были попытки сделать то же самое, но (насколько мне известно) ни одна из этих попыток не привела к созданию законченной, теоретически обоснованной, и применимой на практике технологии. У Шалыто же на сайте приведены теоретические основы и множество примеров удачного применения. Все это доказывает, что «автоматное программирование» имеет право на существование. В том числе и в Википедии.

Я ответственно заявляю, что всё вышесказанное не соответствует действительности. В значении, отличном от "программирования в терминах автоматов", словосочетание "автоматное программирование" использует только, и исключительно, сам Шалыто (ну и его подчинённые, что неудивительно). DrCroco 20:08, 18 января 2008 (UTC)Ответить
Несколько лет назад в Санкт-Петербургском отделении математического института им. В.А. Стеклова Российской академии наук (ПОМИ) была конференция, посвященная автоматному программированию (как полноценной методологии программирования). В ней участвовали представители различных ВУЗов России (не только из Петербурга), и, если мне не изменяет память, был один участник из Франции. Nnnnnk 08:23, 20 января 2008 (UTC)Ответить
Я не вижу, каким образом это противоречит моим словам. Я не считаю программирование в терминах конечных автоматов неполноценной парадигмой программирования (пардон, неумение пользоваться машинами состояний приводит к порождению тредов не по делу -- я такое неоднократно видел). С другой стороны, факт проведения конференции сам по себе не означает, что все её участники (или хотя бы кто-то из них) были согласны с тем, что автоматным программированием почему-то нельзя называть программирование в терминах конечных автоматов, а можно называть только "методологию" (относительно которой я так и не понял, в чём она заключается), предложенную Шалыто. Более того, что-то мне подсказывает, что многие участники конференции вполне могли о новом значении термина автоматное программирование услышать впервые на самой конференции. DrCroco 15:19, 20 января 2008 (UTC)Ответить
Видимо, имелся в виду семинар на CSR 2006. Это не совсем конференция ПОМИ.

Pavel.mavrin 10:37, 16 января 2008 (UTC) Павел Маврин, чемпион мира по программированию ACM ICPC 2004.Ответить

Автоматное программирование - это действительно полноценный метод программирования. Его суть не в том, что «в программировании иногда можно использовать конечные автоматы», а в том, чтобы описывать логику сложного поведения при помощи автоматов. В рамках метода рассматривается много разных интересных вопросов: выделение сущностей со сложным поведением на этапе анализа и проектирования программной системы, декомпозиция поведения сущности на логику и семантику, место автоматного описания логики в объектно-ориентированной модели программной системы… Может быть, не на все вопросы есть устоявшиеся ответы, но автоматное программирование развивается, в этой области пишутся новые статьи, книги.

Про логику сложных программ: любая событийно-ориентированная программа использует именно этот подход, в этом нет абсолютно ничего нового. Событийно-ориентированное программирование известно также по меньшей мере с середины семидесятых. DrCroco 20:08, 18 января 2008 (UTC)Ответить

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

Статью необходимо переписать полностью, с нуля, и с моей точки зрения к ней нельзя на пушечный выстрел подпускать ни самого Шалыто, ни его последователей, по крайней мере до тех пор, пока статья не будет полностью закончена. Только после этого можно посмотреть, что исследовательская группа Шалыто сможет сказать такого, что не описано в статье. Покамест я не заметил в статьях Шалыто никакой научной новизны. DrCroco 20:08, 18 января 2008 (UTC)Ответить
Смотрите внимательно. Я Вам предлагал переписываться, а вы написали "Все понятно" и перестали переписываться, но зато активно пишете здесь. А.А. Шалыто 194.85.160.55 13:01, 19 января 2008 (UTC)Ответить
Причиной того, что я с Вами вступил в переписку, было исключительно моё ощущение, что здесь, на Википедии, толпа не в меру восторженных поклонников, руководствуясь сугубо благими побуждениями, подставили ни в чём не повинного уважаемого профессора. Убедившись (к своему изумлению), что это не так и что в изобретатели автоматного программирования Вас записали с Вашего ведома, я счёл свою цель начала переписки достигнутой. Продолжать переписку или нет -- это, как Вы понимаете, личное решение каждого из её участников. DrCroco 15:26, 20 января 2008 (UTC)Ответить

kenga 19:08, 16 января 2008 (UTC)Ответить

Автоматное программирование состоит не в применении автоматов для некоторых задач (таких, как построение компиляторов или лексический анализ), а подразумевает применение автоматов при проектировании программы в целом.

Парадигма автоматного программирования состоит в представлении программ как систем автоматизированных объектов.

Это трактовка Шалыто, к общепринятому значению термина она не имеет никакого отношения DrCroco 20:08, 18 января 2008 (UTC)Ответить
А откуда это Вы так безоговорчно знаете? А.А. Шалыто. 194.85.160.55 13:09, 19 января 2008 (UTC)Ответить
Я, кроме всего прочего, ещё и программист. И у меня не вызывает никаких сомнений и/или непонимания словосочетание "автоматное программирование". Для верификации я, как тут уже отмечалось, обсуждал это и с другими программистами, и с коллегами по кафедре. Словосочетание "автоматное программирование" всем понятно, и понятно вовсе не в том значении, которое вы пытаетесь навязать общественности в качестве своего изобретения. В подтверждение своих слов отмечу ещё и то, что даже здесь, на этой странице обсуждения, я далеко не первый человек, который обращает внимание на странности утверждений об авторстве изобретения автоматного программирования. DrCroco 15:15, 20 января 2008 (UTC)Ответить
Кстати, о поисковиках: вот вам стороннее мнение http://www.cyberforum.ru/programming-theory/thread604.html именно так всё это выглядит в глазах любого программиста, которому никто не объяснил, что под автоматным программированием кто-то ухитряется понимать что-то своё. DrCroco 19:32, 20 января 2008 (UTC)Ответить

Автоматное программирование также подразумевает не только в представлении программ как систем автоматизированных объектов на этапе проектирования, но и дальнейшую формальную (с проверкой полноты, непротиворечивости и т.д.) и изоморфную реализацию (в том числе при при реализации вручную). Nnnnnk 07:46, 20 января 2008 (UTC)Ответить

Автоматы, кстати, тоже понимаются не в том смысле, в каком о них говорится в книге Ахо и Ульмана (там они используются для описания регулярных языков). В автоматном программировании автомат может вырабатывать выходные воздействия, которые могут быть сколь угодно сложными. Кроме того, автоматы являются формальной моделью, удобной для некоторых классов программ (например, для реактивных систем), а диаграммы переходов часто бывают намного понятней, чем текст программы. fedor.tsarev 14:02, 17 января 2008 (UTC)Ответить

Совершенно справедливо, и именно так с середины семидесятых (а скорее и раньше) создавались событийно-ориентированные программы. Машины состояний мы можем наблюдать в ядрах операционных систем (начиная с Малтикса, если не ещё раньше), в реализациях сетевых протоколов (и, кстати, и в их описаниях тоже), да и вообще много где. Повторюсь, покамест всё, что я вижу в текстах Шалыто, это как максимум "переизобретение" того, что было известно задолго до него, просто никому не приходило в голову это единолично присвоить себе. Кстати, регулярные языки тут вообще ни при чём, Ахо и Ульман рассматривают не только регулярные автоматы, но и, например, автоматы с магазинной памятью. DrCroco 20:08, 18 января 2008 (UTC)Ответить
Ничего я себе не присваивал. Я вместо разрозненных случаев применения автоматов в программировании ввел термин, которого, по крайней мере, на русском языке не было (как писал выше, обратитесь в любой поиковик), для того чтобы люди заново и занова не открыли для себя стиль мышления с использованием состояний и автоматов при систематическом написании программ в целом (http://is.ifmo.ru/articles_en/_ProCom6_07GurovLO.pdf - на днях эта статья выйдет и на русском языке в журнале Программирование. Работая в МГУ, на том же факультете, где выпускается этот журнал, Вы знаете, что более авторитетного научного журнала в России нет, или Вы и с этой моей фразой не согласны, кстати, это четвертая статья с моим участием про автоматное программирование в этом журнале). Даже по-английски термин Automata-based Programming (http://www.outsourcing-russia.com/events/?66) предложен мною (http://www.codeproject.com/KB/architecture/abp.aspx), но это совсем другая история, в которой Вы уже тоже приняли участие. А.А.Шалыто 194.85.160.55 14:20, 19 января 2008 (UTC) 194.85.160.55 14:46, 19 января 2008 (UTC)Ответить
Я знаю об авторитетности журнала "Программирование", знаком и с теми, кто его выпускает, и я даже, представьте себе, в курсе, что он рецензируется. Вынужден отметить, однако, что в Википедии для подтверждения авторитетности своего мнения требуется ссылаться не на свои собственные публикации (вне зависимости от авторитетности издания, где таковые публикации имеют место), а на статьи независимых авторов. Кроме того, даже в самых что ни на есть рецензируемых журналах вряд ли кто-то из рецензентов станет "отбивать" статью только из-за того, что в статье некий термин определяется не в том значении, в котором он обычно употребляется. Автор работы вправе использовать свою терминологию, если он сам же даёт нужные определения. Посему ссылки на ваши собственные публикации выглядят в контексте данного конкретного обсуждения не слишком убедительно, вне всякой зависимости от авторитетности журналов. DrCroco 15:55, 20 января 2008 (UTC)Ответить

Почему вопрос так остро стоит о новизне методик, используемых в автоматном программировании? Да, существует довольно много общеизвестных задач, решаемых с помощью конечных автоматов. Естественно они и реализовывались с их помощью. Также с помощью применения конечных автоматов решались некоторые задачи логического управления. Тем не менее, опыт применения различными программистами модели автомата вовсе на означает наличие на то время подхода, называемого "Автоматное программирование". Формализовал и структурировал способ написания программ с помощью автоматов (именно как их стоит писать), а также ввел термин "Автоматное программирование", А. А. Шалыто. И его автоматное программирование стало уже действительно программированием, а не написанием программ с помощью некоторой математической модели. Любая технология начинает существовать с момента заявления о таковой, а не с момента, в который кто-то до чего-то додумался. Пока о работе не заявлено, о ней невозможно узнать. Пока метод не описан, его не существует, сколько бы подобные технологии не применяли отдельные индивиды. По поводу "общепринятого" понимания понятие "Автоматное программирование", то я могу сказать, что очень многие программисты, не знакомые с работами А.А.Шалыто, вам просто не ответят, что это. И лишь уцепившись за слово автомат и какие-то знания, полученные ранее, вспомнят конечные автоматы. Это не есть общепринятая трактовка. Eugene Reshetnikov 10:54, 20 января 2008 (UTC)Ответить

Я, собственно, не возражаю против новизны методики, предложенной Шалыто. Сам я там никакой новизны не вижу, но если я чего-то и не вижу, то это само по себе не значит, что этого чего-то нет (мало ли чего я где не вижу). Я возражаю против узурпации термина автоматное программирование, каковой термин не мог быть никем "введён" в 1991 году, поскольку и до того всем был понятен (в общезначимом значении, разумеется, а не в том, в котором его "ввёл" Шалыто). Тут получается следующее: Шалыто сначала переопределяет общезначимое словосочетание, чтобы оно обозначало его изобретение. Затем на основании этого он всем заявляет, что-де автоматное программирование предложил он. Поскольку все, кроме него самого, под автоматным программированием понимают программирование в терминах автоматов, и ничто иное, то у всех, опять же, кроме него самого, от этого утверждения возникает ощущение, что именно Шалыто предложил программирование в терминах автоматов (как таковое). Далее всё зависит от наличия собственных знаний. Одни, зная, сколько на самом деле лет программированию в терминах автоматов, крутят пальцем у виска, отпускают шпильку по поводу проедания грантов и идут своей дорогой. Другие, не обременённые знанием истории (и не отличающие 1991 год от 1968, например) принимают всё за чистую монету, что ещё хуже. Этому, повторю, необходимо положить конец. Заметим, лично меня вполне устраивает, если статья про шалытовский вариант "автоматного программирования" будет просто переименована. DrCroco 15:48, 20 января 2008 (UTC)Ответить
Дык, чем это, интересно, "Шалытовский вариант", как вы выражаетесь, отличается от "настоящего" автоматного программирования? То есть, правильно ли я понимаю, что автоматное программирование как парадигма - это неверная трактовка термина? Вы можете хоть один источник привести, где предлагается использовать автоматное программирование как парадигму? Не в качестве мат.модели, не в качестве вспомогательного инструмента алгоритма, а как универсальное решение для любых программ? Цымбалюк Евгений. 21 января 2008 (UTC)
Чем шалытовский вариант отличается от настоящего значения -- это я сам бы у вас хотел спросить, поскольку покамест этого не понял (то есть лично я в шалытовских текстах никакой новизны не вижу, а втоматы и в программах использовались, и в спецификациях (UML) -- но, повторюсь, я не утверждаю, что никакой новизны там нет, я просто констатирую факт, что мне она не видна). Если же вы считаете, что шалытовская трактовка термина ничем не отличается от общепринятой, то мне остаётся только повторить: программирование в терминах автоматов известно уже по меньшей мере сорок лет и никакой речи о шалытовском авторстве идти не может. Что касается понятия "парадигмы программирования", то Роберт Флойд, который его ввёл (см. парадигма программирования), явно не имел в виду, что парадигма -- это "универсальное решение для любых программ". Как раз напротив (см. соответствующую цитату по ссылке). DrCroco 10:04, 22 января 2008 (UTC)Ответить

--

Еще казус править

84.53.225.103 23:02, 18 марта 2008 (UTC)А вот тут кто-то утверждает даже, что Switch-технология не является автоматным программированием вообще:Ответить 


(см. http://www.softcraft.ru/topic.shtml?key=4) :-) DrCroco 19:40, 20 января 2008 (UTC) Это далеко не казус... В разделе сайта SoftCraft под названием КА-технология(см. http://www.softcraft.ru/auto.shtml#ka) представлен иной взгляд на технологию проектирования автоматного прграммирования. Отличный от понимания, вкладываемого в этот термин "группой Шалыто А.А.". И, возможно, КА-технология и есть та истинная технология автоматного программирования, ставшая здесь предметом столь жаркого обсуждения. По крайней мере, в "казусе" речь шла именно об этом. И вызывает только и удивление, и сожаление, что взгляд на автоматное программирование, отраженный в упомянутом разделе сайта SoftCraft, участниками обсуждения никак не затрагивается.Ответить

Б.П.Кузнецов об автоматном программировании править

И ещё материал по теме:

Б.П.Кузнецов. "Психология автоматного программирования"

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

Остановите флейм править

Обсуждение вопроса об авторстве термина "автоматное программирование" переходит во флейм, и понять что-то становится уже совсем нереально. Пожалуйста, приведите самое раннее из известных вам использований термина "автоматное программирование". Иначе обсуждение бессмысленно. Pavel.mavrin 09:39, 21 января 2008 (UTC)Ответить

Здесь вы подменяете обсуждаемый предмет. Следует, видимо, различать следующие материи: (1) Каково общепринятое значение термина "автоматное программирование"; (2) как давно этот термин используется (3) кто впервые использовал этот термин в официально опубликованной работе; (4) кто изобрёл автоматное программирование (в общезначимом смысле). Ваше требование привести пример работы, в которой фигурирует словосочетание "автоматное программирование", имеет здесь отношение только к пункту 3 и никоим образом не может оказать влияние на остальные. Сходу я действительно не могу привести пример русскоязычной и официально опубликованной до 1991 года работы, в которой бы фигурировал именно этот термин (хотя это не означает, что их нет). В контексте данного обсуждения, повторюсь, это само по себе абсолютно ничего не значит, поскольку не имеет отношения к общепринятому значению термина. С другой стороны, в подтверждение своего утверждения о том, что за пределами исследовательской группы Шалыто никто не воспринимает словосочетание "автоматное программирование" иначе как "программирование в терминах автоматов", я ссылки уже приводил (см. предыдущий параграф, особенно рекомендую статью Кузнецова). Скажу больше: я не уверен, что словосочетание "автоматное программирование" вообще правомочно называть "термином": термин обычно имеет определение, а автоматное программирование -- это совершенно однозначно нарицательное словосочетание, не требующее определения (то есть такое, смысл которого напрямую вытекает из смысла входящих внего слов). Аналогичным образом словосочетание "синяя краска" обозначает (во всяком случае, в понимании большинства людей) краску синего цвета, а не что-то иное; таким же образом "автоматное программирование" обозначает программирование в терминах автоматов, а не что-то иное, и если это словосочетание используется как-то иначе, это необходимо оговаривать. Что же касается программирования в терминах автоматов, то не может быть, как я уже неоднократно отмечал, никакой речи об авторстве Шалыто. Заметим, что утверждение "Автоматное программирование предложено Шалыто в 1991 году" всеми (кроме самого Шалыто и его учеников) воспринимается как утверждение о том, что именно Шалыто изобрёл программирование в терминах автоматов (на эту тему я тоже приводил ссылку). Именно это и есть причина недопустимости разговоров об "автоматном программировании" как об изобретении Шалыто, если только не будет сделано уточнение о том, что имеется в виду не просто автоматное программирование, но "автоматное программирование по Шалыто".
Должен отметить, кстати, что я пока не видел ни одной ссылки на работу, не аффилированную с Шалыто, в которой "термин" "автоматное программирование" использовался бы в том смысле, в котором это предлагаете делать вы. Сам же я уже приводил ссылки на работы, в которых автоматное программирование рассматривается как программирование в терминах автоматов, и никак иначе. Даже в книжке Непейводы, которую вы все так любите, автоматное программирование вводится как программирование в терминах автоматов. DrCroco 09:59, 22 января 2008 (UTC)Ответить

Всем сестрам по серьгам править

Позвольте взнести свое скромное IMHO:

Мне кажется, весь сыр-бор этот слега надуманный.

1. Способы реализации конечного автомата в виде программы известны давно.

2. Представление алгоритма (сценария) обработки данных (событий) в виде конечного автомата при решении ряда задач (синтаксический анализ, сетевые протоколы (см., например, RFC 793) также известно давно.

3. Основной "заслугой" г-на Шалыто со товарищи является утверждение автоматного подхода именно как парадигмы программирования, т.е. основного метода построения программ (сопровожденного, как они утверждают ( - каюсь, не знаком, и, видимо, уже никогда...) методами документирования, верификации...). Короче, заслуга в возвании "делайте все программы автоматами".

Минуточку, причём здесь вообще термин парадигма программирования? Парадигма программирования -- это стиль мышления (если угодно, осмысления процесса исполнения), а не "основной метод". В частности, регулярные выражения часто называют парадигмой программирования (я посмотрел бы на того, кто бы регекспы объявил основным методом построения программ). К воззваниям парадигмы вообще не имеют никакого отношения, напротив -- Роберт Флойд, который ввёл в обиход само это понятие, предлагал каждому программисту "расширять и совершенствовать репертуар его парадигм" (см. в статье про парадигмы цитату) DrCroco 20:57, 22 января 2008 (UTC)Ответить
ОК. Поймали на слове :). Вообще-то, если этот стиль мышления не воплощается в программе, то это парадигма не программирования, а чего-то еще. А если воплощается - то это и метод построения программы тоже. И в данном вопросе определяющим (разделяющим) было предложение ("воззвание", да простят ученые мужи мою игривость) группы Шалыто использовать автоматное программирование как основной (хуже того - единственный, если я правильно уловил) метод построения программы. Само собой, "воззвание" - это не сама парадигма, а ее краткое лозунгообразное выражение ("формула изобретения"), применяемое в целях привлечения внимания к собственно парадигме. После такого уточнения нет возражений ? // 212.192.248.30 23:23, 22 января 2008 (UTC)Ответить

Не вижу здесь никакого криминала нарушения научной этики.

Нарушение как раз в том, что утверждение о том, что-де именно Шалыто "предложил" автоматное программирование, большинством людей воспринимается как утверждение об авторстве не только "третьего пункта", но и второго, а то и первого. Чтобы понять, что имеется в виду только "воззвание", необходимо с этими господами влезть в дискуссию, причём, если внимательно посмотреть, некоторые из них этого тоже не понимают DrCroco 20:57, 22 января 2008 (UTC)Ответить

Формулу Лоренца (релятивистского сокращения времени) тоже ведь не Эйнштейн изобрел, а как раз Лоренц.

А Эйнштейн всего-навсего рискнул заявить, что "так на самом деле все и есть".

// 212.192.248.30 20:16, 22 января 2008 (UTC) ( контакт: gouriev.livejournal.com ), продолжение далееОтветить

О важности править

Честно, говоря, мне, человеку сложившихся стереотипов, трудно поверить, что эта самая "парадигма автоматного программирования" может существенно изменить качество программ или процесса их разработки (как это сделали в свое время структурное программирование или ООП).


Именно поэтому данный спор представляется мне не слишком важным.


Если господам угодно развивать и продвигать свою "парадигму", пусть их, давайте не будем им мешать (и тратить на это свои ресурсы).

"Свою" пусть продвигают сколько угодно (ну, до тех пор, пока администраторы Википедии не против). Только пусть при этом не делают утверждений, которые среднестатистическим читателем воспринимается так, будто именно они и придумали использовать автоматы в программировании. Я же им неоднократно предлагал решение проблемы, состоящее в переименовании статьи DrCroco 21:00, 22 января 2008 (UTC)Ответить
Я читал Вашу статью Парадигма программирования (кстати, снимаю шляпу, вот так, не стесняясь, при всех) и перешел по ссылке на Автоматное программирование, и у меня ни на миг(!) не мелькнуло предположение, будто именно они изобрели представление алгоритмов конечными автоматами. Я понял именно так, что они предлагают взять конечный автомат за единственную основу при проектировании и кодировании программ. Ну вот, еще одна R-технология, частный метод, обобщенный до абсурда, подумалось мне. Впрочем, по формальным признакам это именно Парадигма программирования. Вопрос, сколько практикующих разработчиков посчитают разумным эту парадигму разделять :).
Конечно, надо учесть, что Википедия не только и не столько для тех, кто 20 лет в теме, но главным образом для тех, кто по Википедии эту тему осваивает. Вспомнив об этом, могу только поддержать Вашу щепетильность в отношении терминов. Впрочем, решение, предложенное в следующей заметке, все равно представляется мне приемлемым. 212.192.248.30 23:41, 22 января 2008 (UTC)Ответить

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


Вывод: есть весомые основания данный спор поскорее прекратить.


Далее я попробую предложить способ, как это сделать.


// 212.192.248.30 20:09, 22 января 2008 (UTC) ( контакт: gouriev.livejournal.com ), продолжение далееОтветить

О терминах (предложения) править

Термин автоматное программирование или техника автоматного программирования предлагается понимать как технику алгоритмического решения задач, основанную на представлении алгоритма в виде конечного (или другого) автомата.


Надеюсь, я уловил суть того, что DrCroco выше называет, "термином, понятным любому программисту".


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


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

Я против такой трактовки термина парадигма, она не соответствует общепринятому. Если речь будет идти о "методологии Шалыто", или о switch-технологии, или о "методе мишек гамми", или ещё о чём-то, что невозможно спутать с программированием в терминах автоматов как таковым -- то я ничего против иметь не буду. Но термин автоматное программирование, а равно и синонимичный термин парадигма атоматного программирования означать могут ровно одно: программирование в терминах автоматов (или, если угодно, мышление в терминах автоматов). DrCroco 21:08, 22 января 2008 (UTC)Ответить
Мне кажется, как раз соответствует. "Целостный набор идей и рекомендаций, определяющий стиль написания программы" - Ваше определение. Опять же, мне представляется неправильным смешивать автоматное программирование как прием/ключевую идею/паттерн и парадигму автоматного программирования как "целостный набор идей и рекомендаций", систематизированно изложенный.
(К примеру, необходимость инкапсуляции я ощутил интуитивно задолго до того, как появилось (точнее, дошло до нас) определение этого термина и языки, поддерживающие эту идею. И не только ощутил, но и реализовывал инкапсуляцию в своих продуктах, кустарными средствами (речь о 80-х годах). Я же не утверждаю на этом основании, что изобретели инкапсуляции изобрели всем давно известное.)
Кроме того, для парадигмы программирования важна еще и поддержка со стороны инструментальных средств (например, специальных языков; попробуйте-ка покодировать ООП-программы на не-ООП-языках - мало не покажется :) ), и здесь Ваши оппоненты кое в чем даже преуспели. 212.192.248.30 00:15, 23 января 2008 (UTC)Ответить

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

Вот это я как раз только за, но, боюсь, сам Шалыто не согласится :) DrCroco 21:08, 22 января 2008 (UTC)Ответить
Я-то имел в виду "парадигму автоматного программирования им. Шалыто" :) теперь Вы снова против ? 212.192.248.30 00:15, 23 января 2008 (UTC)Ответить

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

Тогда уж не парадигму автоматного программирования, а парадигму Шалыто. Впрочем, мне б/м всё равно, что будет сказано на тему switch-технологии, поскольку тут никакиого терминологического конфликта нет (ну а оценивать новизну оставим учёным советам). DrCroco 21:08, 22 января 2008 (UTC)Ответить

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

Совершенно справедливо. Но для этого необходимо, чтобы группа Шалыто отказалась от своих претензий на монопольное владение термином автоматное программирование. Ещё раз отмечу, что я предлагал, например, просто переименовать нынешнюю статью автоматное программирование во что-то вроде автоматное программирование (методология Шалыто), и меня бы такой вариант вполне устроил. DrCroco 21:08, 22 января 2008 (UTC)Ответить

Спасибо за внимание. // 212.192.248.30 20:07, 22 января 2008 (UTC) ( контакт: gouriev.livejournal.com )Ответить

Возможно, дело в том, что статья неправильно начинается ? править

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

Если так, то любое применение конечного автомата является частным случаем автоматного программирования. В частности, использование программ lex и bizon или протокола TCP. Это, конечно, абсурд.

(К слову сказать, если программа реализует автомат, т.е. ее поведение описывается автоматом, это совсем необязательно означает, что она сама устроена как автомат. А "автоматное программирование в смысле Шалыто" скорее относится к программам, которые сами устроены подобно автоматам.)

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

(Я уж не говорю о том, что в ходе дискуссии сторонники "парадигмы Шалыто" объявили пассаж "применении конечных автоматов для описания поведения программ" неадекватным описанием их подхода.)

212.192.248.30 00:32, 23 января 2008 (UTC)Ответить

О терминах (прощание) править

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

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


Желаю всем участникам дискуссии наискорешим образом прийти к разумному компромиссу.

212.192.248.30 00:37, 23 января 2008 (UTC)Ответить

переписано полностью править

Текст статьи заменён полностью. Прошу обратить внимание на ссылки в разделе "история", в особенности на статью Питера Наура 1963 года, да и на все остальные ссылки тоже. DrCroco 10:52, 29 января 2008 (UTC)Ответить


А Вам не стыдно, не дав на меня даже ссылки. И это при том в журнале "Программирование". 2007. # 6, с.65-80 вышла наша статья "Инструментальное средство для поддержки автоматного программирования", в которой на с.67 сказано "В работе [27](моей книге SWITCH-технология. Алгоритмизация и программирование задач логического управления. СПб.: Наука, 1998. 628 с.)был предложен метод проектирования программ с явным выделением состояний, названный SWITCH-технологией, или автоматным программированием". Это опубликовано в ведущем научном журнале России, редакция которого находится на факультете, где вы работаете. Правда, ваше отношение к коллегам ясно по одной фразе из переписки суть, которой состоит в том, что все что выпускает Шкред не заслуживает внимания, и это несмотря на то, что авторов этих книг есть ваши коллеги.

Вы так и не нашли ни одной ссылки на этот термин раньше, чем он приведен у меня. В указанной выше книге, которая вышла в издательстве "Наука" 10 лет назад, во введении написано: "Введены понятия "автоматное программирование" и "автоматное проектирование программ".

С 15.09.2002 существует сайт, который я веду под названием: "Сайт по автоматному программированию и мотивации творчеству", на котором опубликованы работы по автоматному программированию десятков людей.

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

Вы хам, DrCroco. Либо напишите объективно, либо я все верно обратно!

Шалыто

Поскольку, удаляя свой текст, вы зачем-то прихватили ещё и мой, я считаю оправданным откат вашей последней правки (хотите -- удаляйте заново, но уже без моего текста). Заодно и отвечу. По поводу журнала «Программирование» я уже отвечал, не вижу смысла повторяться. Аналогичным образом обстоят дела и с книгами, сколь бы давно они ни выходили: автор имеет право на собственную терминологию в пределах своей работы, особенно если термин в самой же работе и вводится, так что это не повод для рецензентов отклонять рукопись, а для широкой публики -- не повод модифицировать лексикон. Далее, относительно ссылок и объективности: я вам предлагал конструктивные варианты (переименовать страницу с указанием на особое значение термина, сделать страницу disambiguation, и т.п.) В ответ никакого конструктива я не заметил, кроме разве что заведомо бессмысленных попыток убедить меня, что вы действительно являетесь автором автоматного программирования. Кроме того, я задавал вопрос, в чём же состоит новизна предложенного вами (поскольку так её и не вижу), и внятного ответа так и не получил; зато получил массу заведомо абсурдных утверждений о том, что-де применение автоматов для чего бы то ни было кроме лексического анализа суть ваша единоличная заслуга (как программист, я знаю, что это не так: см. выше про вызов select()). Естественно, пришлось потрудиться в поисках соответствующих работ, но в результате этого поиска я окончательно потерял даже намёки на понимание, в чём состоит новизна ваших исследований. Разве что ваша заслуга состоит в том, что вы первым применили словосочетание "автоматное программирование" (как таковое) в официальной научной печати, но такое даже на научный приоритет не тянет (это вообще разве что область торговых марок, но там, во-первых, нет личных неимущественных прав, а во-вторых, общезначимое понятие торговой маркой быть не может). Поскольку я преподаю студентам парадигмы программирования как отдельную дисциплину и в её рамках, разумеется, рассматриваю и автоматный подход, создавшееся положение вещей меня не устраивало, а правила работы в Википедии позволяли его исправить. Что я и сделал. Ну а на остальные ваши слова у меня отвечать желания нет, отмечу только, что слово -- не воробей. DrCroco 22:25, 30 января 2008 (UTC)Ответить
Впрочем, предложение использовать автоматное программирование в качестве единственной универсальной парадигмы -- это такой момент, без которого секция "сфера применения" выглядит неполной (мне это предложение крайне не нравится, но это уже моё личное мнение). Добавил ссылку, пусть будет. DrCroco 01:07, 31 января 2008 (UTC)Ответить

май 2008 года править

Господа! Что я могу сказать? Прискорбное зрелище... Не хочу никого обвинять в предвзятости (и упаси Боже, в некомпетентности), но складывается ощущение, что Википедия пасует в случае возникновения конфликта интересов. Даже если они носят оттенок научных.

Подозреваю, что вам в таком случае стоит сформулировать, в чём здесь заключаются мои интересы.

По-моему, ситуация предельно ясна. А.А.Шалыто (профессор, доктор технических наук, заведующий кафедрой "Технологии программирования" СПбГУ ИТМО) первым в нашей стране (по моей информации, если не прав -- с готовностью приму уточнения) использовал термин "автоматное программирование" и отнюдь не в бульварной прессе. Логично, что при его участии появилась статья в Википедии.

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

Так из-за чего разгорелся весь сыр-бор? Если я верно понял, инициировал эту кампанию борцов за справедливость Андрей Викторович Столяров (Croco, кандидат физико-математических наук, ассистент кафедры алгоритмических языков ф-та ВМиК МГУ). Судя по тому, что я прочитал в его блоге, он задался этой проблемой (восстановления "справедливости") еще в январе этого года. См. http://community.livejournal.com/ru_cs/7377.html И развил там же эту тему: http://croco.livejournal.com/112185.html

Что же его смутило? Судя по всему -- высказывание о том, что "автоматное программирование ПРЕДЛОЖЕНО А.А.Шалыто в 1991 году".

К этому необходимо добавить тот факт, что даже многие шалытовские студенты уверены, что именно он, Шалыто, первым придумал программирование в терминах явного состояния. Почему? Потому что, когда Шалыто заводит речь об автоматном программировании, он никому не рассказывает про какую-то там свою "конкретику". Он рассказывает о явных состояниях, о диаграммах, то есть об автоматном программировании именно в том виде, в котором эта парадигма (неважно при этом, как её называть) сорок лет как известна. О том, что этот подход к осмыслению программы --- вообще-то тривиальный и доступный любому программисту, и любым вменяемым программистом применяемый --- придуман был по меньшей мере в 1963 году (см. статью Наура по ссылке), Шалыто не рассказывает, и лишь будучи припёртым к стене теми, кто в курсе проблемы и умеет программировать, начинает лепетать что-то про "авторство термина".

Ok. Что проще -- обратить внимание на то, что г-ном Шалыто в 1991 г. предложен ТЕРМИН с соответствующим его раскрытием (теория это, технология, парадигма -- дело вторичное). Безусловно, использование конечных автоматов в программировании известно давно. Но трудно отрицать, что в научных работах А.А.Шалыто по автоматному программированию есть конкретика, раскрывающая авторскую трактовку применения конечных автоматов в программировании. Это его право как ученого. Равно как и право его и его коллег развивать это направление (что безусловно имеет место быть).

Мне почему-то казалось, что присваивать себе авторство того, что сорок лет как известно -- это в научной среде никогда не поощрялось, хотя и существовало сплошь и рядом. Что до его коллег, так даже тот же Кузнецов не считает Шалыто автором автоматного программирования, хотя они и писали статьи в соавторстве. Что до "конкретики", то Шалыто так и не потрудился объяснить, в чём эта конкретика состоит. Я полагаю, что никакой конкретики, обладающей научной новизной, в работах Шалыто не содержится. Я сам её там не нашел, Шалыто и его сторонники её не показали.

Если у кого-то возникло желание всенепременно внести свой посильный вклад в этот вопрос, то почему нельзя предложить новую статью (например, "Автоматы в программировании"), где высказать альтернативный взгляд на положение вещей?

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


Замечательно, что наше молодое поколение в лице А.В.Столярова так рьяно пытается отстаивать правоту СВОЕГО взгляда на программирование. Но, быть может, лучше убрать в сторону эмоции и урегулировать вопрос спокойно? Есть претензии к саморекламе -- Ok, это вполне может быть урегулировано на уровне внутренней переписки с редакторами Википедии и самим автором. Почему автор понятия должен в угоду конкретному оппоненту (и его амбициям) переделывать содержательную основу статьи (или когда автора вообще по сути отстраняют от этого, устраивая, на мой взгляд, просто публичную дискредитацию).

Где это тут мой взгляд на программирование? Или покажите, или я буду вынужден требовать извинений.

Что касается судьбы статьи по Движению за открытую проектную документацию, то, полагаю, она просто пала жертвой этой кампании г-на А.В.Столярова. В общем, печальное зрелище, господа.

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

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

Минуточку, это что, угроза? Вам не кажется, что вы выходите за рамки допустимого?

С уважением ко всем участникам обсуждения, Руслан Богатырев 06:05, 14 мая 2008 (UTC)Руслан Богатырев, ген. директор Национального института программированияОтветить

Ага, ещё одна титулованная особа. А что это за "национальный институт программирования"? Я вот всю жизнь программированием занимаюсь, но такого не знаю. Насколько я понимаю, никакого вклада в Википедию от Руслана Богатырева не поступало, зато он обладает личной страничкой, которая начинается с фразы "Немного о своём опыте", причём создана как раз 14 мая. Интересно, это что, такой новый вид кукловодства? DrCroco 11:55, 14 мая 2008 (UTC)Ответить
Уважаемый Андрей Викторович, бесполезно пытаться вывести меня на эмоции. Пустая затея. Давайте конкретно и по делу.
1. Об институте не знаете -- на моей странице указан адрес сайта, там достаточно информации. Впрочем, не понимаю, какое это вообще имеет отношение к делу. Мне реклама не нужна.
2. Общезначимость термина "автоматное программирование". С интересом выслушаю обоснование общезначимости и одинакового восприятия его программистами -- в каких изданиях есть раскрытие термина? Будьте уж так любезны, поясните. И, пожалуйста, без эмоций.
3. По поводу угроз я уже ответил на другой странице обсуждения другому оппоненту. Повторяться не имеет смысла.
4. Степенью вклада в развитие Википедии ни с кем тягаться не собираюсь. Полагаю, что у меня есть право высказывать свое мнение -- мнение стороннего наблюдателя и мнение специалиста в этой области.
Вы заварили кашу, поэтому Вам потребуется теперь достойно выйти из сложившейся ситуации, сохранив лицо. Для этого у Вас есть все возможности. Притом без ущемления Ваших амбиций. -- Руслан Богатырев
Полагаю, Вы напрасно теряете время. Сложившаяся ситуация мне представляется вполне нормальной (поскольку справедливость уже давно восстановлена, а статью Шалыто, заметим, даже не я выставил к удалению -- хотя я, безусловно, приветствую принятое администраторами решение), никакой угрозы для своего лица я тут не вижу. Разве что время терять приходится, но к этому я изначально был вполне готов. Напротив, чем дольше данная тема муссируется, тем больше внимания привлекается к г-ну Шалыто и его абсурдным притязаниям, так что время работает явно против него (и уж точно не против меня, я действую в рамках правил Википедии, на основании собственного опыта и в рамках собственных убеждений). И последнее. С вами я ничего обсуждать не намерен, поскольку (а) вы не приводите новых аргументов, не дали себе труда ознакомиться с уже высказанными возражениями (я уже эти все возражения писал по пять-шесть раз, надоело) и (б) моё время стоит денег. И, кстати, рекомендую вам ознакомиться с действующими в Википедии правилами, которые вы уже нарушили по доброму десятку пунктов. До свидания. DrCroco 14:43, 14 мая 2008 (UTC)Ответить
"Справедливость" восстановлена? Пока у инициаторов пересмотра статьи не будет доказательств общезначимости термина "автоматное программирование", который давно предложен и подкреплен конкретными научными публикациями А.А.Шалыто, трудно говорить о какой-то справедливости. Мою просьбу дать "ссылки в студию" Вы проигнорировали. Это весьма показательно. Что по сути получается? Кто-то СЧИТАЕТ нормальным за автора термина трактовать термин так, как считает нужным. Замечательная справедливость! Тут действительно нечего и обсуждать. Руслан Богатырев 22:04, 14 мая 2008 (UTC)Ответить
Понятия "автор термина" не существует в природе. Доказательства общезначимости термина давно приведены, и их более чем достаточно. Повторяю, вы напрасно теряете время. DrCroco 22:09, 14 мая 2008 (UTC)Ответить
Ok. Назовите автора, год и источник публикации, где использовано словосочетание "автоматное программирование". Руслан Богатырев 22:19, 14 мая 2008 (UTC)Ответить
С подобными требованиями ко мне уже обращались, и я подробно объяснил, по каким причинам наличие или отсутствие данного термина в официальной печати не имеет никакого отношения к его статусу. Повторяться в сотый раз я не намерен. Ещё раз вынужден призвать вас прекратить тратить время попусту. Если вы недовольны решением администраторов либо моими действиями -- можете их обжаловать в установленном порядке. До свидания. DrCroco 23:48, 14 мая 2008 (UTC)Ответить
Занятно. Если есть "общезначимое сочетание", то эта общезначимость чем-то должна быть подкреплена, кроме желания конкретного участника обсуждения (в Вашем лице). Общезначимое сочетание (в науке и технологиях) появляется не в устном народном творчестве, а в классических работах, энциклопедических и иных словарях, справочниках, периодических изданиях и т.п. Приведите хотя бы один факт упоминания этого СЛОВОСОЧЕТАНИЯ в публикациях, из которого будет понятна ОБЩЕЗНАЧИМОСТЬ. До той поры пока это не сделано, все остальное вообще бессмысленно обсуждать. Вы и сами должны это прекрасно понимать. В обсуждении я этого не вижу. Кроме общих слов, отражающих ВАШУ позицию. Складывается странная ситуация: автора направления по сути отстраняют от трактовки его собственного понимания термина (за него и против его воли начинают термин коллективно трактовать по-своему). Отстраняют от раскрытия термина, который он же и ввел в публичный оборот (как минимум, в нашей стране). Пока не будет убедительных доказательств ОБЩЕЗНАЧИМОСТИ термина "автоматное программирование" (именно это и может дать основу для пересмотра трактовки Шалыто), а мне они не известны, право будет на стороне А.А.Шалыто. Что касается правил Википедии и действий администраторов, то, разумеется, на своем ресурсе они вправе принимать те решения, которые считают правильными. Другое дело, что создается крайне нехороший прецедент борьбы за "справедливость". Руслан Богатырев 06:10, 15 мая 2008 (UTC)Ответить
Ровно на эти "аргументы" я также уже отвечал, причём именно на этой странице (см. выше), причём не по одному разу. Не вижу смысла повторяться. DrCroco 06:37, 15 мая 2008 (UTC)Ответить
В чем проблемы повторить? Чем подкреплена ОБЩЕЗНАЧИМОСТЬ словосочетания "автоматное программирование"? Опросом общественного мнения? Где результаты? Кто и когда проводил? Публикациями? Где они? Чем еще? Руслан Богатырев 06:41, 15 мая 2008 (UTC)Ответить
Я же говорю, я на это всё уже отвечал и повторяться не стану. Не нравится -- жалуйтесь администраторам или в арбитраж. Хотя я бы рекомендовал для начала собственную деятельность привести в соответствие правилам Википедии. DrCroco 07:01, 15 мая 2008 (UTC)Ответить
Понятно. Конкретного ответа я от Вас по всей видимости так и не дождусь. Что касается жаловаться... К чему? Я просто поставил в известность об этой ситуации администраторов Википедии, а дальше -- пусть ситуация развивается своим чередом. Руслан Богатырев 07:09, 15 мая 2008 (UTC)Ответить
Внимание! По данным StopBadware, с сайта т.н. «национального института программирования» распространяются вирусы. Будьте осторожны.WinXA 16:01, 14 мая 2008 (UTC)Ответить
Отлично. Прокомментирую, поскольку это имеет отношение к информации, на которую ссылается моя страница. Сайт НИПа не использует никаких движков. Там размещены чистые HTML-страницы (даже без JavaScript, если не считать маленького кода счетчика посещений). В феврале была проведена атака на наш сайт, где на главную страницу внедрили левые "скрытые ссылки" и буквально через пару дней я получил уведомление от Google о том, что сайт внесен в черные списки и что теперь надо проходить (!) процедуру реабилитации. Мы этого делать не будем. Код после атаки устранили сразу же. Дополнительные меры по безопасности предприняли. Если Google или иная служба считает, что она вправе автоматически (по сканированию сайта) заносить его в черные списки, то пусть также автоматически из них и исключает. Прошло достаточно времени, но этого сделано не было. Лишний раз показывает, как пользуясь своим влиянием в Интернете, можно остальных строить под свои правила. Руслан Богатырев 22:04, 14 мая 2008 (UTC)Ответить
Даже если и так, то «в чужой монастырь со своим уставом не ходят». Лишний раз показывает, что вы предпочитаете игнорировать существующие в интернете правила. // WinXA 06:06, 15 мая 2008 (UTC)Ответить
Мы выходим в сильный оффтопик, но ни Google, ни какая иная подобная компания (тем более американская) не может устанавливать подобные правила на нашей территории. Есть официальное юридическое лицо (НИП), зарегистрированное в установленном порядке в рамках правового пространства РФ. У этого юр.лица есть свой сайт. Он действует и подчиняется тем нормам, которые регулируют правоотношения на территории РФ. Все остальное -- от лукавого. Кстати говоря, это относится к любому источнику в Интернете. Как только возникает конфликт интересов, где участвуют конкретные физические и юридические лица, правила Интернета (или конкретного сайта) не имеют правовой силы. Приведу простой пример, который уже приводил в статье, где выступал с резкой критикой Лаборатории Касперского, которая посчитала возможным узурпировать право признавать вредоносными программы по своим критериям (которые постоянно меняются) -- на Западе известны прецеденты судебных решений в отношении именно этой компании, в которых попранные подобным образом права (занесение в "черный список" по хотению конкретной компании) довольно быстро восстанавливались. При желании это можно делать и в нашей стране. Что касается Google и его альянса -- меня и моих коллег их ТОЧКА ЗРЕНИЯ не интересует. Это не правовой институт, которому официально делегированы права принимать подобные решения. А давить массой -- это уже не право. Руслан Богатырев 06:31, 15 мая 2008 (UTC)Ответить
NB: подобными доводами обычно пользуются спаммеры, недовольные своим попаданием в блокировочные списки. Хотя, конечно, это уже давно и прочно оффтопик. DrCroco 06:37, 15 мая 2008 (UTC)Ответить
Отнюдь. Дело много серьезнее, чем некоторые полагают. И пример с Google я привел здесь не для красного словца. Руслан Богатырев 06:43, 15 мая 2008 (UTC)Ответить
Нет никакого офф-топика, ведь по отношению к Википедии вы ведёте себя так же, как по отношению к Гуглу: считаете что вас обидели, что правила на вас не действуют, вместо того, чтобы идти простым путём использования существующих правил. // WinXA 07:06, 15 мая 2008 (UTC)Ответить
Вы сильно заблуждаетесь. Посудите сами, какая у меня может быть ОБИДА на Википедию? На манеру общения здесь некоторых оппонентов? Так это вопрос культуры. И я спокойно воспринимаю любые переходы на личности и эмоциональные выпады. Перечитайте мои сообщения -- констатация фактов, точка зрения по сути обсуждения и подчеркивание уважения к собеседнику. Что касается Google -- у меня там вообще нет никакой обиды. Вы спросили -- я ответил. Их точка зрения меня не интересует. Если кто-то руководствуется их точкой зрения -- это дело конкретного человека. Руслан Богатырев 07:15, 15 мая 2008 (UTC)Ответить

Примеры на Си/Си++ править

Мне очень не нравятся приведенные примеры на Си/Си++. По-моему уж слишком странный стиль написания. Особенно в подтеме "Использование объектно-ориентированных возможностей" Otacon 17:44, 3 февраля 2009 (UTC)Ответить

Мне кажется, что всевозможные парсеры (и не только) вполне естественно реализуются с помощью паттерна Interpreter. Это и есть действительно объектно-ориентированный стиль. Overrider 07:49, 24 мая 2009 (UTC)Ответить
  • Эти примеры нужно как-то сократить, возможно, с использованием псевдокода, чтобы была понятна суть (через синтаксис C++ неподготовленному читателю рассмотреть сложновато). Остальное - в викиучебник или викиуниверситет. РоманСузи (обс.) 08:40, 3 июля 2023 (UTC)Ответить

Автоматное программирование - отнюдь не панацея править

см. ниже КузнецовБП 12:26, 27 июля 2011 (UTC)Ответить

Автоматное программирование - Не есть панацея (вторая редакция) править

Апологеты использования автоматов в программировании к месту и не к месту, обычно утверждают, что существенно снижается число ошибок в программах и трудоемкость отладки.
Как автор автоматных программ, впервые использовавший автоматы в 1973 году и регулярно применявший их на протяжении почти всей программисткой практики (до 2003 г), написавший серию статей по теме "автоматное программирование" и несколько разделов об автоматных программах в докторской диссертации, осмелюсь пойти вопреки их представлениям и ранее имевшему место своему собственному
Докладываю.
Автоматное программирование ничуть не лучше любого другого ни по числу допускаемых ошибок, ни по срокам трудоемкости создания и отладки программ. В этом я убедился и в период активного использования как табличного, так и спискового (Switch, Любченко, Зюбин) задания автоматов в программах (к месту и не к месту) и в последующий период "безавтоматного программирования" с 2003 года по нынешний день (да и до этого, когда "забывал" об автоматах). Более того, автоматное программирование доступно отнюдь не большинству, менее понятно и более трудоемко.
Перечислю типичные ошибки, сопровождающие автоматное программирование, как из собственного, так и заимствованного опыта, только лишь на примере составления диаграммы состояний конечного автомата:
1) не учтенные состояния автомата, вызванные незнанием предметной области;
2) дублирование (избыточность) состояний, приводящее к непредсказуемому поведению программы;
3) не учтенные переходы;
4) лишние переходы;
5) неверно ориентированные переходы;
6) неортогональность входного алфавита;
7) неверное назначение приоритетов переходов при неортогональном алфавите;
8) не учтенные входные воздействия и неполнота входного алфавита;
9) не полный учет букв входного алфавита;
10) путаница, связанная с неверным отождествлением входных воздействий и буквами входного алфавита (наиболее распространенная ошибка);
11) неверные булевы формулы, отождествляемые с буквами входного алфавита и помечающие переходы (см. п.6);
12) не учтенные выходные воздействия, в особенности как реакция на ошибочное поведение управляемого объекта и самого управляющего автомата и связи управляющего и операционного автоматов с объектом управления;
13) неверная пометка состояний и переходов буквами выходного алфавита;
14) неверное отождествление букв выходного алфавита с выходными воздействиями;
15) забытое обнуление или продление выходного воздействия;
16) Путаница в отметке переходов и состояний буквами выходного алфавита при использовании совмещенной модели (Мили и Мура) автоматов;
17) не прослеживаются полные пути в диаграмме состояний;
18) всевозможные ошибки в полных путях при использовании обратных связей в диаграмме состояний
19) другие ошибки. Только одного этого перечня вполне достаточно, чтобы скомпрометировать "непорочность" автоматного программирования. И его мнимые достоинства связаны с тем, что "каждый кулик хвалит свое болото", чем и я в свое время безапелляционно сообщал научному и инженерному сообществам в своих публикациях (см.,например, мою статью "Психология автоматного программирования"). В 2003 году я поставил перед собой задачу: начисто забыть об автоматах там, где они не принципиальны. Таких задач за восемь (8!) лет набралось 100 процентов. Они входили в состав нескольких программных комплексов различного назначения. Я обходился классическими флагами (от одного-двух, до максимум трех) и значениями модифицируемых переменных, а также чисто языковыми конструктивными средствами. Процесс оказался много проще и менее трудоемким, зато более естественным, и тексты программ короче и нагляднее. Пропагандируемые трудности по использованию флагов оказались блефом, никаких вообще трудностей не возникало. Аналогом состояний были естественные ситуации, связываемые с состоянием входной, выходной информацией и промежуточной информации, и таких ситуаций много больше, чем искусственно и неполно вводимых "состояний", что предохраняет от возникновения ненужных ошибок за счет более полного множества действительно имеющих место ситуаций-состояний. Работа с флагами для грамотного программиста принципиально не представляет трудностей. Да и вовсе не во флагах дело, а в способности мгновенно, разом и в полном объеме мысленно охватить АЛГОРИТМ на понятийном уровне, а уж использовать механизмы флагов, модели конечного автомата или вовсе только лишь языковые средства - дело лишь только в освоенной техники и навыках.

Так что, автоматное программирование - это субъективный (или по принуждению) выбор. Есть задачи, которые легче делать на автоматах, такие, как, например, в трансляторах. И то, был у меня опыт разработки работающего ныне транслятора абсолютно без использования автоматов. В области логического управления - то же самое, можно иногда обойтись не только без автоматов, но и без флагов, если выходных данных достаточно. Вообще, на мой взгляд, для задач логического управления использование универсального процессора менее разумно, чем микросхемы программируемой логики.
Ну, а уж если взять цифровую технику, которая по мнению некоторых немыслима в проектировании без автоматов Мили и Мура, то ее бы сейчас вообще не существовало, будь разработчики уперты на этих автоматах (смотри патентную литературу по цифровой и импульсной технике).
Резюме. Прежде, чем упершись рогом в автомат Мили или Мура, попробуйте и другие варианты. Они могут оказаться и проще и красивее. И помните, что в любой серьезной деятельности должно не ограничиваться единственным вариантом, что могут подтвердить и ученые и разведчики и настоящие инженеры.КузнецовБП 22:54, 20 мая 2011 (UTC)Ответить