I'm looking for a programming language that has the following:
- static typing
- distributed programming across a cluster using actors (no shared memory, message passing)
- functional programming
- compiled
|
I'm looking for a programming language that has the following:
|
|||||||||||||||
|
|
Scala with Akka, avaliable as the Typesafe Stack Akka introduction video from Scala days 2010, 2011 scalax videos THE PROMISING FUTURE OF AKKA, Connecting Akka to the rest of the world with Apache Camel (Akka actors might be included in future releases of Scala) |
|||||
|
|
Haskell?... Erlang?... I'm no expert in either but both are functional, and in one of them pretty much every statement is immutable. |
|||||||
|
|
There are three implementations of Haskell with this bill (well, substituting actors for other equivalent models of communication). One is researchy, one is low-level, and one is experimental:
|
|||
|
|
|
I think OCaML can get you most of the way, although you'll need to rely on some third party libraries for the distributed programming and in general its parallelism story isn't quite as together as Erlang's. It is, however, the most statically typed language I've ever worked in, forcing explicit coercions even between a type and its base class! |
||||
|
After Erlang (which is dynamically typed), I thought of Haskell. I did some searching and came across this discussion of an implementation of the actor model for Haskell. I'm not familiar enough with Erlang (or Haskell - the only functional languages I've used are Scheme and Standard ML and even that was in a university course). Haskell by itself doesn't appear to be exactly what you want, but perhaps with this library, you can get something close. I would also consider Erlang as an alternative - it does meet three of your four requirements. I think you might be hard-pressed to find something that, out of the box, coincides with all four. |
|||
|
|
|
I think Erlang fits your definition pretty well. |
|||||||||||||
|
|
Clojure would fit this discription pretty well:
Clojure also has a very unique and interesting concurrency model using Software Transactional Memory that is worth investigating. This is intended for multi-core shared-state concurrency rather than the distributed messaging case, but depending on your application may actually be better. See this video by Rich Hickey for some details and insights (if nothing else it will expand your mind regarding the management of the state of objects in software applications!). |
|||
|
|