同步式編程

同步式(synchronous)編程,也叫做同步式響應式編程或縮寫為SRP,是為響應式系統編程而優化的一種計算機編程范型。同步式編程語言,是支持同步式編程范型的計算機編程語言

響應式系統

計算機系統可以歸入三大類別:

  1. 變換式系統,接受輸入、對其進行處理、遞送出輸出、並終止它們的執行,典型例子是編譯器
  2. 交互式系統,按自己的速度、連續的與它們的環境進行交互,典型的例子是web
  3. 響應式系統,按照它們的環境所施加的速度、連續的與它們的環境進行交互,典型的例子是現代飛機上的自動飛行控制系統。響應式系統因此必須在嚴格的時間界限內,對來自環境的刺激(stimuli)進行響應。為此它們經常叫做實時系統,並經常見於嵌入式系統

編程范型

同步式編程的原理是對編程語言做同步抽象,使之同樣於在數字電路中的那種同步抽象。同步電路實際上是在高層抽象上設計的,這裡的電子晶體管的時序特徵被忽略了。因此每個邏輯門(或門、與門等)都被假定為瞬時計算出結果,每條連線都被假定為瞬時傳輸信號。同步電路是有時鐘的,在它的時鐘的每個時間標記(tick)上,它瞬時從它的輸入值,和它的記憶單元(鎖存器)的當前值,計算出它的輸出值,和它的記憶單元的新的值。換句話說,電路表現的如同電子流動得無限的快速。第一批同步式編程語言在1980年代於法國發明:Esterel英語EsterelLustreSIGNAL英語SIGNAL (programming language)。此後又出現了很多其他的同步式語言。

同步與異步比較

同步抽象,使得關於時間的推理,比在異步英語Asynchrony (computer programming)式程序中更加容易,這得益於邏輯「時間標記」的概念:同步式程序在一序列的時間標記中對它的環境進行響應,而在一個時間標記之內的計算被假定為瞬時的,就是說,如同處理器以無限快的速度執行了它們。

語句a||b因此抽象為包(package)ab,這裡的ab是同時的。舉個具體例子,Esterel英語Esterel語句every 60 second emit minute,規定了信號minute(分鐘)精確的同步於信號second(秒)的第60次出現。在更基礎的層面,同步抽象消去了由於交錯的(interleave)並發行為而導致的非確定性。這允許了確定性(deterministic)語義,因此使得同步式程序經受得起形式分析、驗證和有保證的代碼生成,並可用作形式規定英語Formal specification形式化。

相反的,在計算的異步模型中,在一個順序的處理器上,語句a||b可以實現為要麼a;b要麼b;a。這叫做「基於交錯的非確定性」。異步模型的缺點是它在根本上不允許確定性語義(例如有競爭條件),這使得形式推理比如分析和驗證更加複雜。儘管如此,異步式形式化對於建模、設計和驗證分布式系統是非常有用的,因為它們本質上是異步的。

同步模型還對立於具有基本上「同步交互」進程的系統。一個例子是基於通信順序進程(CSP)模型建造的系統,它還允許非確定性選擇。

同步式編程語言

參見

引用

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

參考

外部連結