LINUX.ORG.RU

Обновился FSME


0

0

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

Доступно только с CVS. Файловый релиз сделать пока не могу.

cvs -d:pserver:anonymous@cvs.sourceforge.net :/cvsroot/fsme login cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net :/cvsroot/fsme co fsme

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net :/cvsroot/fsme co fsmc

Генерацию текстов для Python обновлю попозже.

>>> Взять с CVS

Не компилячится. Может, надо что-нить заапгрейдить? Дистрибутив ASPLinux 9.0, QT v3.1.1, gcc v3.2.2

l -I../diagram -I.. -I/usr/lib/qt-3.1/include -I.ui/ -I.moc/ -o .obj/semantic.o syntax/semantic.cpp syntax/semantic.cpp: In member function `bool Semantic::BlockList::canBreak() const': syntax/semantic.cpp:133: `compose2' undeclared (first use this function) syntax/semantic.cpp:133: (Each undeclared identifier is reported only once for each function it appears in.) make[1]: *** [.obj/semantic.o] Ошибка 1 make[1]: Выход из каталог `/home/tigra/foo/fsme-0.8/ui' make: *** [sub-ui] Ошибка 2

anonymous
()

конечные автоматы - это finite state machines? так уже давно есть неплохая QFSM (http://qfsm.sourceforge.net/).

anonymous
()
Ответ на: комментарий от anonymous

А qfsm исходники на C++ и python генерит? imho, это разные вещи.

anonymous
()
Ответ на: комментарий от anonymous

gmgm... i fixed that.. it's due to move compose2 from std to __gnucxx... I'll try to fix it in the nearest future.

anonymous
()
Ответ на: комментарий от anonymous

Hey, can't you tell me where is compose2 on gcc-3.2.2?

P.S. It works well on gcc-3.3.x

anonymous
()
Ответ на: комментарий от anonymous

There are #if GNU_MINOR.blablabla at the beginning of the file. Try to decrease it from 3 to 2. It should help

adarovsky ★★★★
() автор топика
Ответ на: комментарий от anonymous

> объясните в двух словах, что такого революционного в таком подходе ?

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

http://www.softcraft.ru/auto.shtml

anonymous
()
Ответ на: комментарий от anonymous

(вдогонку) вот пример навскидку:

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

1) если выполнено условие выхода (заготовка обработана или безнадёжно испорчена :) ) конец цикла, иначе:

2) определение следующей функции-действия (замена инструмента) с помощью функции переходов,

3) вызов функции-действия (обработка инструментом заготовки) из массива-обоймы по адресу или смещению от предыдущей

Выгодность такого подхода заключается в том, что легко добавляются операции-обёртки (всё в одном месте - в теле цикла), например:

1) общение с базой данных легко переводится на транзакции привязанные к определённым состояниям системы - транзакция стартует перед вызовом функции-действия, коммит производится если функция-действие вернулась без ошибок, а откат, соответственно, если была ошибка,

2) тайминг операций организуется также тривиально - оборачиванием вызова функции-действия началом и концом тайминга соответственно.

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

anonymous
()
Ответ на: комментарий от anonymous

(ещё раз вдогонку ;) ) пример сервиса я взял из своей практики, смотри проект GAR на моей страничке - http://filine.home.cern.ch/filine/, правда я его сильно переделал и скоро выложу реинкрнированную версию, но для ознакомления сгодится

filin ★★
()
Ответ на: комментарий от anonymous

Не совсем. Нельзя про нити забывать. Рано. Есть программирование логики приложений, а есть разбивка их на параллельные куски. Ничем не пересекающиеся вещи.

Для программирования с нитями лучше использовать сети Петри, но и автомат может играть тут не последнюю роль.

Автомат можно представить как матекс с логикой, если в генерации текста добавить матекс на функции А. Будет очень интересно.

adarovsky ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.