$Id: foo$ Changes from release 3.0 to release 4.0 Changes from release 2.2 to release 3.0 General: o A new C/C++ Programmer's Manual for Elk is now available (60+ pages with many examples). See doc/README (item `cprog') and doc/cprog. o The documentation has been prepared for translation to HTML using the (Elk-based) `unroff' package. o Elk now uses a new Scheme object representation (a `struct' rather than an `unsigned long') to make it work on 64-bit architectures and to allow for larger heaps, a wider range of fixnums, and more first-class Scheme types. o As a consequence, the `pointer_constant_high_bits' are gone, as is util/pchb.c. o Elk has been ported to and tested on these new platforms (config files are included in the distribution): DEC/Alpha, OSF/1 HP 9000, HP-UX 10.0 i386/486, BSDI BSD/OS i386/486, Linux IBM PowerPC, AIX 4.1 o A number of config files for obsolete platforms have been removed from the distribution; config files for platforms where Elk 3.0 could not be tested are in config/untested. util/sgihack.c is gone. o Extension initialization and finalization functions now begin with `elk_init_' rather than just `init_' to avoid name conflicts. o The directory `contrib' has been removed from the distribution, as most of the contributions either were no longer maintained or have been made an official part of the distribution. contrib/eval-string is now available as lib/misc/elk-eval.c. o Site/platform-specific information such as the various X11 `load libraries', machine name, operating system name, as well as the Elk version number are now available as Scheme variables in scm/siteinfo.scm. The file is created automatically and can be loaded via `(require 'siteinfo)'. o Most of the improvements in scm/debug-new.scm have been merged into the baseline debug.scm and the former has been removed. The inspector now starts at the correct frame when called after an error. o examples/CC/class.c is a simple Elk extension demonstrating encapsulation of a C++ class in a Scheme type. o The file README has been renamed ROADMAP; RELEASE is now README. Interpreter kernel: o Many bugs have been fixed, and the code has been made `64-bit clean'. o New functions for application writers to read/set the `error tag' displayed in error messages and the application name (Get_Error_Tag, Set_Error_Tag, Set_App_Name). o When dynamically loading objects, the C++ static constructors are now called _before_ all extension initializers. Ditto for C++ destructors and extension finalizers. o New function for application/extension writers to load a file whose name is given as a C string (Load_File). o Load_Source_Port has been made `official' and may be used from outside the interpreter. o New functions for application/extension writers to convert Scheme numbers to C unsigned int/long: Get_Unsigned, Get_Unsigned_Long, Get_Exact_Unsigned, Get_Exact_Unsigned_Long. New function Get_Exact_Long. o The `round' primitive now rounds to even for numbers halfway between two integers. o The reader doesn't impose a limit on the length of strings and symbols any longer. o The dynamic loading implementations now use the environment variable TMPDIR if present. o `dump' now works under SGI Irix 5.x. o New constants ELK_MINOR and ELK_MAJOR for application/extension writers. o Symbols containing special characters now print correctly when output with `write'. o Various optimizations in the interpreter's inner loop to compensate for the performance loss caused by the struct-based object representation on some platforms. Extensions: o The X11 extensions now work with X11 Release 6, Sun OpenWindows 3.x, and Sun Motif. o Extension-specific include files (unix.h, xlib.h, xt.h) are now installed in a subdirectory $install_dir/include/extensions for use by applications. o The object files for Athena or Motif widgets are now loaded by means of `require'. o New POSIX-style regular expression extension (see doc/regexp and examples/regexp). o The file hunk.c has been removed from lib/misc, as it no longer serves any purpose. o Several bugs have been fixed in the UNIX and X11 extensions. Changes from release 2.1 to release 2.2 General: o Elk ported to new platforms: SGI Irix 5.1, HP-UX 9.0 o All Scheme files now end with the suffix `.scm' o Introduced new symbols in the config files to be used by the UNIX extension o Reorganized the include files. Split external declarations into `private' (intern.h) and `public' (extern.h) declarations to be used by extensions o It's no longer necessary to specify multiple destination directories in the site file (only install_dir; subdirectories are created automatically) o `init_objects' is gone from the site file, see INSTALL for a new, simpler way to link extensions or an application with Elk statically o New directory $install_dir/lib is created with files module.o, standalone.o and shell scripts linkscheme, makedl, and ldflags (see INSTALL) o Elk can now be used by applications that must have their own main() function. See INSTALL for details. Interpreter kernel: o New primitives to allow blocking of signals from within Scheme code: disable-interrupts, enable-interrupts o Changed Disable_Interrupts and Enable_Interrupts macros to allow nesting and to handle signals used by extensions (specifically by the new UNIX extension) o Extended representation of continuations to carry current interrupt nesting level and restore it when being called o (Re-)enable interrupts in toplevel on error o Added default signal handlers for SIGPIPE and SIGHUP to clean up temporary files o New primitive: `features' o `require' now appends .scm to feature name to obtain file name (if no file name has been specified and if the feature name doesn't have a suffix yet) o Features elk:dump and elk:load-object are provided by the interpreter if dump and dynamic loading are supported o Implemented Register_Onfork() and Call_Onfork() to provide `fork handlers' (used, for instance, by the UNIX extension) o Added fork handlers to the dynamic loading implementations to create links for the temporary files o Added a close function to I/O ports to allow for pipe-based ports o New primitive: char-ready? o Added a check to the code that restarts a dumped interpreter to detect that the start address of the stack has been moved with respect to the original invocation (this happens between Sun-4c and Sun-4m architectures, for instance) o Modified math.c to implement the distinction between exact and inexact numbers as required by the language definition o New primitives: exact->inexact, inexact->exact o The number prefixes #e and #i are now supported o Floating point numbers are no longer automatically reduced to integers; new conversion function Make_Flonum(double) in addition to Make_Reduced_Flonum(double) o Added new conversion functions to cleanly distinguish between C ints and longs: Get_Long(Object), Make_Long(long), Make_Unsigned_Long(unsigned long), and functions to convert bignums from/to C longs o New conversion functions for exact integers: Get_Exact_Integer(Object) and Get_Exact_Long(Object) o Removed the unique `void' type; #v is now converted into the empty symbol by the reader; void? remains for compatibility o Implemented reader table for #-syntax o New function Define_Reader() to allow extensions to register their own read syntaxes (used by the new bitstring extension) o Exported parts of the reader to simplify writing new reader functions in extensions o New functions/macros to convert Scheme strings and/or symbols into C strings (to be used by extension writers): Get_String, Get_Strsym, Get_String_Stack, Get_Strsym_Stack; see src/cstring.c o Now obsolete: Declare_C_Strings, Dispose_C_Strings, Make_C_String o Bug fixes: o fixed a few bugs in the implementation of continuations and tail call optimization and in the generational, incremental garbage collector o there was a bug in the interaction between the garbage collector and `dump' o identified additional critical sections to be protected from delivery of signals o initscheme.scm wasn't resolved against the load-path o quasiquotation now also works for vectors (kudos to Tor Lillqvist for suggesting a simple fix) o a bug in src/load-ld.c could cause the first static variable in a dynamically loaded .o file to not be zeroed Extensions: o New UNIX extension; see doc/unix for the reference manual and examples/unix for a few demonstration programs o New record extension; see doc/record for the reference manual. The `struct' extension is now obsolete o New arbitrary-length bitstring extension; see doc/bitstring for the manual Changes from release 2.0 to release 2.1 General: o New configuration files for the 386/486-PC running 386BSD and DOS/DJGPP, for Suns running Solaris 2.1 (SunOS 5.1, and for the Convex C230 running ConvexOS. o Reorganized the config files and the site file to allow for configuration of the generational, incremental garbage collector o Introduced several new symbols in the config files to simplify installation on several systems o Added new targets to all Makefiles to allow `cross-localization' of the source tree (see comments in DOS section in MACHINES) Interpreter kernel: o Added a generational, incremental garbage collector o New primitives: garbage-collect-status, collect-incremental o Reorganized the source files to accommodate the new garbage collector and to separate garbage collector specific code from code common to both garbage collectors o Empty list no longer counts as false; added primitive `empty-list-is-false-for-backward-compatibility' o Changed delimiter character in load-path argument of -p option from comma to colon o Initialize load-path from ELK_LOADPATH environment variable (if present) o Added argument to -v option to control which messages to print (linker command, init/finit functions) o It's no longer considered an error if an object file contains no initializers o Completely rewritten implementations of `dump' for ELF (SysVR4, Solaris 2.x), ECOFF (Ultrix, Irix), and HP9000 a.out formats; the HP version now correctly handles shared libraries o Added support for dynamic loading under SysVR4 and Solaris 2.x (see comments in MACHINES) o Added code to read symbol table of object files on the Convex o Bug fixes: o dynamic-wind was completely broken; fixed it o fixed a bug in the code that checks for the stack growing direction (caused dumped images to crash on startup) o fixed a bug in the equal? predicate (could enter an infinite loop when applied to environments) o Fixed a number of portability problems, among them: o added O_BINARY flag to open() calls and "b" mode to fopen() calls where necessary o added support for the many different ways to purge a file pointer and tty file descriptor (src/read.c, src/print.c) o Integrated the functionality of the `libutil.a' library from older releases into the interpreter kernel (conversion of symbols and lists of symbols to bit masks and vice versa; routines to manage a pool of weak pointers to objects, used mainly by the Elk X extensions Extensions: o Removed libutil.a (lib/util/*); moved the code into the interpreter kernel (src/terminate.c; src/symbol.c); removed libutil.a from the default load-libraries o Renamed lib/misc/c++.[co] to lib/misc/newhandler.[co] (c++.c isn't a valid filename under DOS) o Added finit function to lib/misc/monitor.c to switch off monitoring and write mon.out on exit Elk/X: o The X extensions are no longer pre-linked against the required X libraries (by means of ld -r); resolving against system libs now always takes place at load time o make-gcontext and copy-gcontext now can be called with a drawable (i.e. pixmap or window) o New primitives: alloc-color alloc-named-color o Removed window-unique-id primitive o Fixed a few bugs in the Xt extension (editres now works with Scheme programs); removed an artificial limitation o Defined a GC visit function for widgets that visits each widget's parents and the children of composite widgets o Added support for Motif gadgets Changes from release 1.5 to release 2.0 General: o The build and install process has been improved significantly (see file INSTALL) o Added a new directory "config" that holds the system-specific configuration files and the site-file o Added a build shell script and a unified Makefile to all directories; "build" creates the ``real'' Makefiles containing system- and site-specific details during the make process o Added install, lint, clean, and distclean targets to all Makefiles o Placed files that are needed during runtime (dynamically loadable object files, Scheme files, the interpreter itself) into separate directories; added "make install" to put files there o Simplified porting Elk to new systems (assembly language support and a stack-extending version of "alloca" are no longer required) o Tested on several new systems (IBM RS/6000, HP9000/700, SGI, Sony; see the file MACHINES) o Placed new files CONTRIBUTORS, MIGRATE, and TODO into the toplevel directory of the distribution o Added a directory "util" that contains tools to simplify porting Elk to new environments and other utilities that are useful on some systems o Added a directory "scripts" that holds the shell scripts used to link instances of the interpreter and extensions. o Removed "stk" directory with test programs (no longer needed) o Added ANSI C prototypes and C++ "extern C" to all include files Interpreter kernel: o Placed include files into a separate directory (include) o Reorganized the source files (separate source files for different a.out formats and different dynamic loading mechanisms) o Changed the way new Scheme objects are allocated to support the generational garbage collector (not yet present in Elk) o Rewrote the code implementing continuations to support full call/cc on all machines o Fixed tail recursion optimization o Added support for POSIX signals (as alternative to BSD reliable signals) o Removed several artificial limitations (such as max. number of before-GC and after-GC functions and statically GC-linked objects) o Removed code that depended on max. number of open files per process o Added bi-directional ports (input-output-ports); new primitive: open-input-output-port o New primitive: port-line-number o Reader now prints line number on syntax error o Max. length of a pathname is now determined correctly (using the POSIX incantations if applicable) o Added code to support dynamic loading under HP-UX (src/load-shl.c) o Added code to call extension finalization functions and C++ destructors on termination o Fixed and improved the code to call extension initialization functions and C++ constructors on startup or when loading extensions o Improved the mechanism to suppress initialization of statically linked extensions on startup ("dont_init_if_name" in config/site) o Can use ANSI "atexit" as alternative to redefining "exit" o Added option -p to specify load path o Scheme file "initscheme" is now loaded before the toplevel is loaded o Changed "rand" to use rand() if random() isn't there o re-entrant-continuations? primitive is no longer needed (returns always #t now) o Added a general mechanism to register termination functions for individual objects (e.g. to close files on GC); see src/terminate.c o linkscheme shell script improved; added code to support the stupid AIX linker o Fixed numerous things that caused lint or "gcc -ansi" to complain o Changed the dynamic loading, "dump", and a.out symbol table reading code in numerous places to make it work on new systems and to make it more readable and maintainable Extensions: o Combined lib/util/symbol.o and lib/util/objects.o into new library libutil.a; put this library into the default "load-libraries" o Moved lib/util/string.c and lib/util/string.h into the interpreter o Moved files from lib directory into new subdirectory "misc" o Added POSIX sysconf stuff to unix.c to determine max. number of open files per process Elk/X: o Made the code mostly "lint clean" and "gcc -ansi clean" o Fixed bogus variable definitions in xlib.h and xt.h o Xlib: added support for client-message event o Xt: added code to avoid a bug in Motif 1.1.4 o Xt: added optional "mask" argument to context-add-input o Removed site-dependent information from scm/xwidgets (file is now created from scm/xwidgets.src during the build process) o Renamed widget .d files that were longer than 14 characters; added ALIASES file for each widget set containing mappings from real widget names to short names Documentation: o Added sub-directory "paper" containing a draft version of a paper about Elk User-contributed extensions: o A foreign function interface, an Elk Shell, and a vector extension have been contributed by J. P. Lewis (contrib/zelk). Changes from release 1.4 to release 1.5 General: o Added a "contrib" directory for user-contributed extensions that I have not fully tested and/or integrated into Elk o Renamed ORIGIN to COPYRIGHT Interpreter kernel: o Added support for the Amiga, A/UX and System V Release 4 (ELF a.out format) o Added special load-library for MIPS (-lc_G0) o Extension-interface: replaced Val() by Var_Set()/Var_Get() o Modified load, autoload, and require so that multiple .o-files can be loaded simultaneously o Added -1+ as a synonym for 1- o Bug fixes: o fixed a GC-related bug o fixed a bug that occurred when allocating a very large heap o fixed a bug in case-insensitive string comparison o fixed a bug in macro "when" o changed and clarified semantics of print-depth/print-length o IEEE 1178/R^4RS compatibility: o replaced close-port by close-input-port and close-output-port o added primitives caaaar .. cddddr o added peek-char primitive o added -i option for case-insensitive operation o Removed -bc option o Removed CBREAK-hack in read-char Elk/X: o Fixed several GC-related bugs (objects belonging to Xlib/Xt are no longer terminated by garbage collector when unreferenced) o Fixed a bug in the interface to the Grip widget o Modified code to load widgets to make use of new capability to load multiple .o-files Documentation: o Interpreter kernel: documented new functions, clarified some sections o Xlib/Xt: documented X-related behavior of garbage collector, pointed out GC-related pitfalls Changes from release 1.3 to release 1.4 Interpreter kernel: o Support for the NeXT machines added o New primitive list? provided o Two bugs in the tail recursion code fixed o -v option to trace /bin/ld-calls o man-page written Elk/X: o Tested under X11R5 o X11R3 and earlier versions are no longer supported o The HP-widget code has been removed from the distribution o New Xlib-primitives: install-colormap uninstall-colormap list-installed-colormaps xlib-release-5-or-later? o Xt interface now supports actions and accelerator tables o Bug in set-context-fallback-resources! fixed o New Xt-functions: widget-name widget-translate-coordinates application-initialize context-add-action install-accelerators install-all-accelerators xt-release-5-or-later? o Support for new widget classes: menubutton panner porthole repeater simplemenu sme smebsb smeline stripchart tree o vpaned renamed to paned o Example programs have been moved into a new examples directory with sub-directories for Scheme, Xlib, Xaw, Motif o New Xaw example programs that demonstrate the new widget classes, accelerators, actions, etc. Other extensions: o Interface to the GNU gdbm-library