Florian Haber
Modeling  -  Semantics  -  Multicultural Activities

Greetings from Germany. Currently I'm totally obsessed with the CAMlog project, so nothing else on this page for the time being...

The CAMlog Project

  1. Goals Of The Project
  2. Current Status Of The Project
  3. Next Steps
  4. Version History
  5. Known Bugs


An alpha version along with some documentation is available.

1. Goals Of The Project

After the advent of the Unified Modeling Language (UML) it is high time for a new attack on the 'executable specification' problem, or, as I would like to state it more modestly, a 'programming and modeling' language. The intention of the CAMlog project is to serve as a platform for anexperiment in that direction.

Apart from the context of modeling, CAMlog currently is just another functional programming language - but with a high emphasis on integration into the object oriented world.

2. Current Status Of The Project

Currently the language(!) might be called a beta, the current releases of the compiler should be considered prototypes. To be more precise, the functional fragment of the language is complete, but the monadic parts are to be extended. As for the compiler, being a prototype means there is more emphasis on e.g. verbose output of intermediary code to assist the development of new semantical analysis features, but rather little user friendlyness for the application programmer and not much in terms of runtime library. We have however a quite impressive collection of programming examples to show how powerful CAMlog already is.

3. Next Steps

Currently the focus is on documentation.

Documentation Issues:

  • CAMlog User Guide (preliminary version exists)
  • CAMlog Language Description
  • CAMlog Scripting API documentation
  • CAMlog Quick Reference
  • For the brave at heart: CAM assembly language programming
Theoretical issues:
  • Extend the type inference algorithm to perform determinism analyis. This is neccessary to incorporate mutable state in such a way that it is compatible with the other monadic features.
  • The virtual machine supports a more general concept of continuation than the type checker accepts. Can this be improved?
Implementation issues:
  • Incorporate some optimizations of the INRIA people, e.g. the recognition and allocation of non-closure variables.
  • Add a blindingly fast C backend (VM). Conceptually everything is clear, but we have not yet made a decision on the garbage collection issue. We might start with a simple self implemented copy-collect, or use some available GNU implementation.
  • A nice little GUI frontend and an Applet frontend for the Web.
Packaging and Deployment:
  • The current release comes in two jars only, the previous one is available as a GNU package. In the future packaging will be synchronized.

4. Version History

  • January 1st 2004: First version with proper packaging published.
  • February 1st 2004: Improved frontend and some documentation.

5. Known Bugs

  • Mixing constants and recursive function definitions in one def-term generates bad code that will produce runtime crashes. Currently it is not worth repairing this, because the handling of mutually recursive function definitions will change due to some optimization (It is currently a straightforward fixpoint implementation).
  • For some reason, an external implementation of the 'Solutions' function fails. (Currently a CAM assembly language routine is used.) This means that something must be wrong with passing nondeterminism through the host language interface (Java backend).