Реализация иерархического конечного автомата в Erlang - PullRequest
1 голос
/ 19 июля 2010

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

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

Другой вариант - встроить язык сценариев или создать DSL для этой цели.

Как вы думаете?

Спасибо.

Ответы [ 3 ]

1 голос
/ 21 июля 2010

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

Я уже знаю обо всем, что предлагает OTP, включая gen_fsm.

Идея состоит в том, чтобы использовать конечный автомат HIERARCHICAL, а gen_fsm - это простой конечный автомат. Чтобы отслеживать ходы игры, фазы и т. Д., Я не думаю, что достаточно простого автомата, поскольку gen_fsm будет достаточно.

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

1 голос
/ 22 июля 2010

@ codecaster вы можете использовать gen_fsm для отслеживания состояния и просто встроить дополнительный уровень состояния в состояние fsm ... однако, erl-lua также будет работать. Я создал инструмент мониторинга под названием erlmon - у нас были некоторые проблемы с аварийным завершением работы erl-lua, поэтому имейте в виду, что он не свободен от ошибок. также с новой поддержкой Nifs я жду, когда кто-нибудь напишет новый драйвер для lua, основанный на nif - возможно, вы захотите посмотреть на это - я еще не видел, чтобы кто-нибудь создавал его.

1 голос
/ 19 июля 2010

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

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