I found this nice discussion about functional languages in Linspire (thanks to Silicon Valley Patterns Group).
- Erlang: Distributed systems, massive concurrency, anything with lots of network IO (webservers, load balancers), particularly binary network protocols
- ML: Fast. Easy to express complex data structures. Good for theorem provers, compilers, other algebraic manipulation software.
- Haskell: Very strong compiler construction tools. Makes a pretty good scripting language (there’s a thread about a Haskell shell on the mailing list right now). High reliability – I’ve found that 90% of the time my Haskell code “just works” the first time I compile it. Interesting research being done for webapps (WASH) and database integration (HaskellDB).
- Scheme: Fun to make interpreters in. Very good for domain-specific languages. Good language-design research vehicle.
I looked at Erlang a couple of years ago when I read that the language is used by Ericsson for all their Telecom software. It is nice to see it pop up again in discussions.
With the impending popularity of multi-core systems, massive concurrency may really be a great asset. Definitely needs further investigation. A bonus is a summarization on the conceptual size continuum of languages as a part of the comments.
I’m speaking mostly in terms of the number of concepts (both syntactic and semantic) required to learn the language.
By comparison, here’s how I’d rate other mainstream languages on the size continuum:
- Very large: Common Lisp, C++, Perl
- Large: Haskell, Ocaml, PHP, C#
- Medium: Java, Python, Ruby, ML, Dylan
- Small: Erlang, Scheme, Smalltalk, C
I wonder whether this classifcation includes the libraries you need to know to do anything useful.