partial 1.9.11 NEWS
* NEWS: Add some 1.9.11 news -- unfinished, though.
This commit is contained in:
parent
698514350a
commit
26997111c8
1 changed files with 163 additions and 0 deletions
163
NEWS
163
NEWS
|
|
@ -10,6 +10,169 @@ prerelease, and a full NEWS corresponding to 1.8 -> 2.0.)
|
|||
|
||||
Changes in 1.9.11 (since the 1.9.10 prerelease):
|
||||
|
||||
** New module: (sxml match)
|
||||
|
||||
Guile has incorporated Jim Bender's `sxml-match' library. See
|
||||
"sxml-match' in the manual for more information. Thanks, Jim!
|
||||
|
||||
** New module: (srfi srfi-9 gnu)
|
||||
|
||||
This module adds an extension to srfi-9, `set-record-type-printer!'. See
|
||||
... in the manual for more information.
|
||||
|
||||
** Support for R6RS libraries
|
||||
|
||||
The `library' and `import' forms from the latest Scheme report have been
|
||||
added to Guile, in such a way that R6RS libraries share a namespace with
|
||||
Guile modules. R6RS modules may import Guile modules, and are available
|
||||
for Guile modules to import via use-modules and all the rest. See "R6RS
|
||||
Libraries" in the manual for more information.
|
||||
|
||||
** Implementations of R6RS libraries
|
||||
|
||||
Guile now has implementations for all of the libraries defined in the
|
||||
R6RS. Thanks to Julian Graham for this excellent hack. See ... in the
|
||||
manual for a full list of libraries.
|
||||
|
||||
** Partial R6RS compatibility
|
||||
|
||||
Guile now has enough support for R6RS to run a reasonably large subset
|
||||
of R6RS programs. Guile is not fully R6RS compatible. Many
|
||||
incompatibilities are simply bugs, though some parts of Guile will
|
||||
remain R6RS-incompatible for the foreseeable future. See ... in the
|
||||
manual Please contact bug-guile@gnu.org if you have found an issue not
|
||||
mentioned in that compatibility list.
|
||||
|
||||
FIXME: put this list in the manual:
|
||||
(rnrs)
|
||||
(rnrs arithmetic bitwise)
|
||||
(rnrs arithmetic flonums)
|
||||
(rnrs control)
|
||||
(rnrs enums)
|
||||
(rnrs eval)
|
||||
(rnrs files)
|
||||
(rnrs hashtables)
|
||||
(rnrs lists)
|
||||
(rnrs mutable-pairs)
|
||||
(rnrs mutable-strings)
|
||||
(rnrs programs)
|
||||
(rnrs r5rs)
|
||||
(rnrs record syntactic)
|
||||
(rnrs records inspection)
|
||||
(rnrs records procedural)
|
||||
(rnrs sorting)
|
||||
(rnrs unicode)
|
||||
|
||||
** Macro expansion produces structures instead of s-expressions
|
||||
|
||||
In the olden days, macroexpanding an s-expression would yield another
|
||||
s-expression. Though the lexical variables were renamed, expansions of
|
||||
core forms like `if' and `begin' were still non-hygienic, as they relied
|
||||
on the toplevel definitions of `if' et al being the conventional ones.
|
||||
|
||||
The solution is to expand to structures instead of s-expressions. There
|
||||
is an `if' structure, a `begin' structure, a `toplevel-ref' structure,
|
||||
etc. The expander already did this for compilation, producing Tree-IL
|
||||
directly; it has been changed now to do so when expanding for the
|
||||
evaluator as well.
|
||||
|
||||
The real truth is somewhat more involved: Tree-IL doesn't exist until
|
||||
modules have been booted, but we need the expander to boot modules, and
|
||||
additionally we need a boot expander before psyntax is loaded. So a
|
||||
subset of Tree-IL is defined in C, and the boot expander produces these
|
||||
"macroexpanded" structures. Psyntax has been modified to produce those
|
||||
structures as well. When Tree-IL loads, it incorporates those structures
|
||||
directly as part of its language.
|
||||
|
||||
Finally, the evaluator has been adapted to accept these "expanded"
|
||||
structures, and enhanced to better support the gamut of this subset of
|
||||
Tree-IL, including `lambda*' and `case-lambda'. This was a much-needed
|
||||
harmonization between the compiler, expander, and evaluator.
|
||||
|
||||
** Deprecated `scm_badargsp'
|
||||
|
||||
This function is unused in Guile, but was part of its API.
|
||||
|
||||
** `sxml->xml' enhancement
|
||||
|
||||
`sxml->xml' from `(sxml simple)' can now handle the result of
|
||||
`xml->sxml'. See bug #29260 for more information.
|
||||
|
||||
** New module: (system vm coverage)
|
||||
|
||||
This new module can produce code coverage reports for compiled Scheme
|
||||
code on a line-by-line level. See "Code Coverage" in the manual for more
|
||||
information.
|
||||
|
||||
** Faster VM hooks.
|
||||
|
||||
The frame objects passed to VM hook procedures are now allocated on the
|
||||
stack instead of the heap, making the next-instruction hook practical to
|
||||
use.
|
||||
|
||||
** Add `program-free-variables' to `(system vm program)'.
|
||||
|
||||
(revise docs?)
|
||||
|
||||
** New `eval-when' situation: `expand'
|
||||
|
||||
Sometimes it's important to cause side-effects while expanding an
|
||||
expression, even in eval mode. This situation is used in
|
||||
`define-module', `use-modules', et al, in order to affect the current
|
||||
module and its set of syntax expanders.
|
||||
|
||||
** Better module-level hygiene
|
||||
|
||||
Instead of attempting to track changes to the current module when
|
||||
expanding toplevel sequences, we instead preserve referential
|
||||
transparency relative to where the macro itself was defined. If the
|
||||
macro should expand to expressions in the context of the new module, it
|
||||
should wrap those expressions in `@@', which has been enhanced to accept
|
||||
generic expressions, not just identifier references. For example, part
|
||||
of the definition of the R6RS `library' form:
|
||||
|
||||
#'(begin
|
||||
(define-module (name name* ...) #:pure #:version (version ...))
|
||||
(import ispec) ...
|
||||
(re-export r ...) (export e ...)
|
||||
(@@ (name name* ...) body)
|
||||
...)
|
||||
|
||||
In this example the `import' refers to the `import' definition in the
|
||||
module where the `library' macro is defined, not in the new module.
|
||||
|
||||
** Module system macros rewritten as hygienic macros
|
||||
|
||||
`define-module', `use-modules', `export', and other such macros have
|
||||
been rewritten as hygienic macros. This allows the necessary referential
|
||||
transparency for the R6RS `library' for to do the right thing.
|
||||
|
||||
** Compiler and VM documentation updated
|
||||
|
||||
The documentation for the compiler and VM had slipped out of date; it
|
||||
has been brought back... to the future!
|
||||
|
||||
** Tree-IL field renaming: `vars' -> `gensyms'
|
||||
|
||||
The `vars' fields of <let>, <letrec>, <fix>, and <lambda-case> has been
|
||||
renamed to `gensyms', for clarity, and to match <lexical-ref>.
|
||||
|
||||
** Removed `version' field from <language>
|
||||
|
||||
Language versions weren't being updated or used in any worthwhile way;
|
||||
they have been removed, for now at least.
|
||||
|
||||
** New procedure: `module-export-all!'
|
||||
|
||||
This procedure exports all current and future bindings from a module.
|
||||
Use as `(module-export-all! (current-module))'.
|
||||
|
||||
** Updates to manual
|
||||
|
||||
The introductory sections of the manual have been reorganized
|
||||
significantly, making it more accessible to new users of Guile. Check it
|
||||
out!
|
||||
|
||||
** And of course, the usual collection of bugfixes
|
||||
|
||||
Interested users should see the ChangeLog for more information.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue