同步式編程
同步式(synchronous)編程,也叫做同步式響應式編程或縮寫為SRP,是為響應式系統編程而最佳化的一種電腦程式設計範式。同步式程式語言,是支援同步式程式設計範式的電腦程式語言。
響應式系統
電腦系統可以歸入三大類別:
程式設計範式
同步式編程的原理是對程式語言做同步抽象,使之同樣於在數字電路中的那種同步抽象。同步電路實際上是在高層抽象上設計的,這裏的電子電晶體的時序特徵被忽略了。因此每個邏輯門(或門、與門等)都被假定為瞬時計算出結果,每條連線都被假定為瞬時傳輸訊號。同步電路是有時鐘的,在它的時鐘的每個時間標記(tick)上,它瞬時從它的輸入值,和它的記憶單元(鎖存器)的當前值,計算出它的輸出值,和它的記憶單元的新的值。換句話說,電路表現的如同電子流動得無限的快速。第一批同步式程式語言在1980年代於法國發明:Esterel、Lustre和SIGNAL。此後又出現了很多其他的同步式語言。
同步與非同步比較
同步抽象,使得關於時間的推理,比在非同步式程式中更加容易,這得益於邏輯「時間標記」的概念:同步式程式在一序列的時間標記中對它的環境進行響應,而在一個時間標記之內的計算被假定為瞬時的,就是說,如同處理器以無限快的速度執行了它們。
陳述式a||b
因此抽象為包(package)ab
,這裏的a
和b
是同時的。舉個具體例子,Esterel陳述式every 60 second emit minute
,規定了訊號minute
(分鐘)精確的同步於訊號second
(秒)的第60次出現。在更基礎的層面,同步抽象消去了由於交錯的(interleave)並行行為而導致的非確定性。這允許了確定性(deterministic)語意,因此使得同步式程式經受得起形式分析、驗證和有保證的代碼生成,並可用作形式規定形式化。
相反的,在計算的非同步模型中,在一個順序的處理器上,陳述式a||b
可以實現為要麼a;b
要麼b;a
。這叫做「基於交錯的非確定性」。非同步模型的缺點是它在根本上不允許確定性語意(例如有競爭條件),這使得形式推理比如分析和驗證更加複雜。儘管如此,非同步式形式化對於建模、設計和驗證分散式系統是非常有用的,因為它們本質上是非同步的。
同步模型還對立於具有基本上「同步互動」行程的系統。一個例子是基於交談循序程式(CSP)模型建造的系統,它還允許非確定性選擇。
同步式程式語言
參見
參照
- ^ G. Berry and G. Gonthier. The synchronous programming language ESTEREL: Design, semantics, implementation. Science of Computer Programming, 19(2), 1992.
- ^ Lucid Synchrone. [2021-03-03]. (原始內容存檔於2019-10-14).
參考
- 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 (頁面存檔備份,存於互聯網檔案館).