Welcome to the Dictionary of Programming Languages, a compendium
of computer coding methods assembled to provide information and
aid your appreciation for computer science history.
Browse the dictionary by clicking on a section:
Get a full dump of the dictionary:
List of Names
- Language type:
F - Functional or lambda-based
SISAL is a functional programming language
designed for parallel processing.
The name SISAL stands for Streams and
Iteration in a Single Assignment Language.
It is intended for use programming
scientific application on multi-processor
supercomputers, and for educational use
in teaching parallel programming.
The lexical structure of SISAL is similar
to that of Pascal. The syntax is simple
and uniform, with special keywords for
controlling arrays and iteration.
Data types in SISAL include integers,
reals, strings, multi-dimensional arrays,
Control structures in SISAL look
deceptively familiar, but have functional
rather than procedural semantics.
The semantics of the 'for' loop are
particularly rich, although somewhat
SISAL is strongly typed, and no implicit
conversions are supported; all data type
casting must be explicitly specified by the
programmer. Other programming
features of SISAL include multi-arity
functions, user-defined data types,
sophisticated array handling, a large
library of built-in math functions,
and streams-oriented I/O.
The mathematical foundations of SISAL
are similar to that of other functional
languages: all computations produce
results, and computations do not produce
side-effects. Further, SISAL programs
are guaranteed to be deadlock-free and
determinate, even in parallel environments.
The main SISAL implementation is an
optimizing compiler with back-ends
targetted for different parallel architectures.
There are also subset SISAL interpreters
for beginner use. All SISAL language
implementations are free. It runs one
a fair variety of platforms, including
many UNIX systems, PC, Macintosh, and
Cray and Intel supercomputers.
Documentation for the language and its
compilers is easily available on the WWW.
John Feo et al, Lawrence Livermore National Laboratory, 1990.
- See Also:
SISAL was designed to allow the compiler
to make fine-grained decisions about
parallelism. The LLNL optimizing SISAL
compiler uses dataflow graphs to identify
dependencies and order computations.
In performance tests, parallelized
SISAL programs were
faster than comparable parallelized FORTRAN
programs on several supercomputer platforms.
As in many other functional languages, I/O
in SISAL is somewhat rigid and still
problematic. SISAL does support, partially,
an I/O data format called Fibre; this
facility is still under development as of
SISAL is suitable for use on a large class
of mathematical problems, but it's
adoption outside of LLNL seems to be
- Sample code:
% A simple example of using SISAL arrays,
% adapted from various sample exercises in the
% SISAL tutorial by John Feo.
type Matrix = array [ array [ real ] ]
% generate a square matrix where element [n,m]
% is set to n m
function gensquare(siz : integer
returns Matrix )
for i in 1,siz cross j in 1,siz
returns array of real(i) real(j)
% perform one step of a relaxation, average each
% element with its eight nearest neighbors
function relax ( a : Matrix returns Matrix )
for row in a at i cross elt in row at j
avg := (elt a[i, j-1] a[i, j 1]
a[i 1, j-1] a[i 1, j] a[i 1, j 1]
a[i-1, j-1] a[i-1, j] a[i-1, j 1]) / 9.0
returns array of avg
% test the generator and relax function
function main(returns Matrix)
let a1 := gensquare(5) in a1
Descriptions in this dictionary are ©1997-99 Neal Ziring. Some
examples copyright of their respective authors. Some
technologies and languages are trademarked. Permission to
copy descriptions is granted as long as authorship credit is preserved.
Comments on this dictionary, corrections and suggestions, are all welcome.
Please use email, the address is email@example.com
[Ziring MicroWeb Home]
Dictionary and script maintained by Neal Ziring, last major modifications 3/18/98. Most recent
additions to dictionary and master list, 1/00.