是否有编译语言与内置
我只是好奇,如果有一种编程语言具有状态机(类似于boost :: statechart)作为主要语言结构。
类比 - c#拥有代表,其中java使用观察者模式,C具有回调。 Perl和python具有内置哈希,而C ++和java需要一个库。
更新:
这应该是C ++,C#,Java,Lisp意义上的通用编程语言...
我的意思是“成熟的”状态机,它具有Harel形式主义或UML状态图或boost :: statechart级别上的所有铃声和哨声。
Ragel是一种状态机器语言。 IOW,它不是一种也支持状态机的语言,它只是一种支持状态机的语言。 这显然意味着它不是图灵完备的,但谁需要?
更确切地说,Ragel是一个状态机编译器,它以类似于正则表达式的语言描述状态机,并用C,C ++,Objective-C,D,Java或Ruby生成状态机的实现。 (可以考虑yacc
,而不是LALR(1)表分析器。)Ragel的主要目的是解析二进制协议(如网络协议或磁盘上的文件格式),但它也可以用于文本。
使用Ragel的一个着名例子是Ruby的Mongrel Web服务器:它的HTTP内核是用Ragel编写的,这使得它非常快速和安全。 HTTP内核实际上非常好,已经在不同的应用程序中重复使用过很多次:Thin,Unicorn和Rainbows也是Web服务器,事实上它们直接与Mongrel竞争。 Ebb是一个反向HTTP代理。 RFuzz是一款针对Web应用程序的模糊测试工具。 另外,一些安全工具使用它。
Ragel还允许将主机语言的代码嵌入到状态机中,从而使它成为图灵完整的,并且不仅能够识别而且能够解释协议。
通常,通过协程(例如Lua)或继续(例如Scala)或GOTO
(例如PHP)或适当的尾部调用(例如Scheme)支持高级用户定义控制流的每种语言都可用于轻松实现状态机。 (生成器(Python)又名迭代器(C#),它们基本上是“糟糕的协同程序”,根据你对“工作”的定义,它可能工作也可能不起作用。)以及任何语言具有灵活语法的语言(例如Ruby)或支持大成分抽象例如Clojure)可以用来描述状态机。 (支持非ASCII标识符也有帮助,以便您可以使用实际箭头来表示状态机。)
这意味着如果将两者结合起来,并使用支持尾调用和简单抽象的语言,则可以获得非常好的状态机,而不需要本地语言支持。 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
)。
基于David Harel的StateChart形式(支持分层和并行状态机),有一种新的名为SCXML的基于W3C XML的状态机语言。
Apache Commons有一个基于Java的SCXML实现:
Commons SCXML是一个实现,旨在创建和维护能够执行使用SCXML文档定义的状态机的Java SCXML引擎,同时抽象出环境接口。
SMC是一种简单的领域特定语言的编译器,它将为许多流行语言生成状态机。 我用它来生成可维护的状态机,用于各种各样的事情,例如复杂的用户界面和自定义网络协议。
链接地址: http://www.djcxy.com/p/72293.html上一篇: Is there a programming language with built
下一篇: language popularity figures (C++, C#, Java, PHP, flash script, etc.)