Greetings!  If anyone has comments on the following release notes I'd be
appreciative!

=============================================================================
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
                                                                        
    
    <meta http-equiv="content-type"
          content="text/html; charset=ISO-8859-1">
  </head>
  <body style="width: 1000px;">
    <br>
    <br>
    <div align="center"><font size="+2"><b>GCL 2.7.0 RELEASE NOTES<br>
    </b></font></div>
    <font size="+2"><br>
    </font>
    <p>
      Greetings!  The GCL team is happy to announce the release of version
      2.7.0, the culmination of many years of work and a major development
      in the evolution of GCL.  Please see http://www.gnu.org/software/gcl for
      downloading information.</p>
    
    Of note:
    
    <p> The GNU build system has been installed.</p>

    <p>
      The git repository hosts the sources at the maintainer-clean
      level, plus some packaging files for various systems.  When
      building from a git checkout, you should not need autotools, but
      you may need to touch the following files in order, as git does
      not preserve timestamps: aclocal.m4 configure.in configure
      Makefile.am Makefile.in.

    <p>
      When building from the distributed tarball this will never be
      necessary.  Furthermore, as is customary this tarball will
      include in addition pre-built documentation, so the user will
      not need texinfo unless building the optional standard targets
      dvi, pdf, and html.
    </p>
    
    <p>
      The check target will run the ansi-tests and some timing
      benchmarks.
    </p>
    
    <p>
      The dist target will recreate the distribution tarball, and
      distcheck will test it.
    </p>
    
    <p>
      Parallel builds are supported, but you should note that GCL will
      work in available system memory be default, and if multiple
      processes do not coordinate allocation, the effects could be
      negative.  The environment variables GCL_MEM_MULTIPLE and
      GCL_MEM_BOUND can limit the memory each process sees, and
      GCL_MULTIPROCESS_MEMORY_POOL will instruct multiple processes to
      manage the memory collectively.  These variables and more are
      documented in the info pages.
    </p>
    
    <p>
      Configure enable/disable options for gprof, xgcl, and gcltk will
      govern whether these features are built and installed.
    </p>
    
    <p>
      All known ANSI issues have been resolved, as reflected in the
      testsuite run via 'make check'.  Both traditional and ANSI images are
      built and installed.  The ANSI image is selected by {prefix}/bin/gcl
      if the environment variable GCL_ANSI is set to any value.
    </p>
    <p>
      This has required some backward non-compatible changes in all
      images, most notably that functions are no longer lists
      describing the source.  One can typically upgrade code
      generating old `(lambda ...)  functions with the simple
      modification (eval `(lambda ...)).
    </p>
    
    <p>
      GCL functions carry a lot of extra information by default, including
      the call signature, the assumed signatures of fast-link callees, the
      compressed-string version of the source, and the file from which it
      was loaded.  This enables some useful features:
      <ul>
        <li>All functions not referencing static data (i.e. closures,
          load-time-value) can be inlined regardless of the (declaim
          (inline)) status at function definition.  The static data
          limitation will hopefully be removed in the future.</li>
        <li>GCL fully implements 'function-lambda-expression, usefully
          abbreviated with 'si::fle.</li>
        <li>GCL provides a utility 'si::do-recomp to identify signature
          conflicts and recompile the original source files.  The older
          utility using optional .fn files to generate a sys-proclaims.lisp is
          still supported, but is trumped by the signature information
          accompanying the function itself.  The old system tried to handle
          this on a per-file basis, which was limited as the produced
          signatures implicitly depended on signatures in other files.  The new
          system analyzes all conflicts at once, iterating until consistency
          is achieved.</li>
        <li>Self-explanatory functions 'si::file and
          'si::signature.</li>
        <li>GCL provides 'compiler::interpret to reverse 'compile.</li>
        <li>Functions 'compile and 'compiler::interpret are idempotent
          and can be invoked multiple times.</li>
        <li>Heavy use of automatic inlining is used by the compiler.</li>
      </ul>
    </p>

    <p> Limited profiling is available in all images, when supported,
    by adding the :prof-p t arguments to compile-file.  The
    corresponding 'compiler::*default-prof-p* can make this the
    default in any image.  Only functions thus compiled will appear in
    the output of (si::gprof-start)(...)(si::gprof-quit).  To profile
    all of GCL, the profiling images can be run by setting the
    GCL_PROF environment variable to any value before invoking
    {prefix}/bin/gcl.  The startup banner will let you know which
    image you are running.
    </p>

    <p> On many systems, notably x86_64, the standard code produced by
      gcc (the 'medium model') must lie within the first 2Gb of memory.
      The variabe 'si::*code-block-reserve* can allocate space for this
      early on if needed, for example before running a large job on a
      machine with many Gb of available memory.  On startup all images
      come with an extra 30Mb of space in this variable.  Usage is
      documented in the info pages.
    </p>

    <p>
      If the heap has grown too large and there is no longer any space
      below 2Gb, code can be compiled and loaded for the 'large'
      memory model at about a 10% performance penalty.  The options
      :large-memory-model t to compile-file, or the corresponding
      'compiler::*default-large-memory-model-p*, can control this
      behaviour.  At the moment this support is limited to x86_64
      systems. 
    </p>
    
    <p>
      The function 'compiler::watch can take any variable or function
      name in addition to several special symbols to trace the
      compiler's logic.  Some useful special symbols are
      'compiler::type-inference, 'compiler::branch-elimination,
      'compiler::inline, and 'compiler::tail-recursion.  The function
      'compiler::unwatch turns off tracing on the supplied arguments,
      or universally with no arguments.
    </p>
    
    <p> The type system has been completely redesigned around
    bit-vectors.  The functions 'si::cmp-norm-tp and
    'si::cmp-unnorm-tp may be of interest.
    </p>
    
    <p> The variable 'compiler::*annotate* if set will place comments
    in the generated C file illustrating the inlining. The variable
    'compiler::*disassemble-objdump* governs whether assembly
      accompanies the C source output of disassemble.
    </p>

    <p> The variable 'si::*fast-link-warnings* can let you know if
    calls to your function cannot be fast linked.  All calls
    regardless of signatures should proceed correctly, albeit possibly
    slowly in case of signature mismatches.</p>
    
    <p> The demo functions 'xgcl-demo and 'gcl-tk-demo have been
      updated.</p>
    

    <br>
  </body>
</html>
=============================================================================
-- 
Camm Maguire                                        c...@maguirefamily.org
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply via email to