同步编程语言:从命令式到声明式的全面解析
1. 命令式语言
1.1 ESTEREL语言
1.1.1 ABRO程序示例
ESTEREL有一个著名的示例程序ABRO,用于指定抢占行为。以下是ABRO程序的代码:
module ABRO:
input A, B, R;
output O;
loop
[ await A || await B ];
emit O;
each R
end module
这个程序在接收到输入信号A和B(任意顺序,甚至同时接收)时,会发出输出信号O。当接收到输入信号R(作为“重置”信号)时,程序的行为会立即重新初始化。该程序的控制流可以用有限状态机来等效表示,与有限状态机表示相比,ESTEREL程序更加简洁清晰。
1.1.2 程序编译
同步语言的一个有趣特性是能够对程序属性进行分析。通过对抽象时钟约束集的一致性分析,可以验证典型的行为属性,如无死锁。这种分析通常是编译过程的一部分,在编译过程中,程序可以被合成为有利于自动代码生成的格式。例如,ESTEREL源程序可以编译为自动机、电子电路或控制流图等中间格式。
1.1.3 应用领域和工具
ESTEREL的典型应用领域包括汽车、航空航天和国防、铁路运输、半导体以及嵌入式应用的电子设计。学术界有基于ESTEREL的设计平台,由CMA、法国电信和哥伦比亚大学等机构提出,包含编译器和验证工具。工业版本Esterel Studio由Esterel Technologies商业化。