Scripting Erlang中的分层状态机实现

Scripting Erlang中的分层状态机实现,scripting,erlang,dsl,fsm,Scripting,Erlang,Dsl,Fsm,我正在计划一个基于回合的游戏(一种棋盘游戏),后端可能会在Erlang中完成。游戏逻辑部分似乎适合层次化状态机,但我不确定如何在Erlang中实现它 也许我可以为每个子fsm生成一个单独的进程,但不确定这是否可行 另一种选择是嵌入脚本语言或为此创建DSL 你觉得怎么样 谢谢。作为一个起点,我建议您看一下。您可能想更详细地了解和。我是问题的原始作者(事实上,我想把这个问题称为我的问题,但我不知道如何解决) 我已经知道OTP提供的所有东西,包括gen_fsm 其思想是使用分层状态机,gen_fsm是

我正在计划一个基于回合的游戏(一种棋盘游戏),后端可能会在Erlang中完成。游戏逻辑部分似乎适合层次化状态机,但我不确定如何在Erlang中实现它

也许我可以为每个子fsm生成一个单独的进程,但不确定这是否可行

另一种选择是嵌入脚本语言或为此创建DSL

你觉得怎么样


谢谢。

作为一个起点,我建议您看一下。您可能想更详细地了解和。

我是问题的原始作者(事实上,我想把这个问题称为我的问题,但我不知道如何解决)

我已经知道OTP提供的所有东西,包括gen_fsm

其思想是使用分层状态机,gen_fsm是一种普通状态机。为了跟踪游戏的回合、阶段等,我认为像gen_fsm这样简单的状态机是不够的


无论如何,我一直在进一步调查,我想我会使用erl-lua,这样我就可以在所有的游戏逻辑中使用lua。一旦它开始工作,我可以搜索瓶颈并将其转移到C实现或其他任何地方。

@codecaster您可以使用gen_fsm跟踪状态,只需在fsm状态内构建额外的状态级别。。。然而,erl-lua也会起作用。我用它构建了一个名为erlmon的监控工具——我们在erl-lua崩溃时遇到了一些问题,所以请记住它不是没有bug的。另外,有了对Nifs的新支持,我正在等待有人为基于nif的lua编写一个新的驱动程序-您可能想四处看看-我还没有看到任何人构建一个驱动程序。

我将在这里发表评论,因为我无法在其他地方发表评论。AFAIK,基于NIF的方法无法解决问题,NIF崩溃的后果似乎与驱动程序中的链接相同。看这里: