Cat version 1.0 beta 1
I have just released version 1.0 beta 1 of Cat at http://code.google.com/p/cat-language/downloads/list. So what does ‘beta 1′ mean for Cat? It means that virtually all of the final functionality is there. I have run it through a pretty comprehensive test suite (477 unit tests). I have replaced many of the predefined primitives and replaced them with library functions. I have also added tail-call optimization. This means that recursive calls in tail-position will not use superflous stack-space, so it makes recursive programming idioms more practical.
A number of primitives now have their arguments swapped, and some don’t reproduce a copy of their argument, so this will probably break some existing code. A new feature for debugging is the “#trace” meta-command. This allows the programmer to follow commands as they are executed. Internally the code is now much cleaner. It compiles without warnings on Mono, and a lot of superflous code has been removed. The code should be much easier for people to read and modify (e.g. only one kind of list instead of 20 different ones). I also removed infinite lists (i.e. generators) from Cat for the time being, but I may reintroduce them in later versions.
There are some known issues still outstanding, which will be fixed in later beta releases. The biggest outstanding issue is that the type-inference engine works for only correctly typed phrases. That is,, it will produce garbage rather than an error when given an ill-typed phrase. This is not a huge problem, the fix is nearly ready, it will just be a question of finding the time to integrate and test it. The rewriting rules are also not yet tested. While the rewriting system itself is very stable, the rules included in the library will still likely have some bugs in them.
The documentation hasn’t been updated yet to reflect the current version. Hopefully by the middle of this week it will be ready. I am in the process of setting up a mechanism that will allow me to auto-generate much of the specification from the implementation.
I look forward to hearing your comments on the new version, and I would particularly enjoy hearing about how you are using Cat. Feel free to drop me a line at cdiggins@gmail.com or make a post to the discussion group (http://groups.google.com/group/catlanguage) to introduce yourself.