SISAL

SISAL（串流和迭代所用单赋值语言）是通用单赋值函数式编程语言，它具有、和高效阵列处理。SISAL输出中间形式1（IF1）的数据流程图。它派生自VAL（1979年设计的面向值的算法语言），并增加了递归和有限串流（stream）。它有着类Pascal语法，并被设计为用于在各种多处理器上的数值程序的高级语言。

 历史 
SISAL的定义在1983年由James McGraw等人于曼彻斯特大学、劳伦斯利弗莫尔国家实验室、科罗拉多州立大学和DEC提出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。。它被修订于1985年，而第一个编译实现于1986年做出。据某些来源所说Retire Fortran?: a debate rekindled, David Cann, August 1992, Communications of the ACM, Volume 35,  Issue 8，它的性能优于C并匹敌Fortran，它将高效性和结合了起来。

它有如下版本：Cray 、Cray 、Cray-2、、、DEC VAX-11/784、、KSR1、Transputer和脉动阵列。

架构

SISAL不只是数据流程和细粒度并行的语言。它还是把人类可读文字的数据流程语言转换成图格式（所谓的“IF1”，即中间形式1）的一组工具。SISAL计划有一部份还涉及到将这种图转换成可运行的C代码。

例子
两个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语言探究实现了一个细粒度并行后端。

在2018年于SISAL-IS计划中SISAL被现代化为基于缩进的语法、头等函数、lambda、闭包和惰性语义。

脚注

 引用 

 VAL Overview
 Sisal Language Tutorial

 外部链接 
 SISAL Parallel Programming SourceForge.net project page

Category:并发编程语言
Category:函数式编程语言