An improved, though still not perfect, parser for infix expressions has been implemented. This substantially reduces the number of brackets needed. The remaining problem is with operators that have both unary and binary meanings including -, !, ? and =. These expressions may still need more brackets than would otherwise be necessary.
A proper implementation of records now exists.
A new class, overloaded, has been added. If an identifier is declared with this class then subsequently multiple declarations of that identifier are allowed. Uses of the identifier are class-checked with each declaration in turn, starting with the most recently declared and working backwards, until a matching declaration is found.
A set of overloaded print functions has been added to the io library and the array indexing function _[_] is now overloaded on val and var parameters.
A new class, varargs, has been added. All instances of identifiers declared with this class are replaced by identifiers with the number of arguments appended, for example if the declaration foo:varargs is used, foo(a,b,c) is replaced by foo3(a,b,c). It is up to the user to declare foo3 in the usual way.
A varargs print function has been added to the io library.
The compiler now automatically inserts calls to mkexpr so that when an expr parameter is required but a val or var expression is provided the necessary conversion takes place.
The compiler will now add eval(), read() and mkexpr() as necessary to make the definition of a declaration match its class.
The way in which negative literals are parsed has been changed. This means that expressions such as (a-1), which used to cause problems, are now OK.
A set of functions of the form [_:_:_:_] has been provided to construct vectors from their components.
For ease of maintainance the library has been split up into several separate files. This means that the setting of the LCD_OPTS environment variable has to be changed to something like the following:
-L/home/amuserv7/users/endecotp/lard/v3/lib -score -sops -stypes -splump -sctrl -lio -lchan -ltime
(foo(T:type):expr(T)=foo(T)).null