当前位置:  开发笔记 > 编程语言 > 正文

是否有内置状态机构造的编程语言?

如何解决《是否有内置状态机构造的编程语言?》经验,为你挑选了2个好方法。

我很好奇是否有一种编程语言将状态机(类似于boost :: statechart)作为主要语言构造.

类比 - c#有委托,其中java使用观察者模式,C有回调.Perl和python有内置哈希,而C++和java需要一个库.

更新:

这应该是C++,C#,Java,Lisp等意义上的通用编程语言......

我的意思是"成熟"的状态机,在Harel形式主义或UML状态图或boost :: statechart的层面上都有所有的铃声和​​口哨声.



1> Jörg W Mitta..:

Ragel是一种状态机语言.IOW,它不是一种支持状态机的语言,它是一种支持状态机的语言.这显然意味着它不是图灵完整的,但谁需要呢?

更准确地说,Ragel是一个状态机编译器,它以类似regexp的语言描述状态机,并用C,C++,Objective-C,D,Java或Ruby生成该状态机的实现.(想想yacc但是对于状态机而不是LALR(1)表解析器.)Ragel的主要目的是解析二进制协议(例如网络协议或磁盘文件格式),但它也可以用于文本.

使用Ragel的一个着名例子是用于Ruby的Mongrel webserver:它的HTTP内核是用Ragel编写的,这使得它非常快速和安全.事实上,HTTP内核非常好用,它在不同的应用程序中被重复使用了很多次:Thin,Unicorn和Rainbows也是网络服务器,实际上是Mongrel的直接竞争对手.Ebb是反向HTTP代理.RFuzz是一种用于Web应用程序的模糊测试工具.此外,一些安全工具使用它.

Ragel还允许将主机语言中的代码嵌入到状态机中,从而使其成为图灵完备的,并且不仅能识别而且能够解释协议.

通常,通过协程(例如Lua)或continuation(例如Scala)或(例如PHP)或适当的尾调用(例如Scheme)支持高级用户定义控制流的每种语言GOTO都可用于轻松实现状态机.(Generators(Python)aka iterators(C#),它们基本上是"糟糕的协同程序",可能会也可能不会工作,这取决于你对"工作"的定义.)以及任何具有灵活语法(例如Ruby)或支持metasyntactic抽象的语言(例如Clojure)可用于描述状态机.(对非ASCII标识符的支持也有帮助,因此您可以使用状态机的实际箭头.)

这意味着如果你结合两个,并使用支持语言尾调用 metasyntactic抽象,你会得到非常好的状态机,而不需要本地语言支持.Shriram Krishnamurthi在首届轻量级语言会议上发表了一篇名为"Perl之前的猪"的着名演讲,其中他演示了在计划中实施FSM.(这是幻灯片,录音和解释代码的纸张).代码本身是26行(实际上很短的行)宏,它允许你编写这样的代码:

(define my-regex
  (automaton init
             [init : (c ? more)]
             [more : (a ? more)
                     (d ? more)
                     (r ? end)]
             [end : accept]))

这是与正则表达式对应的状态机的规范c(a|d)*r.它不仅是一个规范,而且是一个实现该状态机的可运行程序.

我可以这样称呼它:

(my-regex '(c a d a d d r))

在这种情况下得到结果#t(这是方案说的true).



2> Jim Ferrans..:

基于David Harel的StateChart形式主义(支持分层和并行状态机),有一种新的基于W3C XML的状态机语言SCXML.

Apache Commons有一个基于Java的SCXML实现:

Commons SCXML是一个旨在创建和维护Java SCXML引擎的实现,该引擎能够执行使用SCXML文档定义的状态机,同时抽象出环境接口.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有