同步式编程

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

响应式系统

计算机系统可以归入三大类别:

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

编程范型

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

同步与异步比较

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

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

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

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

同步式编程语言

  • Argos
  • Atom
  • Averest
  • ChucK
  • Esterel[1]
  • LabVIEW
  • LEA
  • Lustre
  • Lucid Synchrone[2]
  • PLEXIL
  • SIGNAL(启用多时钟规定的面向数据流程的同步式语言)
  • SOL
  • SyncCharts

参见

引用

  1. G. Berry and G. Gonthier. The synchronous programming language ESTEREL: Design, semantics, implementation. Science of Computer Programming, 19(2), 1992.
  2. . [2021-03-03]. (原始内容存档于2019-10-14).

参考

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.