HELP PMLNEWS A chronological summary of changes to the Poplog Standard ML subsystem. See also PML HELP * BUGS for recent bug fixes. Anybody still using PML Version 1.3 should refer to PML HELP * VERSION2 for notes on upgrading to Version 2.0 or later. CONTENTS - (Use g to access required sections) 1 Changes Since Poplog Version 14.5 2 Previous Changes ----------------------------------------------------------------------- 1 Changes Since Poplog Version 14.5 ----------------------------------------------------------------------- 13/12/94 (Robert Duncan) --- A new function call tracer allows you to observe the arguments and results of function calls during program execution. To use the tracer, you must first compile your program in a special debug mode. You can then use the new trace and untrace commands to select particular functions for tracing. Each call of a traced function displays its actual arguments and results, as in this call to length: length([1,2,3]); [ 1]> length [1, 2, 3] [ 2]> length [2, 3] [ 3]> length [3] [ 4]> length [] [ 4]< length 0 [ 3]< length 1 [ 2]< length 2 [ 1]< length 3 val it = 3 : int Full details are in HELP * TRACE. 24/11/94 (Robert Duncan) --- ML-Lex and ML-Yacc have been installed in the *CONTRIB directory. See HELP * MLLEX, * MLYACC. 22/11/94 (Robert Duncan) --- A new library module NJCompat can help in porting programs written for Standard ML of New Jersey. See HELP * NJCOMPAT. Also, the abstraction reserved word used by SML/NJ is now recognised by PML, although the form is not implemented: abstraction is treated as a synonym for structure. 16/11/94 (Robert Duncan) --- The Array module (see HELP * ARRAY) has been modified such that the array type constructor it defines now admits equality. Equality is defined on arrays as address equality, i.e., two arrays are equal if and only if they occupy the same region of memory. Obviously, if two arrays are equal then their contents must be equal, but the converse does not hold. This is analogous to the definition of equality on references, and it has the same property, namely that the type ty array is always an equality type regardless of whether ty is itself an equality type. --- Arrays and vectors can now be created and accessed from Pop-11: see HELP * MLINPOP. --- The syntax rules for the use of the semicolon at top-level have been relaxed. Specifically, you can now mix all kinds of module declarations -- functor, signature and structure -- without separating them with ";". So the following will now compile where previously it would not: signature S = sig ... end functor F():S = struct ... end structure S:S = F() You must still use semicolons to separate declarations from commands and top-level expressions. 26/10/94 (Robert Duncan) --- Changes in error reporting. In particular, type errors now give considerably more information about the context of the error and the reason for it. For example: - 2.4 / 5; Error: in expression 2.4 / 5 Cannot apply function op / : real * real -> real to argument (2.4, 5) : real * int --- The Ved command f can now be used to locate the binding occurrence of an identifier within the current sourcefile. For example, doing: f sort will move the cursor to the start of the definition of the function sort (if it's defined within the file). By default, the argument is assumed to be a function name, i.e. bound in a fun declaration. You can look for a different class of identifier by prefixing the name with one of the keywords val type exception structure signature functor So doing: f type graph would locate the definition of the type constructor graph. See HELP * MLVED. ----------------------------------------------------------------------- 2 Previous Changes ----------------------------------------------------------------------- 28/06/91 (Simon Nichols) --- A modest improvement in code size and runtime speed has been effected by optimising the treatment of variables which are referenced only once. 14/06/91 (Robert Duncan) --- The Edinburgh Standard ML Library (Revision 1.16) installed in the contrib directory. See HELP * SMLLIB. 28/05/91 (Robert Duncan) --- New library module OS installed which provides an interface to the host operating system. See HELP * OS. 18/03/91 (Robert Duncan) --- A new function val Compile.localise (r : 'a ref) : 'a ref localises the value of a reference for the duration of the current invocation of the compiler. Whenever the compilation terminates, even if caused by an error, the previous value of the reference is restored. This is especially useful for localising the effects of changes to compiler flags. For example, the line Compile.localise Compile.warnings := false; placed at the start of a file will disable warning messages for that file only. See HELP *localise. 18/03/91 (Robert Duncan) --- The compiler's closure rules are now turned off by default; this is to improve compatibility with other Standard ML systems. Since this implies a relaxation of checking, it's unlikely that any existing programs will break. In the event of problems, or if the stricter regime is preferred, you can restore the previous situation by putting in your "init.ml" file the line: Compile.closure_rules := true; See HELP *closure_rules. 01/03/91 (Robert Duncan) --- Arguments to commands may now be enclosed within string quotes (""). This is to provide a greater conformity in the syntax for commands and functions, as in: cd "example"; It also means that spaces and semicolons can be included in arguments, e.g: ved "lib.ml;2" --- A new command bye exits from PML. See HELP * COMMANDS. 11/02/91 (Robert Duncan) --- The format and content of error messages has been changed to make them clearer and more intelligible. Most noticeably, messages are now largely in lower case. --- Occurrences of "non-generic" (or "free") type variables in type error messages are now displayed as 'A, 'B, 'C, ... etc. instead of the previous 'ty1, 'ty2, 'ty3, ... 04/02/91 (Robert Duncan) --- Changes in the interpretation of identifier status (determining whether a particular identifier denotes a variable, constructor, exception etc.) have resolved various anomalies and errors. For example, it's now possible to rebind an exception as a value constructor, which was previously illegal. --- The reserved word "=" is now allowed to stand for the equality predicate in more cases than previously, specifically: - as a secondary component in a long identifier: StdValues.= - in a fixity directive: nonfix = - in a value description: val = : ''a * ''a -> bool 21/01/91 (Robert Duncan) --- A bug in the code generated for exception handlers which prevented them from being properly tail recursive is now fixed. A function such as: fun loop() = ... handle e => (...; loop()) will now run in constant space. 14/01/91 (Robert Duncan) --- Source code for programs from the book ML for the Working Programmer by Lawrence C. Paulson has been installed in the Poplog contrib tree (for user-contributed software). See HELP * WORKING_PROGRAMMER. 10/12/90 (Robert Duncan) --- The library module Array has been substantially revised, in the light of discussions held among the SML user community. Array operations are now divided between two structures: structure Array : Array defines the array type and a minimal set of functions for creating and accessing arrays. This is a standard module which should be supported by all Standard ML compilers. See HELP * ARRAY. structure ExtendedArray : ExtendedArray defines some additional, non-standard functions on arrays. See HELP * EXTENDED_ARRAY. There are two major changes: indexes for arrays now start at 0, so that legal indexes for the object array(n, x) lie in the range 0 <= i < n Also, the function *sub (for accessing an array) is no longer infix by default. There have also been several name changes, although all the previous functionality is still available. See the help files for details. --- A new Vector structure, similar to Array, provides constant-time access without updating. See HELP * VECTOR. 28/11/90 (Robert Duncan) --- The Edinburgh Standard ML program Library (Version 0.1 beta) has been installed in the Poplog contrib tree (for user-contributed software). See HELP * CONTRIB. 30/10/90 (Robert Duncan) --- The identifier *before is now infix by default. To reverse this change, add to your "init.ml" file the line: nonfix before; 09/10/90 (Robert Duncan) --- An experimental exception traceback facility has been added: see HELP * traceback. 13/09/90 (Robert Duncan) --- New function val sort : ('a * 'a -> bool) -> 'a list -> 'a list added to the List module. See HELP * sort. 10/08/90 (Robert Duncan) --- New number libraries: HELP * RATIO Rational numbers HELP * COMPLEX Complex numbers HELP * FASTINT Fast, non-checking operations on small integers 09/08/90 (Robert Duncan) --- A new exception Overflow has been introduced which is raised on all occurrences of real arithmetic overflow regardless of the operation in progress. Many of the distinct arithmetic exceptions required by the Definition -- Sum, Diff, Prod, etc. -- have now been made synonyms for Overflow. See HELP * Overflow. --- C.all/pml/help/changes --- Copyright University of Sussex 1994. All rights reserved.