Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Май 29, 2007 01:13:53

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

finite state machine на Питоне

Возникла необходимость реализации.
Пока нашел только два достойных варианта:
fsm из panda3d и epsilon.modal из divmod.org команды. modal, кажется, куда лучше.
Может, еще что посоветуете?
Хоть тема в вебе и не нужна практически, но в standalone клиентах часто требуется



Офлайн

#2 Май 29, 2007 07:31:18

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

finite state machine на Питоне

По своему опыту знаю, что под FSM часто понимают весьма разные вещи. Может уточните?

Названные вещи не видел.
Но видел рецепт в поваренной книге на сайте ActiveState. Очень просто и логично.
Плюс пытался пользоваться генератором SMС. Ну и гадость этот SMС скажу я вам. Хотя… на вкус и цвет…
Кажется еще в проекте WhatOS было что-то.

Посмотрю названные вами либы. Может пойму, что именно вам нужно.



Отредактировано (Май 29, 2007 09:45:07)

Офлайн

#3 Май 29, 2007 08:17:50

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

finite state machine на Питоне

Так интересно узнать новые термины (вернее не новые, но мне пока неизвестные). Расскажите, пожалуйста, на русском языке, что такое “finite state machine”? заранее благодарна



Офлайн

#4 Май 29, 2007 09:17:18

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

finite state machine на Питоне

По рюсски – это конечные автоматы.

Вот здесь неплохое введение для чайников: http://softcraft.ru/design/ap/ap01.shtml

А здесь: http://softcraft.ru/auto.shtml
туча статей на эту тему, для более глубокого погружения.

Можно видеть, что автоматное движение имеет несколько основных направлений и идеологий: switch и КА.
Также неплохо почитать статью о состоянии дел за рубежом, искать по ключевому слову “синхронное программирование” (гугля с википедией рулят)
http://www.softcraft.ru/auto/switch/syncprog/index.shtml

Вот на википедии: 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

Вобщем для старта этого будет достаточно.



Отредактировано (Май 29, 2007 09:22:21)

Офлайн

#5 Май 29, 2007 09:42:27

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

finite state machine на Питоне

bialix
Посмотрю названные вами либы. Может пойму, что именно вам нужно.
Посмотрел. В общем понятно к чему вы стремитесь.
Хотя по-прежнему считаю, что FSM нужно описывать не программно, а через понятные человеку диаграммы или что-то типа специализированного DSL. А из этого понятного описания генерить код автоматом.

Имел очень приятный опыт общения с генератором IAR Visual State (для Си и за деньги).

Пробовал SMC. Остался разочарован.
http://smc.sourceforge.net/

Были мысли написать свой DSL для автоматов с питоно-подобным синтаксисом. Но пока мне лень.

А у divmod есть где-то дока на пакет Epsilon или Use the source, Luke?



Офлайн

#6 Май 29, 2007 10:26:10

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

finite state machine на Питоне

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

В epsilon введение состояний как внутренних классов с их последующей инструментацией мне понравилось. Хорошо разносит логику различных режимов.
IAR видел. Не прижился почему-то. Наверное, я тогда думал несколько по другому.
Для С++ есть statechart (официально включена в boost) и fsm - лежит в boost vault. Обе - вполне изящны.

У divmod традиционно туго с документацией. Но неплохо с тестами, а epsilon весьма невелика. Мне тестов (а потом и исходников) вполне хватило.

P.S. Питон вполне может заменить DSL - по моему глубокому убеждению.
Примерно как в nevow.tags - еще одном продукте от divmod:
a(href='url')['This is', b, ‘and’, i, ‘text’]



Отредактировано (Май 29, 2007 10:28:12)

Офлайн

#7 Май 29, 2007 11:07:15

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

finite state machine на Питоне

Андрей Светлов
мне нужно описать поведение клиента. Естественнее всего оно выражается в два десятка состояний с довольно нетривиальными переходами. Так что без FSM обойтись сложно.
У меня практически все сишные программы строятся на автоматах. Поэтому мне без них вобще обойтись сложно. А питон – ИМХО – слишком сложно или некрасиво там автоматы делать руками, поэтому я там не заморачиваюсь.

Андрей Светлов
У divmod традиционно туго с документацией. Но неплохо с тестами, а epsilon весьма невелика. Мне тестов (а потом и исходников) вполне хватило.
Исходники-то я прочел и кажется понял как оно предполагается работать. Просто хотелось уточнить.

Андрей Светлов
P.S. Питон вполне может заменить DSL - по моему глубокому убеждению.
Примерно как в nevow.tags - еще одном продукте от divmod:
a(href='url')['This is', b, ‘and’, i, ‘text’]
Не-а. По моему глубокому убеждению – не может. Слишком нечитаемо получается, слишком много мусора.
Теже кавычки надо городить, см. ваш же пример.
DSL на то он и domain-specific language, чтобы кратко и изящно описывать некую предметную область.
Я использовал питон как DSL в нескольких проектах – слишком много ненужных знаков пунктуации надо городить, чтобы соблюсти правильный питон-синтаксис.
Это плохо, если на таком DSL будет писать не питонщик. Это мой реальный опыт.
Тот же scons – все вроде хорошо, кроме изврата с записью списка файлов.
Так что не согласен я с вами, но спорить долго и нудно не буду.



Офлайн

#8 Май 29, 2007 11:11:59

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

finite state machine на Питоне

вот кстати тот рецепт из поваренной книги, который я упоминал:
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/146262

так, до кучи. там нет действий по выходу и входу из/в состояние, но наверное их можно доточить по принципу epsilon, при желании конечно. видел код этого рецепта использовался в каком-то реальном OSS проекте. Не помню каком.



Отредактировано (Май 29, 2007 11:13:05)

Офлайн

#9 Май 29, 2007 19:45:50

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

finite state machine на Питоне

По поводу DSL спорить точно бессмысленно. Это почти как религия, и каждый подход имеет свои достоинства и недостатки.
Посмотрел WhatOS и aspn coockbook.
WhatOS - интересно, но С специфика сильно проявляется. aspn - простенько до неудобства. У меня каждое состояние - довольно большая вещь, скорее не атом, а режим работы программы. Так удобнее. Иначе состояний появляется бесчетное множество и прописывать переходы между ними становится затруднительно.
Немного докрутил (были проблемы с наследованием состояний), и доволен. Состояния можно разносить по отдельным модулям - удобно.
По сути наследник mode рассматривается как специфическая запись контейнера именованных функций, не более того. И экземпляр его не создается.
Занятная вещь получилась



Офлайн

#10 Май 30, 2007 02:10:52

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

finite state machine на Питоне

Да, кстати, глупый вопрос.
Как связаться с ребятами из divmod.org?
То, что я доделал к их epsilon.modal у них же помечено как todo: fix this bug.
В процессе дальнейшей работы мы скорее всего еще несколько расширим функциональность (нам важны конечные автоматы, а у них почти-почти то).
Я не прочь отправить им патч к модулю и тесту - авось включат.
Кстати, их тест весь модуль не покрывал - была нестыковочка.
Вот только на их trac guest новый тикет создать не может. А почтового адреса, чтобы послать письмо, я так и не нашел.
Что делать?

Написал, и самому смешно.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version