1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 11:50:28 +02:00

Update NEWS for records and exceptions work

* NEWS: Update.
* doc/ref/api-data.texi (Records): Fix a typo.
This commit is contained in:
Andy Wingo 2019-11-14 21:37:00 +01:00
parent 95efe14e44
commit 4b2c512b94
2 changed files with 67 additions and 3 deletions

66
NEWS
View file

@ -10,6 +10,63 @@ Changes in alpha 2.9.5 (since alpha 2.9.4):
* Notable changes * Notable changes
** Record unification
Guile used to have a number of implementations of structured data types
in the form of "records": a core facility, SRFI-9 (records), SRFI-35
(condition types -- a form of records) and R6RS records. These
facilities were not compatible, as they all were built in different
ways. This had the unfortunate corollary that SRFI-35 conditions were
not compatible with R6RS conditions. To fix this problem, we have now
added the union of functionality from all of these record types into
core records: single-inheritance subtyping, mutable and immutable
fields, and so on. See "Records" in the manual, for full details.
R6RS records, SRFI-9 records, and the SRFI-35 and R6RS exception types
have been accordingly "rebased" on top of core records.
** Reimplementation of exceptions
Since Guile's origins 25 years ago, `throw' and `catch' have been the
primary exception-handling primitives. However these primitives have
two problems. One is that it's hard to handle exceptions in a
structured way using `catch'. Few people remember what the
corresponding `key' and `args' are that an exception handler would see
in response to a call to `error', for example. In practice, this
results in more generic catch-all exception handling than one might
like.
The other problem is that `throw', `catch', and especially
`with-throw-handler' are quite unlike what the rest of the Scheme world
uses. R6RS and R7RS, for example, have mostly converged on
SRFI-34-style `with-exception-handler' and `raise' primitives, and
encourage the use of SRFI-35-style structured exception objects to
describe the error. Guile's R6RS layer incorporates an adapter between
`throw'/`catch' and structured exception handling, but it didn't apply
to SRFI-34/SRFI-35, and we would have to duplicate it for R7RS.
In light of these considerations, Guile has now changed to make
`with-exception-handler' and `raise-exception' its primitives for
exception handling and defined a hierarchy of R6RS-style exception types
in its core. SRFI-34/35, R6RS, and the exception-handling components of
SRFI-18 (threads) have been re-implemented in terms of this core
functionality. There is also a a compatibility layer that makes it so
that exceptions originating in `throw' can be handled by
`with-exception-hander', and vice-versa for `raise-exception' and
`catch'.
Generally speaking, users will see no difference. The one significant
difference is that users of SRFI-34 will see more exceptions flowing
through their `with-exception-handler'/`guard' forms, because whereas
before they would only see exceptions thrown by SRFI-34, now they will
see exceptions thrown by R6RS, R7RS, or indeed `throw'.
Guile's situation is transitional. Most exceptions are still signalled
via `throw'. These will probably migrate over time to
`raise-exception', while preserving compatibility of course.
See "Exceptions" in the manual, for full details on the new API.
** More optimization for unexported definitions at -O3 ** More optimization for unexported definitions at -O3
There is a new optimization pass, `seal-private-bindings', which is There is a new optimization pass, `seal-private-bindings', which is
@ -36,7 +93,7 @@ Related to the last point, since the "Fix literal matching for
module-bound literals" change in the 2.2 series, it was no longer module-bound literals" change in the 2.2 series, it was no longer
possible to use the conventional `_' binding as an alias for `gettext', possible to use the conventional `_' binding as an alias for `gettext',
because a local `_' definition would prevent `_' from being recognized because a local `_' definition would prevent `_' from being recognized
as aux syntax for `match', `syntax-rules', and similar. The new as auxiliary syntax for `match', `syntax-rules', and similar. The new
recommended conventional alias for `gettext' is `G_'. recommended conventional alias for `gettext' is `G_'.
** Add --r6rs command-line option ** Add --r6rs command-line option
@ -46,6 +103,13 @@ R6RS-compatible. This procedure is called if the user passes `--r6rs'
as a command-line argument. See "R6RS Incompatibilities" in the manual, as a command-line argument. See "R6RS Incompatibilities" in the manual,
for full details. for full details.
* New deprecations
** The two-argument form of `record-constructor'
Calling `record-constructor' with two arguments (the record type and a
list of field names) is deprecated. Instead, call with just one
argument, and provide a wrapper around that constructor if needed.
Changes in alpha 2.9.x (since the stable 2.2 series): Changes in alpha 2.9.x (since the stable 2.2 series):

View file

@ -1,6 +1,6 @@
@c -*-texinfo-*- @c -*-texinfo-*-
@c This is part of the GNU Guile Reference Manual. @c This is part of the GNU Guile Reference Manual.
@c Copyright (C) 1996, 1997, 2000-2004, 2006-2017 @c Copyright (C) 1996, 1997, 2000-2004, 2006-2017, 2019
@c Free Software Foundation, Inc. @c Free Software Foundation, Inc.
@c See the file guile.texi for copying conditions. @c See the file guile.texi for copying conditions.
@ -8632,7 +8632,7 @@ promise that records are disjoint with other Scheme types.
@deffn {Scheme Procedure} make-record-type type-name field-names [print] @ @deffn {Scheme Procedure} make-record-type type-name field-names [print] @
[#:parent=@code{#f}] [#:uid=@code{#f}] @ [#:parent=@code{#f}] [#:uid=@code{#f}] @
[#:extensible?=@code{#f}] [#:opaque?] @ [#:extensible?=@code{#f}] [#:opaque?=@code{#f}] @
Create and return a new @dfn{record-type descriptor}. Create and return a new @dfn{record-type descriptor}.
@var{type-name} is a string naming the type. Currently it's only used @var{type-name} is a string naming the type. Currently it's only used