
Sisal: a functional parallel programming language - panic
http://www2.cmp.uea.ac.uk/~jrwg/Sisal/00.Contents.html
======
Athas
Sisal is one of the true pioneers of high-level parallel programming. It was
roughly contemporary with (slightly preceded) NESL[0], another data-parallel
language. Sisal was probably simpler and more pragmatic. I'm not sure why none
of these languages ever left the confines of academia. I have tried NESL, and
it was probably the most natural parallel programming experience I've seen.
Perhaps performance was sub-par in practice?

A modern "spiritual successor" (if you squint a bit) of Sisal is Single
Assignment C (SAC), which despite its name, is a pure functional language. SAC
is also undeservedly obscure, although that is possibly a result of the
compiler being closed source.

[0]:
[https://www.cs.cmu.edu/~scandal/nesl.html](https://www.cs.cmu.edu/~scandal/nesl.html)
[1]: [http://www.sac-home.org/](http://www.sac-home.org/)

~~~
pjmlp
Back in the 90's when I was at the university I got hold of a book describing
a Lisp based language for parallel computation.

It was a very interesting book about a computer architecture that thanks to
the FP abstractions would, in theory, allow the users to get automatically
scaling for free.

Something like Clojure parallel abstractions, but that was a Lisp Machine like
environment, not a plain language runtime.

However I cannot recall anything else about the book, other that the book
cover might have been a green one.

~~~
kgwgk
Maybe this book
[https://books.google.ch/books/about/The_Connection_Machine.h...](https://books.google.ch/books/about/The_Connection_Machine.html?id=xg_yaoC6CNEC&redir_esc=y)
?

If i remember correctly it's Hillis' PhD thesis:
[http://worrydream.com/refs/Hillis%20-%20The%20Connection%20M...](http://worrydream.com/refs/Hillis%20-%20The%20Connection%20Machine.pdf)

~~~
agumonkey
A few videos on youtube, I enjoyed this one
[https://www.youtube.com/watch?v=IjmostrFetg](https://www.youtube.com/watch?v=IjmostrFetg)

------
panic
The Sisal source is available here:
[https://sourceforge.net/projects/sisal/](https://sourceforge.net/projects/sisal/)

~~~
Athas
Is it still actively maintained? The CVS repository looks fairly dead.

~~~
Athas
As a reply to my own comment: the source distribution is fairly modern, with a
decent `configure` script and all. Compiles out-of-the-box on my Debian
machine, so it's not just a code dump from the early 90s. This might be fun to
play around with.

~~~
srean
Indeed. The last time I tried (about 5~6 years ago, I think) some patches were
needed but nothing that required a huge investment of time. Unfortunately its
not Sisal90 that had other goodies, (starting with true multi-dimensional
arrays and not just array of arrays).

If you are digging into this take a look at the parts that call backends. Many
optimization passes are disabled by default by hard coding. At least that's
the way it was when I had picked it up. There was not much interest in merging
the changes and I thought a fork would be rather rude and presumptuous (I am
hardly the compiler writer type).

------
ahabeger
There is also SequenceL

[https://en.m.wikipedia.org/wiki/SequenceL](https://en.m.wikipedia.org/wiki/SequenceL)
[https://rosettacode.org/wiki/Category:SequenceL](https://rosettacode.org/wiki/Category:SequenceL)
[http://www.infoworld.com/article/2610184/application-
develop...](http://www.infoworld.com/article/2610184/application-
development/sequencel-language-takes-the-pain-out-of-multicore-coding.html)

By [http://texasmulticore.com](http://texasmulticore.com)

~~~
sriram_sun
Yeah. I wrote my master's thesis on the topic and worked for Dr. Dan Cooke who
created the language. SequenceL falls under the Data and Control parallel
language category. I was also playing with parallel Haskell around that time
(2003) when you explicitly had to specify hints to Haskell for
parallelization. However, with SequenceL, nothing like that is required. The
problem was too much parallelism. We could find all the parallelisms no
problem. distributed computing, load balancing etc. were some of the issues
the group was looking at. My own work was to dvelop an interpreter in Python -
and executed on Tuplespaces, a concept popularized by David Gelernter

------
fenollp
Makes me think of [http://futhark-lang.org/](http://futhark-lang.org/) in
terms of semantics.

~~~
Athas
Probably not coincidental. There's only so many ways to construct a data-
parallel language.

~~~
14113
Rather humble of you ;)

------
DonaldFisk
Sisal was used to program the Manchester Prototype Dataflow Computer
([https://courses.cs.washington.edu/courses/csep548/05sp/gurd-...](https://courses.cs.washington.edu/courses/csep548/05sp/gurd-
cacm85-prototype.pdf)).

------
brudgers
A sourceforge repository:
[https://sourceforge.net/projects/sisal/](https://sourceforge.net/projects/sisal/)

------
highmastdon
How is this much different from erlang?

~~~
mmalone
The linked TOC is long and I've only skimmed it, but I wouldn't call Erlang a
data parallel language per se. When I hear "data parallel" I'm thinking of a
language with abstract data types (ADTs) for lists, and maybe sets, bags, and
dictionaries too. There are also language intrinsics like join, map, etc. that
can and will automatically be optimized and will "lift" computations into a
parallel or distributed context for you. There are various minimal sets of
core datatypes and intrinsics that a language can provide to achieve this.

The closest thing that most programmers are familiar with is a relational
database. Imagine a language that treats certain data structures like an RDBMS
treats a table and does the sort of optimizations that a query optimizer does
when you run an intrinsic (either statically at compile time or dynamically at
runtime). That's data parallelism.

Erlang has facilities to make this sort of thing possible, but last I looked
it doesn't do it for you.

If anyone who's actually an expert wants to step in and correct my assumptions
please do so!

