同步式编程

同步式（synchronous）编程，也叫做同步式反应式编程或缩写为SRP，是为响应式系统编程而优化的一种计算机编程范型。同步式编程语言，是支持同步式编程范型的计算机编程语言。

响应式系统
计算机系统可以归入三大类别：
变换式系统，接受输入、对其进行处理、递送出输出、并终止它们的执行，典型例子是编译器；
交互式系统，按自己的速度、连续的与它们的环境进行交互，典型的例子是web；
响应式系统，按照它们的环境所施加的速度、连续的与它们的环境进行交互，典型的例子是现代飞机上的自动飞行控制系统。响应式系统因此必须在严格的时间界限内，对来自环境的刺激（stimuli）进行响应。为此它们经常叫做实时系统，并经常见于嵌入式系统。

编程范型
同步式编程的原理是对编程语言做同步抽象，使之同样于在数字电路中的那种同步抽象。同步电路实际上是在高层抽象上设计的，这里的电子晶体管的时序特征被忽略了。因此每个逻辑门（或门、与门等）都被假定为瞬时计算出结果，每条连线都被假定为瞬时传输信号。同步电路是有时钟的，在它的时钟的每个时间标记（tick）上，它瞬时从它的输入值，和它的记忆单元（锁存器）的当前值，计算出它的输出值，和它的记忆单元的新的值。换句话说，电路表现的如同电子流动得无限的快速。第一批同步式编程语言在1980年代于法国发明：、Lustre和。此后又出现了很多其他的同步式语言。

同步与异步比较
同步抽象，使得关于时间的推理，比在式程序中更加容易，这得益于逻辑“时间标记”的概念：同步式程序在一序列的时间标记中对它的环境进行响应，而在一个时间标记之内的计算被假定为瞬时的，就是说，如同处理器以无限快的速度执行了它们。

语句a||b因此抽象为包（package）ab，这里的a和b是同时的。举个具体例子，语句every 60 second emit minute，规定了信号minute（分钟）精确的同步于信号second（秒）的第60次出现。在更基础的层面，同步抽象消去了由于交错的（interleave）并发行为而导致的非确定性。这允许了确定性（deterministic）语义，因此使得同步式程序经受得起形式分析、验证和有保证的代码生成，并可用作形式化。

相反的，在计算的异步模型中，在一个顺序的处理器上，语句a||b可以实现为要么a;b要么b;a。这叫做“基于交错的非确定性”。异步模型的缺点是它在根本上不允许确定性语义（例如有竞争条件），这使得形式推理比如分析和验证更加复杂。尽管如此，异步式形式化对于建模、设计和验证分布式系统是非常有用的，因为它们本质上是异步的。

同步模型还对立于具有基本上“同步交互”进程的系统。一个例子是基于通信顺序进程（CSP）模型建造的系统，它还允许非确定性选择。

同步式编程语言

Argos

ChucK
G. Berry and G. Gonthier. The synchronous programming language ESTEREL: Design, semantics, implementation. Science of Computer Programming, 19(2), 1992.
LabVIEW
LEA
Lustre
Lucid Synchrone

（启用多时钟规定的面向数据流程的同步式语言）

SyncCharts

参见
 并发性

引用

 参考 
 Nicolas Halbwachs. "Synchronous programming of reactive systems". Kluwer Academic Publishers, 1993. http://www-verimag.imag.fr/~halbwach/newbook.pdf 

 外部链接 
The Synchronous group  at Verimag lab.
The SIGNAL programming language .

Category:编程语言分类
Category:同步式编程语言