2014-11-12
Revisiting Alice ML
Alice ML is a functional programming language base on Standard ML with extensions to support concurrent and distributed programming. I first got interested in it back in 2004 when version 1.0 was released and used it on and off for a couple of years until development stalled. It's hard to believe that ten years has passed since that post!
A few years ago Gareth Smith fixed some bitrot in the CVS repository and fixed a number of bugs and adding new features. These were placed in a bitbucket repository but development stalled again.
I recently started tinkering with the language again, building some old projects I had written using it. I fixed some minor bitrot from Gareth's work and a couple of bugs and put the results, with the permission of Gareth and the original Alice ML developers, in an aliceml github repository. Instructions for building on Linux and Mac OS X are in the README.
For a taste of what's interesting about Alice ML I recommend the Short Tour of Alice. Features include:
- Futures: laziness and light-weight concurrency with implicit data-flow synchronisation
- Higher-order modules: higher-order functors and abstract signatures
- Packages: integrating static with dynamic typing and first class modules
- Pickling: higher-order type-safe, generic & platform-independent persistence
- Components: platform-independence and type-safe dynamic import & export of modules
- Distribution: type-safe cross-platform remote functions and network mobility
- Constraints: solving combinatorical problems using constraint propagation and programmable search
The collection of Alice ML Papers is a good read. The features that most attracted me to Alice ML at the time were lightweight threads using futures and promises for dataflow combined with the ability to do typesafe distribution and runtime loading of modules.
I put some of the known issues in the github issue tracker and I encourage anyone finding problems to add them. I created a subreddit with a few links - mostly as a land claim so that the subreddit doesn't get squatted - but it might be useful to collect or discuss papers and documentation. There's a #aliceml channel on Freenode as well.
Why do this? I still like to use Alice ML and explore some of the ideas in it. I'm sure there are other interested people out there. I hope to at least help keep the bitrot away in the existing code as it would be a shame for Alice ML to disappear.