SISAL
SISAL(流和迭代所用单赋值语言)是通用单赋值函数式编程语言,它具有严格语义、隐式并行和高效阵列处理。SISAL输出中间形式1(IF1)的数据流程图。它派生自VAL(Jack Dennis1979年设计的面向值的算法语言),并增加了递归和有限流(stream)。它有着类Pascal语法,并被设计为用于在各种多处理器上的数值程序的高级语言。
编程范型 | 函数式、数据流程 |
---|---|
设计者 | James McGraw |
实现者 | James McGraw等人,在曼彻斯特大学、LLNL、科罗拉多州立大学和DEC |
发行时间 | 1983年 |
类型系统 | 静态、强类型 |
网站 | sourceforge |
主要实现产品 | |
osc, sisalc | |
启发语言 | |
VAL, Pascal, C, Fortran | |
影响语言 | |
Haskell,SAC |
历史
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).
引用
外部链接
- SISAL Parallel Programming(页面存档备份,存于互联网档案馆) SourceForge.net project page