prepare NEWS for 1.9.6

* NEWS: Prepare NEWS for 1.9.6.
This commit is contained in:
Andy Wingo 2009-12-11 18:17:01 +01:00
commit 5bb408ccaf

166
NEWS
View file

@ -8,150 +8,7 @@ Please send Guile bug reports to bug-guile@gnu.org.
(During the 1.9 series, we will keep an incremental NEWS for the latest
prerelease, and a full NEWS corresponding to 1.8 -> 2.0.)
Changes in 1.9.5 (since the 1.9.4 prerelease):
** Compiled procedures may now have more than one arity.
This can be the case, for example, in case-lambda procedures. The
arities of compiled procedures may be accessed via procedures from the
`(system vm program)' module; see "Compiled Procedures", "Optional
Arguments", and "Case-lambda" in the manual.
** `case-lambda' is now available in the default environment.
The binding in the default environment is equivalent to the one from the
`(srfi srfi-16)' module. Use the srfi-16 module explicitly if you wish
to maintain compatibility with Guile 1.8 and earlier.
** VM calling convention change: callee-parsed arguments
As an internal implementation detail, compiled procedures are now
responsible for parsing their own arguments, which they receive on the
stack.
** VM support for multiple-arity dispatch
Calls to procedures with multiple arities, for example those made be
`case-lambda', now dispatch via special opcodes, without the need to
cons a rest list.
** Intermediate language support for multiple-arity procedures.
In the intermediate language, tree-il, all procedures may have one or
more arities. This allows all Guile languages to have multiple arities.
It is, however, an incompatible change, and anyone maintaining a
compiler out-of-tree would be advised to get it into Guile soon :)
** `lambda*' and `define*' are now available in the default environment
As with `case-lambda', `(ice-9 optargs)' continues to be supported, for
compatibility purposes. No semantic change has been made (we hope).
Optional and keyword arguments now dispatch via special VM operations,
without the need to cons rest arguments, making them very fast.
** Better support for Lisp `nil'.
The bit representation of `nil' has been tweaked so that it is now very
efficient to check e.g. if a value is equal to Scheme's end-of-list or
Lisp's nil. Additionally there are a heap of new, specific predicates
like scm_is_null_or_nil. Probably in the future we will #define
scm_is_null to scm_is_null_or_nil.
** No future.
Actually the future is still in the state that it was, is, and ever
shall be, Amen, except that `futures.c' and `futures.h' are no longer a
part of it. These files were experimental, never compiled, and would be
better implemented in Scheme anyway. In the future, that is.
** Support for static allocation of strings, symbols, and subrs.
Calls to snarfing CPP macros like SCM_DEFINE macro will now allocate
much of their associated data as static variables, reducing Guile's
memory footprint.
** Inline vector allocation
Instead of having vectors point out into the heap for their data, their
data is now allocated inline to the vector object itself. The same is
true for bytevectors, by default, though there is an indirection
available which should allow for making a bytevector from an existing
memory region.
** New syntax: include-from-path.
`include-from-path' is like `include', except it looks for its file in
the load path. It can be used to compile other files into a file.
** New syntax: quasisyntax.
`quasisyntax' is to `syntax' as `quasiquote' is to `quote'. See the R6RS
documentation for more information. Thanks to Andre van Tonder for the
implementation.
** Cleanups to Guile's primitive object system.
There were a number of pieces in `objects.[ch]' that tried to be a
minimal object system, but were never documented, and were quickly
obseleted by GOOPS' merge into Guile proper. So `scm_make_class_object',
`scm_make_subclass_object', `scm_metaclass_standard', and like symbols
from objects.h are no more. In the very unlikely case in which these
were useful to you, we urge you to contact guile-devel.
** GOOPS cleanups.
GOOPS had a number of concepts that were relevant to the days of Tcl,
but not any more: operators and entities, mainly. These objects were
never documented, and it is unlikely that they were ever used. Operators
were a kind of generic specific to the Tcl support. Entities were
applicable structures, but were unusable; entities will come back in the
next alpha release, but with a less stupid name.
** Faster bit operations.
The bit-twiddling operations `ash', `logand', `logior', and `logxor' now
have dedicated bytecodes. Guile is not just for symbolic computation,
it's for number crunching too.
** `inet-ntop' and `inet-pton' are always available.
Guile now use a portable implementation of `inet_pton'/`inet_ntop', so
there is no more need to use `inet-aton'/`inet-ntoa'. The latter
functions are deprecated.
** R6RS block comment support
Guile now supports R6RS nested block comments. The start of a comment is
marked with `#|', and the end with `|#'.
** `guile-2' cond-expand feature
To test if your code is running under Guile 2.0 (or its alpha releases),
test for the `guile-2' cond-expand feature. Like this:
(cond-expand (guile-2 (eval-when (compile)
;; This must be evaluated at compile time.
(fluid-set! current-reader my-reader)))
(guile
;; Earlier versions of Guile do not have a
;; separate compilation phase.
(fluid-set! current-reader my-reader)))
** ABI harmonization
`scm_search_path' now has the signature it did in 1.8, reverting an
incompatible change made in 1.9.0.
** Compile-time warnings: -Warity-mismatch
Guile can warn when you pass the wrong number of arguments to a
procedure. Pass the -Warity-mismatch on the `guile-tools compile'
command line, or add `#:warnings '(arity-mismatch)' to your `compile'
or `compile-file' invocation.
** Guile is now built without `-Werror' by default
Use the `--enable-error-on-warning' configure option to enable it.
Changes in 1.9.6 (since the 1.9.5 prerelease):
** And of course, the usual collection of bugfixes
@ -637,6 +494,13 @@ The binding in the default environment is equivalent to the one from the
`(srfi srfi-16)' module. Use the srfi-16 module explicitly if you wish
to maintain compatibility with Guile 1.8 and earlier.
** Compiled procedures may now have more than one arity.
This can be the case, for example, in case-lambda procedures. The
arities of compiled procedures may be accessed via procedures from the
`(system vm program)' module; see "Compiled Procedures", "Optional
Arguments", and "Case-lambda" in the manual.
** `lambda*' and `define*' are now available in the default environment
As with `case-lambda', `(ice-9 optargs)' continues to be supported, for
@ -772,6 +636,12 @@ Guile now use a portable implementation of `inet_pton'/`inet_ntop', so
there is no more need to use `inet-aton'/`inet-ntoa'. The latter
functions are deprecated.
** Fast bit operations.
The bit-twiddling operations `ash', `logand', `logior', and `logxor' now
have dedicated bytecodes. Guile is not just for symbolic computation,
it's for number crunching too.
** R6RS block comment support
Guile now supports R6RS nested block comments. The start of a comment is
@ -886,6 +756,14 @@ shall be, Amen, except that `futures.c' and `futures.h' are no longer a
part of it. These files were experimental, never compiled, and would be
better implemented in Scheme anyway. In the future, that is.
** Better support for Lisp `nil'.
The bit representation of `nil' has been tweaked so that it is now very
efficient to check e.g. if a value is equal to Scheme's end-of-list or
Lisp's nil. Additionally there are a heap of new, specific predicates
like scm_is_null_or_nil. Probably in the future we will #define
scm_is_null to scm_is_null_or_nil.
** Support for static allocation of strings, symbols, and subrs.
Calls to snarfing CPP macros like SCM_DEFINE macro will now allocate