occam,一種並發程式語言,主要基於通信順序進程程式代數[1],以及它的許多特色而實作。它的名稱來自於奧卡姆的威廉提出的奧卡姆剃刀(Occam's razor)原則。

occam
編程範型指令式, 過程式, 並發
設計者David May英語David May (computer scientist)
實作者Inmos英語Inmos
面市時間1983年,​41年前​(1983
衍生副語言
occam-π英語occam-π
啟發語言
通信順序進程
影響語言
Ease英語Ease (programming language), Go, Handel-C, XC

occam是一種類似於Pascal的指令式過程式編程語言。這個語言於1983年出現,由英國計算機科學家David May英語David May (computer scientist),以及Inmos英語Inmos公司的科學家,在東尼·霍爾提供顧問意見後,共同研發而成。

概述

在下列例子中,縮進和格式對於分析代碼是關鍵性的:表達式以行結束來終止,表達式的列表需要在縮進的相同水平上。這個特徵叫做越位規則,也能在其他語言比如HaskellPython中見到。occam有指令式語言的基本要素和常規構造:變量,數據類型,表達式,條件構造IF,選擇構造CASE,重複構造WHILE,作為命名進程的過程,和作為值過程的函數,過程不可以遞歸

在進程之間的通信使用命名的通道完成的。通道是有類型的,定義了兩個進程間的通信協議,可以作為參數傳遞給過程,可以建立通道的陣列。一個進程通過!向一個通道輸出數據,而另一個進程用?從它輸入數據。輸入和輸出不能進行,直到另一端已經準備好接受或提供數據。進程在不能進行的情況下,經常稱呼為它阻塞在這個通道之上,它不會阻塞其他獨立進程的運行。阻塞行為不會是自旋(spin)或輪詢(poll),而會是其他機制如等待(wait)、掛起(hang)或讓位(yield)。下舉一例,其中c是變量:

 keyboard ? c
 screen ! c

occam還有對應通信順序進程的如下構造和機制:

SEQ

SEQ 順序構造,介入要被順序求值的表達式的一個列表。順序執行不是隱含的,大多數其他語言無這種顯式構造。例如:

 SEQ
   x := x + 1
   y := x * x

ALT

ALT交替英語Alternation (formal language theory)(alternation)構造,指定有守衛的命令的一個列表。守衛(guard)起源於Edsger W. Dijkstra在1976年提出的守衛命令語言[2],是一個布爾條件和一個輸入表達式的組合(二者都是可選的)。其條件為真並且輸入通道已經就緒的守衛是成功的。選擇一個成功的交替者(alternative)來執行,如果沒有成功者則等待;如果有多個成功,語言不明確規定會執行其中哪一個,這不同於選擇構造。例如:

 ALT
   count1 < 100 & c1 ? data
     SEQ
       count1 := count1 + 1
       merged ! data
   count2 < 100 & c2 ? data
     SEQ
       count2 := count2 + 1
       merged ! data
   status ? request
     SEQ
       out ! count1
       out ! count2

它將從通道c1或c2讀取數據(哪個就緒了都行)並把它傳遞到叫作合併的通道。如果countN達到100,從對應通道的讀取將停用。在叫作狀態的通道讀取要求,將通過輸出這些計數來回答。

PAR

PAR 並行(parallel)構造,開始一個可以被並發(concurrent)求值的表達式的列表。並行構造可溯源至Edsger W. Dijkstra在1965年提出的「協同順序進程」(cooperating sequential processes)[3],例如:

 PAR
   p()
   q()

複製

構造SEQ IF ALT PAR,都是可以複製的。複製的PAR的例子:

 PAR
   farmer()
   PAR i = 0 FOR 4
     worker(i)

它產生5個並發的求值,等價於:

 PAR
   farmer()
   PAR
     worker(0)
     worker(1)
     worker(2)
     worker(3)

參見

引用

  1. ^ occam 2.1 Reference Manual (PDF). SGS-Thomson Microelectronics Ltd. 1995-05-12 [2020-05-05]. (原始內容存檔 (PDF)於2020-08-01).  Inmos document 72 occ 45 03
  2. ^ Edsger W. Dijkstra, Guarded commands, nondeterminacy and formal derivation of programs.頁面存檔備份,存於網際網路檔案館) August 1975. Communications of the ACM.
    Dijkstra, Edsger W. A Discipline of Programming. Prentice Hall. 1976. ISBN 978-0132158718. 
  3. ^ Edsger W. Dijkstra, Cooperating sequential processes頁面存檔備份,存於網際網路檔案館).January 1965.Technical Report EWD-123.

延伸閱讀

外部連結

本條目部分或全部內容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。