% (C) Copyright International Business Machines Corporation 23 January 
% 1990.  All Rights Reserved. 
%  
% See the file USERAGREEMENT distributed with this software for full 
% terms and conditions of use. 
% File: user.tex  (the users guide for Hermes)
% SCCS Info: "@(#)changelog.tex	1.4 3/13/92"

\section{Change History}
\label{changelog}

\subsection{Prior To Release 0.6alpha}

This User's Guide was first prepared for release 0.6alpha, which was
also the first release that was made available for outside users.
There is no change information from prior releases.

\subsection{Changes From Release 0.6alpha To Release 0.7alpha}

\begin{itemize}

\item{\em Real numbers.}  Some rudimentary support for real numbers
has been added.  Specifically, machines with a 32-bit int and a 64-bit
double float should work properly.  The ACCURACY specification on real
type definitions is ignored.  Depletion exceptions are raised for
real computations that exceed the range or precision of the
representation.

\item{\em Polymorph checking.}  Polymorphs are now actually wrapped
with correct type information, and this information is checked on
UNWRAP operations.  Currently, polymorphs are wrapped with empty
typestates, and the wrapped typestates are still ignored on UNWRAP
operations.

\item{\em Improved MAIN interface.}  The MAIN interface (defined in
interfaces/main.d) has been substantially redesigned for added
flexibility and convenience.  Most of what was formerly provided in
the main interface is now available via a resource manager that is
provided directly in the main interface.  The old main interface is
available under the name ``oldmain,'' and a program named ``oldmain''
translates the new main interface to the old for the purpose of
running programs written to the old main interface.  The oldmain
definitions and process modules may disappear in some future release.
The ``rmain'' interface, which was formerly an alternative to
``main,'' has been removed; programs written to it should be converted
to use the new ``main'' interface.

\item{\em Unbundled distributed support.}  The functionality that was
formerly provided in the ``dmain'' program has been split into three
separate programs: ``startnet,'' ``getlink,'' and ``linkserver.''  See
section~\ref{distributed} for details.

\item{\em Definitions module checking.}  Complete checking of
definitions modules is now performed by ``dcom.''  This includes
detecting erroneous modules that cannot be produced by the Hermes
parser but could nevertheless be constructed by a Hermes program.

\item{\em Value constructor.}  A new C program program, ``construct,''
can be used to construct arbitrary Hermes values and store them in
files in a form suitable for reading via the ``readObject'' and
``pathReadObject'' functions.

\item{\em Name changes.}  The ``hermi'' command has been renamed to
``hermes'', and what was formerly called ``hermes'' is now ``hparse.''
There's also a new command ``hsh'' which is simply an abbreviation for
``hermes cache shell.''

\item{\em New platforms.} Ports to three new platforms have been
provided by users of release 0.6alpha:

\begin{itemize}

\item NeXT Machine: ported by Seth Strumpf and Rob Lehman of Columbia
University's Center for Computing Activities.

\item HP 9000-series running HP-UX: ported by Willard Korfhage of
Brooklyn Polytechnic Institute.

\item Convex: ported by Willard Korfhage of Brooklyn Polytechnic
Institute.

\end{itemize}


\end{itemize}

\cb{08a}
\subsection{Changes From Release 0.7alpha To Release 0.8alpha}
\begin{itemize}
\item {\em Performance Improvements.}  Hermes will not win any
performance awards yet, but the story is much improved from Release
0.7alpha:
\begin{itemize}
\item A new facility is available on some (but not all) platforms for
transforming compiled Hermes programs into C code that is dynamically
loaded as needed.  Such ``C-coded'' hermes programs typically execute
at twice the speed of their fully interpreted counterparts.  C-coded
and non-C-coded programs can be run in the same environment.  The
C-coding facility is fully described in Section~\ref{c-coded} of this
Users' Guide.  C-coded versions of all the standard Hermes binaries
are available as part of the distribution, for platforms that support
the C-coding facility.
\item Many (probably not all) storage leaks have been plugged.  Some
of the leaks were quite large!
\item The stored representations of Hermes objects (e.g., .po and .do
files) has been made much more compact.  Redundant shape information
has been eliminated (this information formerly expanded storage
requirements for tables astronomically), and sharing of tables is now
reflected in the stored representation and reestablished when objects
are loaded into the running system.
\item Statically linked programs and program literals now appear at
most once in any given .po file.  Formerly, if program A linked
programs B and C, both of which linked program D, D would physically
appear twice in A's .po file.
\item The interpreter is now distributed in an optimized form, without
debugging support.  On systems that support the C-coding facilities,
the interpreter is not stripped, as symbols are required at run-time
to dynamically link program code.
\item Many ``system'' programs are now fully statically linked, where
they formerly used the ``pathLoad'' facility to gather their pieces.
This not only removes a large number of modules from the system
``bin'' directory, it also results in much quicker startup of these
modules, since dozens of calls to ``findfile'', each requiring several
filesystem accesses, are avoided.  Affected programs include the type
checker, the code generator, the disassembler, and the ``makehermes''
tool.
\end{itemize}
\item {\em Program objects.}  Values of type {\tt predefined!program}
produced by the compiler no longer contain uninitialized fields.
Although the {\tt assert checked(p)} and {\tt checkdefinitions}
statements are still not supported, temporary substitutes in the form
of the {\tt checker} and {\tt definitionschecker} resources are now
provided to check programs and definitions modules on-the-fly.

\item {\em Non-Blocking I/O.}  All I/O is now performed in an
interrupt-driven, non-blocking fashion.  The {\tt BLOCKINGIO}
environment variable is no longer used.  The interfaces in the {\tt
unix} definitions module have been dramatically redesigned, to provide
a much more Hermes-like feel for the services they provide.  Programs
that made direct use of the interface described in the former {\tt
unix} definitions module will require reworking to operate in
0.8alpha.  Similarly for programs that directly accessed the
capabilities provided in the {\tt unix} resource.
\item {\em Documentation.}  A number of new documents are available in
the ``doc'' component of the distribution:
\begin{itemize}
\item {\em How to Write C-Hermes Code}, by Willard Korfhage of 
Brooklyn Polytechnic.  This document was written to Release 0.7alpha,
and some of the information it contains is out-of-date with respect to
0.8alpha.  Nevertheless, it should prove extremely valuable to anybody
who contemplates adding C-Hermes routines to the interpreter.
\item {\em Hermes in 24 Pages}, a ``poor-man's'' reference guide to
the Hermes language.  The book is far more complete.
\end{itemize}
\item {\em Makehermes.}  The {\tt makehermes} tool now recognizes both
of the Hermes commenting styles.  Several helpful debugging options
have been added, and some bugs have been fixed.
\item {\em Cache}.  The cache is now started automatically by the
standard root program.  It should not be invoked explicitly on the
hermes command line.
\item {\em ``hsh'' and ``hparse'' commands.}  These commands have
been removed from the distribution.  The ``hermes'' command with no
command line arguments will now start running the ``shell'' program,
thereby rendering hsh obsolete.  The hparse command was never useful
as a general user utility, and should not have been present in the
distribution.  The ``hparse'' executable no longer appears pre-built
in the distribution.  For similar reasons, the ``chgram'' and ``asm''
programs no longer appear as pre-built executables.  All three can be
generated from sources should they be needed for booting a new system
with modifications to the interpreter.
\item {\em {\tt Oldmain} interface and filter.}  The {\tt oldmain} interface
is no longer present in the distribution.  The {\tt oldmain} program
has also been removed.  Programs that still use the {\tt oldmain}
interface should be reworked to use the current {\tt main} interface.

\item {\em Trapping of Interrupts.}  The interpreter now traps most
trappable interrupts that would otherwise cause the program to
terminate (notably, SIGINT interrupts generated by typing control-c
from the controlling terminal).  When such an interrupt is caught, the
interpreter sets an internal flag that will cause it to exit at the
next scheduling opportunity.  If ten signals are caught before the
exit is taken, the interpreter exits immediately.  Thus if an
interpreter bug causes an internal infinite loop, you can still type
control-c ten times to exit the interpreter.  On exit, the interpreter
restores initial terminal modes for stdin and stdout, performs profile
processing, and various other termination chores.

\item {\em Standard Resources.} The {\tt unix} resource no longer
appears in the resource manager constructed by the {\tt root} process.
All its former functionality is available via the new {\tt stdio}
resource.  New resources {\tt checker} and {\tt definitionschecker}
allow checking of process and definitions modules constructed under
program control.

\end{itemize}

\endcb{08a}
