We may distinguish six generations of programing languages to date:
This page is devoted to the sixth generation, which is just now (2005) starting to enter mainstream programming.
I'm interested in them because they are precise and concise. They offer something like four to ten times higher productivity than the currently mainstream C/C++ languages, and the performance that Perl/Python/Ruby scripting languages lack. (Plus they are the source of most of the good ideas in the latter group!) Culturally, mostly-functional ML-family languages are essentially Lisp with strong typing and consequently good performance, and they are rapidly taking over most of Lisp's old ecological niche.
They are type-safe, so I never have to deal with another C coredump or buffer overrun.
Their module system is basically OOP Done Right -- at last, real support for programming in the large!
Programs in ML-family languages typically use only about 1% as many side-effects, which means that concurrent programming, multiprocessing, and distributed programming all get about 100X easier. Since most records are read-only, they can be freely cached everywhere, saving countless network round trips.
The module system plus the support for polymorphic typing mean that I can write well-factored code at the natural level of abstraction, instead of having to drastically dumb it down to meet language and compiler constraints.
Not least, ML-family languages are great for writing tools like compilers, so even when they aren't the tools you need, they are the tools you need to build the tools you need.
Programming in C feels like wading through waist-deep mud.
Programming in ML feels like running barefoot across the grass.
In fact, coming from C -- coding in ML feels like cheating! ;-)
In short, ML-class languages make programming more enjoyable, and since I program primarily for fun, that's the decisive consideration for me.
Before anyone wastes bandwidth flaming me: No, I'm not "anti C". I think C was a brilliant design for its time and context. I've designed and implemented two C compilers from scratch. But I've written at this point over a million lines of C, and that's enough: I'm ready to take it to the next level. Fair enough?
A variety of implementations of ML were built in the late 1970s and early 1980s.
A standardization drive started in 1983 resulted in 1990 in the definition of Standard ML, usually called SML. This standard was revised in 1997, mostly by removing features regarded in hindsight as dubious, resulting in the current SML'97 standard. (An ambitious "ML2000" effort to define a much-extended language including OOP support seems to have been largely dropped in favor of staying with SML'97.)
There are today a dozen or so major SML implementations, and dozens of minor experimentatal variants, often used as the basis for one refereed paper.
The ML implementation with the most active userbase and largest software base is currently the QPL-licensed Ocaml, from a French team funded by INRIA and led by the redoubtable Xavier Leroy, who is both a leading theory guy and a prolific hacker of impeccable design and implementation taste. Ocaml uses a C-style compile-and-link model.
The implementation I'm personally most interested in is the Berkeley-licensed incremental compiler SML/NJ, "SML of New Jersey", so called because it comes to you from the same folks who invented the transistor and the laser, not to mention such oddments as C and Unix. SML/NJ uses a Smalltalk-style compile-into-the-heap model, with the ability to save and restore the entire heap or various parts of it. I like this because it is well-suited to building a high-quality interactive software development environment.
The main other ML-family implementation which currently interests me is the the GPL-licensed MLton whole-program compiler. The MLton team led by Stephen Weeks has focused on all-out performance by compiling the entire program as a single unit.
The Great Computer Language Shootout provides an informal but useful view of how the various ML implementation rank relative to each other and also various other programming languages.
Another useful indicator of the relative practical success of various programming languages is the annual ICFP Programming Contest. A scan will show Ocaml as doing very well in recent years, and also some nice showings such as that of J in ICFP'98 and Cilk also in '98.
Onward to my SML/NJ page.
Back to my (ancient, lame) home page.