One of the two parallel tracks in my 2009 Programming Language Plan begins with the Standard ML programming language, so it’s time to get started.
Standard ML Resources
Compilers
- Standard ML of New Jersey is highly recommended and comes with a REPL.
- Moscow ML
- MLKit
- PolyML
- MLton is a Standard ML compiler with excellent performance. However, as far as I know, it doesn’t have a REPL, which makes it less than ideal for learning.
Books
Since I was unfamiliar with the Standard ML programming language, I was surprised to find there are a number of good books about the language. Following are just some of them:
Purely Functional Data Structures
Introduction to Programming using SML
Other Educational Materials
Programming in Standard ML – excellent online book by Robert Harper of Carnegie Mellon University. Since I don’t know if Standard ML will simply be a stepping stone to Haskell (which in turn may not be a primary language for me) or a language I invest a lot of time in, I’m going to restrict myself from my normal method of purchasing a book or two when learning a new language. Instead, I’ll be going through Harper’s online book initially.
Tips for Computer Scientists on Standard ML (Revised)
Hello World
There are a number of great compilers for Standard ML (listed above), but I only need one to get started, so I chose Standard ML of New Jersey despite the funky name. It’s a popular version, and it has a REPL, so it’s good enough for me for now.
I develop software on Mac OSX and deploy on Ubuntu Linux. On my Ubuntu server, installing SML/NJ was as simple as:
sudo apt-get install smlnj
On Mac OSX, there are a couple of options listed on this page. I could use a pre-built system or the generic Unix install, so naturally I chose the generic Unix install which installed easily according to the simple directions.
# Download config.tgz
tar xzf config.tgz
config/install.sh
# Wait for install to complete
~/software/smlnj$ rlwrap bin/sml
Standard ML of New Jersey v110.69 [built: Sat May 2 12:04:08 2009]
- print "hello, worldn";
hello, world
val it = () : unit
-
Great, looks like everything is working fine. Note, I use the rlwrap utility to provide a nicer REPL experience, but it’s not required.
I’ll continue with a series of posts with notes from working through “Programming in Standard ML”.