SISAL
編程範型 | 函數式、資料流程 |
---|---|
設計者 | James McGraw |
實作者 | James McGraw等人,在曼徹斯特大學、LLNL、科羅拉多州立大學和DEC |
面市時間 | 1983年 |
型態系統 | 靜態、強型別 |
網站 | sourceforge |
主要實作產品 | |
osc, sisalc | |
啟發語言 | |
VAL, Pascal, C, Fortran | |
影響語言 | |
Haskell,SAC |
SISAL(串流和迭代所用單賦值語言)是通用單賦值函數式程式設計語言,它具有嚴格語意、隱式並列和高效陣列處理。SISAL輸出中間形式1(IF1)的資料流程圖。它衍生自VAL(Jack Dennis1979年設計的面向值的演算法語言),並增加了遞迴和有限串流(stream)。它有著類Pascal語法,並被設計為用於在各種多處理器上的數值程式的高階語言。
歷史
SISAL的定義在1983年由James McGraw等人於曼徹斯特大學、勞倫斯利弗莫爾國家實驗室、科羅拉多州立大學和DEC提出[1]。它被修訂於1985年,而第一個編譯實現於1986年做出。據某些來源所說[2],它的效能優於C並匹敵Fortran,它將高效性和自動並列化結合了起來。
它有如下版本:Cray X-MP、Cray Y-MP、Cray-2、Sequent、Encore Alliant、DEC VAX-11/784、資料流程架構、KSR1、Transputer和脈動陣列。
架構
SISAL不只是資料流程和細粒度並列的語言。它還是把人類可讀文字的資料流程語言轉換成圖格式(所謂的「IF1」,即中間形式1)的一組工具。SISAL計劃有一部份還涉及到將這種圖轉換成可執行的C代碼[3]。
例子
兩個n×n矩陣的乘法的例子程式:
define main
type OneDim = array [real];
type TwoDim = array [OneDim];
function generate(n : integer returns TwoDim, TwoDim)
for i in 1, n cross j in 1, n
returns array of real(i)/real(j)
array of real(i)*real(j)
end for
end function % generate
function doit(n : integer; A, B : TwoDim returns TwoDim)
for i in 1, n
cross j in 1, n
c := for k in 1, n
t := A[i,k] * B[k,j]
returns value of sum t
end for
returns array of c
end for
end function % doit
function main(n : integer returns TwoDim)
let A, B := generate(n) in
doit(n, A, B)
end let
end function % main
SISAL復興
在2010年SISAL短暫的復活了,伍斯特理工學院的一群本科生為SISAL語言探究實現了一個細粒度並列後端[3]。
在2018年於SISAL-IS計劃中SISAL被現代化為基於縮排的語法、頭等函式、lambda、閉包和惰性語意[4]。
註腳
- ^ James R. McGraw, Stephen K. Skedzielewski, Stephen J. Allan, Dale H. Grit, R. Oldehoeft, John R. W. Glauert, Ivan Dobes, Paul H. Hohensee. SISAL: streams and iteration in a single-assignment language. Language reference manual。
- ^ Retire Fortran?: a debate rekindled, David Cann, August 1992, Communications of the ACM, Volume 35, Issue 8
- ^ 3.0 3.1 存档副本 (PDF). [2020-04-17]. (原始內容存檔 (PDF)於2016-03-04).
- ^ 存档副本. [2020-04-17]. (原始內容存檔於2018-06-12).
參照
本條目部分或全部內容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。
外部連結
- SISAL Parallel Programming(頁面存檔備份,存於網際網路檔案館) SourceForge.net project page