AFL Change History

These are the changes to the AFL implementation, its libraries and its documentation since the first public release (afla001) on 25 February 2005.


1. afla009 (4 September - 12 November 2005)

The following is a collection of changes that have built up over the last couple of months.

Some error corrections:

And changes to afloverview.html:

There's a few additions to the samples:


2. afla007 (25 July - 11 August 2005)

Dealt with a few (mostly what I consider) oversights:

And something extra to play with:


3. afla006 (20 May - 13 July 2005)

A few minor language changes, one biggish one, some updates to the Overview document, and some internal experiments:

As part of release 6, there are a number of changes that don't affect the language but help in the implementation:


4. afla005 (2 May 2005)

This is just a reissue of afla004 (the AFL compiler reports itself as a004) with a major update to afloverview.html. Rereading the overview, I found that the discussion of continuations was too spread around and early -- they now have their own chapter.


5. afla004 (4-8 April 2005)

Minor cleanups and revisions:


6. afla003 (31 March 2005)

Another minor release. A small but important addition in exception handling, and a fix and revision in template interpolation.

6.1 Exception Handling

I've added a relatively primitive form of exception handling and synchronous finalization:

 try
   {
     doStuff ();
     true            # Return true if all was well.
   }
 except (e):
   if typeOf e == "DivideByZeroException"
     then false      # Return false on a divide by
     else rethrow e; # zero exception and rethrow
                     # the exception otherwise.
 def out: outputFile ("myOutputFile.txt");
 try
  {
    // use "out"
  }
 finally
   out.close ();

There are also supporting low-level facilities for establishing and using exception handlers. The afloverview.html document describes the exception handling facility and its implementation.

There's a supporting addition to "threading.afl": there's now a "critical" construct, that combines monitor locking with the facilities of "try ... finally".

There's one backward-incompatibility with this release: the '{...} form of continuation invocation and {...} form of function call use to allow and expression list that was processed like a parenthesized group -- evaluate all in order and return the value of the last expression. As of this release both these forms can have zero one or two arguments:

6.2 Templating

There was a serious error in how template interpolation worked. Many things that shouldn't have, got compile-time errors. It's been fixed. At the same time, how things are interpolated into strings by the \{...} form has changed:

This change means that the following prints "10**2 = 100", rather than an extra line break followed by "**2 = d":

 print "\{10}**2 = \{10*10}";

To make a character from its numeric encoding you have to convert yourself, as in:

 def tab : "\{char 9}"; # tab
 def lf : "\{char 10}"; # line feed
 def cr : "\{char 13}"; # carriage return


7. afla002 (16-21 March 2005)

This is a minor release, fixing some errors, adding a few minor features, and removing a few others. It's primary purpose is to clean up a few rough edges and round out the pre-type-system shape of the language. It illustrates, if nothing else, the way in which the language changes as it develops.

I expect at least one more pre-type-system release, the major feature of which will be a primitive form of exception handling, forming the basis of a fuller implementation when the type system starts to flesh out.

There have been a number of corrections to the documentation. For non-Windows users, the shell script "aflmc.sh" has been renamed "aflmc". As well, the following changes have been made to the language:

The language changes and new operators are described in more detail in AFL Overview.

Copyright © 2005, Sam Wilmott