Release 0.9.11
Important interface changes
- There are several changes in the binary interface. ABI version is bumped to 0.98. Extension modules that require compilation needs to be recompiled.
- with-exception-handler used to be SRFI-18 semantics, now it is R7RS/SRFI-34 semantics. The difference is the dynamic environment where the handler
is called; in SRFI-18 semantics, it is called in the same dynamic environment where
raise is invoked, including the handler settings; that is, if you call
raise
inside the handler, it invokes the same handler again,
unless you explicitly change the dynamic environment.
In R7RS, the dynamic environment where the handler is invoked is modified so that the ``outer'' exception handler is active; invoking raise
invokes the outer
handler.
SRFI-18 semantics is more primitive and R7RS semantics can be implemented
on top of it. However, R7RS semantics is almost always wanted,
and the user is prone to write the explicit dynamic environment handling and cause
infinite recursion into the handler.
The existing code that swaps handlers within exception handlers keep working.
The code that assumes raise
within an exception handler reenters the
same handler breaks, but we hope there's little code that needs the feature.
- If you're writing extensions and using
<real>
in the type notation
of define-cproc
to receive C double
argument, change them to
<double>
. We're consolidating stub-types and Gauche types, but
currently <real>
as a stub-type and <real>
as a Gauche type
have different meanings.
- For those who have written Gauche extensions in C:
gauche/bignum.h
becomes a private header and no longer accessible
from extentions. The ScmBignum
internals are never meant to be
accessed directly. You can use generic numeric interface in
gauche/number.h
.
- rfc.tls: If you're using this module directly,
note that the old interface of tls-connect
and tls-accept no longer
work with the new MbedTLS 3.0, because of their API change. You can
create a client TLS connection with the new
tls-connect
API.
- Stub generator (
genstub
) is undergoing major change. Although
it has never been documented, if you're using define-type
directive
in your stub file, now it is called declare-stub-type
. The old directive
still works for a while.
New Features
Concurrency
New srfis
Enhancement of types
Now we can have types that can describe certain nature of the values,
separate from the class the value is instantiated from. Such types
include a union type (e.g. "integer or symbol"), an optional type,
or a procedure type that describes argument types and return types.
At this moment, this information isn't much useful. You can use
such types in assume-type or of-type?
but that's all. Eventually we'll enhance use of type information.
See Types and classes, for the details.
Better test reporting
- gauche.test: Test reporting can now be customized.
One of its applications is to show the unified diff of multiline texts
between expected and actual results
(see the blog entry).
Miscellaneous features
Improvements
- Line-editing is enabled by default on REPL, if the terminal is capable.
If you encounter an issue of line-editing, you can turn it off with
,edit off"" from REPL, giving
-fno-read-edit"" to the command-line
argument, or set the GAUCHE_NO_READ_EDIT
environment variable.
- rfc.uuid: Make the random source a parameter
(uuid-random-source). Note that uuid-random-source-set! is deprecated, for it has global effect.
- parser.peg: New parser constructors
$raise, $cut, $list,
$list*.
- data.priority-map: Added
priority-map-min-all, priority-map-max-all.
- data.queue: Now you can 'close' an mtqueue
when you add an element to the queue. Once a queue is closed, no new eleemt
can be added. See enqueue/wait! and
the blog entry].
- gauche.unicode: Grapheme/Word break support is updated
to Unicode 13.
- Windows console handling is improved https://github.com/shirok/Gauche/pull/756
- data.heap: The argument order of binary-heap-find
is changed to align to other *-find procedures. The old interface still works,
but the new code must use the new interface.
- tree-map->generator/key-range: Added.
- srfi-42: Supports range objects with
:range
qualifier.
- describe: Some more objects got specialized description;
try describing time object (after srfi-19 is loaded), a flonum, and a rational.
- gauche.test: New utility procedures for tests:
test-remove-files, test-with-temporary-directory.
Bug Fixes
Last modified : 2021/12/24 03:39:49 UTC