同步式(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). 

參考

編輯

外部連結

編輯