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.
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.
If i remember correctly it's Hillis' PhD thesis:
Thanks for pointing it out.
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.
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.
\x -> x * 2
I do not immediately see this causing problems for correct programs, but it would probably lead to horribly confusing problems in incorrect code, including converting some type errors into runtime errors.
A simpler approach is to say that you can not have a space after the unary "-", so (-2) parses to a numeric literal, and (- 2) parses to a function.
I wouldn't call it undeservedly obscure.
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).
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!