5 ms·
Sisal: a functional parallel programming language
- Athas 10y agoSisal 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/
- yxhuvud 10y agoPerhaps people are turned off by the language being way more verbose than is necessary. Why would anyone want to type out that it is a function and the name of the function again when closing the definition of said function?
- etatoby 10y ago> the name of the function again when closing the definition I think that's just a comment. It follows '%' as in TeX. But yes, nowadays programmers tend to love concise syntax (myself included), not to mention elegant syntax, which is ever harder to define. For example we make a big deal about being able to type 'x => x * 2' instead of 'function (x) { return x * 2; }' in Javascript, or '[]' instead of 'array()' in PHP. One of the draws of ML-derived functional languages (such as Haskell) and maybe APL-derived ones is the fact that they are very much 'shorthand' programming languages. At the same time, one should not stop at the syntax, but try to understand the ideas behind a programming language. Syntax can always be improved with a bit of aesthetic sense, but good ideas are hard to come by.
- pjmlp 10y agoIf APL was released today it would be probably a huge success.
- kqr 10y agoNot at all. Syntax is only the first step. Then comes imperativeness. If you can't write what's essentially Java code in its syntax, it's not going to be a thing.
- preordained 10y agoAgreed. You have your bits of logic that are great for a functional sort of style...map and fold and transform this data...then sometimes you have a script-like area that really benefits from an imperative style...open this, save this off, close this, if error do this, etc.
- prodigal_erik 10y agoIt's hard to beat Haskell operator sections where you can just write (* 2) and get an anonymous function that does \x -> x * 2
- RodgerTheGreat 10y agoIn K, you could just say 2*
- pathsjs 10y agoIn Scala and in Factor too! ;-)
- gizmo686 10y agoIt would be nice if Haskell could figure out (-) functions; as it is, it always consider things like (- 2) to be a number, not a function (even when only a function would typecheck).
- deleted 10y ago[deleted]
- pjmlp 10y agoBack 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.
- Athas 10y agoIt might have been *Lisp (StarLisp) for the Connection Machine. Incidentally, the Connection Machine also seems to have been one of the main platforms for NESL (which might explain why NESL went nowhere...).
- kgwgk 10y agoMaybe this book https://books.google.ch/books/about/The_Connection_Machine.html?id=xg_yaoC6CNEC&redir_esc=y https://books.google.ch/books/about/The_Connection_Machine.h... ? If i remember correctly it's Hillis' PhD thesis: http://worrydream.com/refs/Hillis%20-%20The%20Connection%20Machine.pdf http://worrydream.com/refs/Hillis%20-%20The%20Connection%20M...
- dang 10y agoThat sounds to me like Gary Sabot's ‘Paralation Model’. https://www.amazon.com/Paralation-Model-Architecture-Independent-Programming-Intelligence/dp/0262192772 https://www.amazon.com/Paralation-Model-Architecture-Indepen...
- p1esk 10y agoSAC looks like a dead project, the last release posted Feb 2014.
- Athas 10y agoIt's not dead, it's just... deliberate. Development is supposedly occurring inside a (non-public) source repository, according to a developer I spoke to recently.
- p1esk 10y agoYou mean they just want people to think their project is dead, while they secretly keep working on it? I don't get it...
- meetapoorvgupta 10y agoCMU uses SPARC for their Parallel Algorithm Design course: http://www.parallel-algorithms-book.com/ http://www.parallel-algorithms-book.com/ I wonder how that compares.
- dangerlibrary 10y agoA closed source compiler is a non-starter for anyone looking to use a language for any purpose beyond tinkering / play. I wouldn't call it undeservedly obscure.
- panic 10y agoThe Sisal source is available here: https://sourceforge.net/projects/sisal/ https://sourceforge.net/projects/sisal/
- Athas 10y agoIs it still actively maintained? The CVS repository looks fairly dead.
- Athas 10y agoAs 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 10y agoIndeed. 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).
- fenollp 10y agoMakes me think of http://futhark-lang.org/ http://futhark-lang.org/ in terms of semantics.
- ahabeger 10y agoThere 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-development/sequencel-language-takes-the-pain-out-of-multicore-coding.html http://www.infoworld.com/article/2610184/application-develop... By http://texasmulticore.com http://texasmulticore.com
- sriram_sun 10y agoYeah. 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
- highmastdon 10y agoHow is this much different from erlang?
- mmalone 10y agoThe 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!
- brudgers 10y agoA sourceforge repository: https://sourceforge.net/projects/sisal/ https://sourceforge.net/projects/sisal/
- DonaldFisk 10y agoSisal was used to program the Manchester Prototype Dataflow Computer (https://courses.cs.washington.edu/courses/csep548/05sp/gurd-cacm85-prototype.pdf https://courses.cs.washington.edu/courses/csep548/05sp/gurd-...).