Log message:
lang/gauche: Update to 0.9.15
* Enable TLS support by MbedTLS.
Changelog:
0.9.15:
Security fix
Only Windows version is affected.
If you ran .bat or .cmd via sys-exec (or other higher-level APIs such as
run-process), certain crafted command-line argument could invoke external
commands: https://kb.cert.org/vuls/id/123335
In Gauche, the effect is limited because the user need to give .bat or .cmd
extensions explicitly to run those files, so the user code can check unsafe
arguments as well. Nevertheless, it is better not to have holes.
Now, if you're trying to run a .bat or .cmd file and the argument contains one
of "unsafe" characters, an error is thrown. (Issue:1017)
Other important fixes
build-standalone was broken
You couldn't build a standalone binary with 0.9.14, for it introduced an
unintended dependency on private header files (which is only available when you
have a source tree). It is addressed. Issue:1013.
TLS handshake error in newer MbedTLS
When you tried to use TLS server socket with newer MbedTLS, clients failed to
connect with TLS handshake error. It is fixed.
Besides, if you configure with --with-tls=mbedtls-internal, it now uses MbedTLS
3.5.2. Issue:1018,Issue:1021.
O(n) in size-of method
The size-of method returns a size of a collection. Since the minimal
requirement of collection protocol is an iterator, the default method of
size-of iterates over all elements to count them. It happened that built-in
hashtables and treemaps didn't specialize size-of, it caused O(n) instead of O
(1). Now those methods are specialized, and documentation warns this fallback
behavior. Issue:987.
Compatibility warnings
Legacy argument keywords for define-cproc
At the beginning, C interface (define-cproc) used CL-style lambda keywords such
as &optional. We switched to keywords :optional loooong time ago, but we've
supported the old style. We plan to drop it. If you see this warning, please
update the source.
'#<undef> is used in boolean context'
This warning is off by default, but we recommend you to turn it on by setting
the environment variable GAUCHE_CHECK_UNDEFINED_TEST. This warning is issued
when #<undef> appears as the result of a test expression of conditional branch.
This feature has been in for a while, but we plan to turn the warning on by
default in the next release or so, thus we bring this up again.
See Nasty undefined, for the details.
New modules & procedures
* srfi.215: Central log exchange
* srfi.238: Codesets
* srfi.247: Syntactic monads
* gauche-package
+ New populate subcommand can be used in the existing module directory to
copy missing files for packaging.
+ The compile command now processes *.scm files with precomp. This
eliminates the need of *.stub files from C interface.
+ The compile command also accepts --srcdir option to allow out-of-tree
build. Examples are rewritten accordingly. Issues:990?.
* Assoc-list related procedures: Added alist-merge, and introduced a new
consistent naming (alist-ref, alist-key, alist-adjoin, and alist-update-in)
in place of assoc-* procedures. Issue:985.
* When an error occurs during processis -l and -e command-line options, now
gosh shows more information about error, rather than a single-line summary.
* New constant procedure to get boundaries of floating point number
representation: greatest-positive-flonum, least-positive-flonum,
least-positive-normalized-flonum.
* CiSE now handles new and delete operators. This is for C++, but currently
we don't distinguish C/C++ as targets, so the code targetting C is also
affected.
* gauche.collection: Add group-collection->alist.
* data.random: New procedues finite-flonums$, reals-power-law$.
* rfc.822: Add rfc822-header-ref*, rfc822-header-put.
* rfc.url: Add url-decompose-query and url-compose-query, common query string
parsing & construction.
* gauche.cgen.cise: Support asm CiSE directive.
* make install uses install-info if it's available, which updates system's
dir file if necessary. Issue:988.
* file.util: build-path accepts #f as a path component; it is interpreted as
..
* unbox: Now it has an associate setter.
Other bug fixes
* text.multicolumn: Fix the edge case when the string list is empty.
* string-ref: Fix a bug that can return #<unbound> when applied to an
incomplete string.
* data.range: Fix a bug in binary search. Pr:1004.
* data.random: Fix overflow and precision loss of reals-between$. Issue:1000.
* sxml.tools: Fix character escaping and namespace handling of sxml:sxml->xml
and sxml:sxml->html are improved. See the discussion in this Gauche-makiki
issue
* GC hasn't been using parallel markers until there's a new user thread
explicitly created, due to the update in Boehm GC. This has been addressed.
* srfi.235: Fix a bug in disjoin.
* Fix ExtendedPairDescriptor alignment error that depending on a compiler.
* Fix gauche/priv/arith.h that could trigger an undefined behavior.
* + and * didn't typecheck the argument if it was called as unary operator.
Issue:1012.
* Branch cuts of atan didn't follow R7RS spec.
0.9.14:
TLS support enhancements
* Now you can write a TLS server. See tls-bind, tls-accept,
tls-load-certificate and tls-load-private-key. (tls-load-object was
obsoleted). Gauche-makiki supports https.
* tls-poll is added.
* Fixed a bug that truncated large messages.
As previously announced, we no longer support AxTLS. You need MbedTLS to use
TLS. If MbedTLS library is installed in your system, Gauche automatically finds
it. Alternatively, you can configure Gauche so that it downloads MbedTLS during
build and compiled into libgauche.
format enhancements
* Conditional directive ~[...~;....~] is supported. (format).
* If a format string is a literal string, it is only parsed and 'compiled'
once when it is first called. See Caching formatter procedure.
Native encoding is always UTF-8
As previously announced, we dropped eucjp, sjis and none internal encoding. You
can still use eucjp, sjis or latin-1 in code and data. It's just converted to
utf-8 internally. See Utf8Only for the details.
Other additions and improvements
* srfi.194 (Random data generators): Added.
* data.random: Added complexes-rectangular$, complexes-polar$.
* gauche.charconv: Now supports utf8bom encoding for input, which drops the
optional BOM at the beginning of utf8 stream. See the discussion in
Issue:966.
* gauche.threads: A macro run-once: guarantee to evaluate expression once,
even in multithreaded environment.
* Module query procedures: module-exports?, module-binds?, module-binding-ref
. The latter two supersedes global-variable-bound? and global-variable-ref
(Issue:963).
* gauche-package - new info command to show info of installed packages.
* text.multicolumn: display-multicolumn accepts :indent keyword argument.
* data.priority-map: Added dict->priority-map, alist->priority-map. The key
comparator of priority map now doesn't need to have a hash procedure.
* file.util:
+ remove-directory* now accepts :if-does-not-exist keyword argument.
+ build-path now accepts symbols cwd and cld as the base-path argument.
The latter stands for "current load directory".
* control.pmap: Ensure fully-concurrent mapper terminates threads when
timeout reached. Issue:964.
* absolute-time: Added. Handy to canonicalize timeout argument.
* On Windows, we use fast lock when possible (contributed by @Hamayama,
Issue:955).
Bug fixes
* Fix log, real-ln losing precision when a large bignum is given (Issue:980).
* data.random: reals-between$ didn't work properly.
* regexp-replace: Avoid rebinging current-output-port (Issue:967).
* Prevent loading all available srfis when you load SLIB (Issue:960).
* srfi.74: Fix blob-*-set! procedures.
0.9.13:
Partial support of SRFI-226 (Control Features)
"Control Features" SRFI (srfi:226) clarifies interactions between threads,
dynamic environment, and (partial) continuations. It is a large srfi and we
haven't completely supported it yet, though some of it is already available in
this release.
Although the srfi is a compatible extension to R7RS, some of it is incompatible
with the way Gauche has extended R7RS. Notably, parameters behave differently.
We're switching to SRFI-226 semantics, though in this release the built-in API
behaves in the compatibility mode. The manual section Parameters and dynamic
states explains the changes in detail, though here's a short summary:
* Legacy parameters had two roles: dynamic binding and thread local storage.
These roles are splitted; parameters are for dynamic binding, and thread
local storage is realized by thread local object. See Thread local storage.
* Legacy parameterize allows not only parameters but also \
"parameter-like"
objects, a procedure that follows a parameter protocol, to be \
"bound". We
deprecate such usage; parameterize will be for parameters, and a new macro,
temporarily, can handle parameter-like objects.
* Built-in make-parameter and parameterize works mostly compatible with the
legacy code, while they adopt SRFI-226 semantics as much as possible. To
get fully backward-compatible behavior, use gauche.parameter. To get full
compatibility to SRFI-226, use srfi.226.
SRFI module naming convention
We named srfi module as srfi-N; which was the tradition before R6RS. Modern
Scheme uses a list to name libraries, and srfis are named like (srfi N) in
R7RS, which translates to srfi.N in Gauche's way. So there are following
variations:
* (use srfi-N) (Traditional Gauche code)
* (use srfi.N) (Alternative in Gauche code)
* (import (srfi N)) (R7RS code)
We've been using srfi-N throught documentation by 0.9.12. From 0.9.13, we make
srfi.N official for Gauche code. srfi-N still works and will keep working.
(Internally, we used to have code in srfi-N.scm and srfi/N.scm merely referred
to it. They are switched in this release.)
We also recommend to use (library srfi.N) (Gauche specific) or (library (srfi
N)) (portable R7RS) in the cond-expand feature test clause, instead of srfi-N
feature identifier.
;; Legacy way
(cond-expand
(srfi-114
;; code assuming SRFI-114
)
(else ...))
;; Recommended
(cond-expand
((library srfi.114)
(use srfi.114)
;; code assuming SRFI-114
)
(else ...))
;; Recommended (R7RS portabile)
(cond-expand
((library (srfi 114))
(import (srfi 114))
;; code assuming SRFI-114
)
(else ...))
The legacy way was the only way until library clause was introduced in R7RS.
Now using library is the preferred way. The legacy way conflates feature test
and library import, which can have a pitfall. For example, SRFI-101 redefines
lots of Scheme primitive operators. Using the legacy way to test srfi-101
availability triggers loading srfi.101 into the current module, which shadows
those primitive operators. Most of the time that's not what you want. Using the
new way, you can import srfi.101 identifiers with prefix or renaming so that
they won't conflict with R7RS primitives.
If you set the enviornment variable GAUCHE_WARN_SRFI_FEATURE_ID, Gauche warns
if it sees srfi-N feature identifiers. We'll make it default in future
versions.
Improvements on interactive development
* Symbol completion now works with segmented-match, e.g. type w-i-f lists
symbols starting with with-input-from-. (Segmented completion).
* Describing a generic function now lists methods with their source location,
if they're known.
* Undefined variable error now shows possible modules you've missed to use. (
Hints for unbound variable error).
* Stack trace now prints history of macro expansion, along its source info,
if known. See Source info propagation with macro expansion.
* Showing matching parenthesis is easier to see.
Utility script naming convention
Gauche comes with several Scheme scripts, such as precomp for ahead-of-time
compilation. They used to be installed in the toplevel library directory so
that they can be invoked as gosh precomp etc. However, as the number of such
scripts grow, the library directory will get cluttered. So we now install those
scripts in tools directory, e.g. you can invoke it as gosh tools/precomp. For
easier transition, the original path still works but a warning is printed.
We'll drop this compatibily feature in future, so rewrite your Makefiles
whenever you see the warning.
Real-domain elementary functions
Added whole bunch of real-* functions (e.g. real-exp) that work only for real
numbers. They are faster than the generic (complex) version and preferable in a
speed-sensitive code. See Real numerical functions.
We had undocumented real-domain functions such as %exp. They were intended to
be internal building blocks and not to be used directly. However, they were
visible from gauche module so some existing code may be using them. A
compatibility module compat.real-elementary-functions is available for
transition.
format enhancement
A bunch of new directives are new recognized by format.
* ~:w (pretty print)
* ~& (fresh line)
* ~ + newline (line continuation)
* ~@r (Roman numerals) - We support up to 499999, for Unicode has Roman
numeral for 100000.
* ~p (plural)
Digest framework update
The old API uses incomplete strings as octed sequences, which is gradually
superseded by u8vectors (bytevectors) now. We revised their interface so that
they use u8vector for octet streams, and allows to obtain the decoded result as
either a string or a u8vector.
The old API still works, but deprecated.
Affected modules are as follows: rfc.hmac, util.digest, rfc.base64,
rfc.quoted-printable.
Here's the new naming convention.
* Procedures that can generate octet sequence is named with *-to and takes
the class of desired return type: hmac-to, hmac-message-to, digest-to,
digest-message-to, base64-decode-string-to,
quoted-printable-decode-string-to.
* Procedure that can take both strings and u8vectors as input has \
"message"
in its name: hmac-message-to, digest-message-to, base64-encode-message,
quoted-printable-encode-message
Also, rfc.base64 is updated to support RFC4648; it has an option to omit
padding, and also base32 and base16 encodings are supported.
New SRFIs, modules and procedures
New SRFIs
* srfi.162: Comparator sublibrary
* srfi.172: Two safer subsets of R7RS
* srfi.207: String-notated bytevectors
* srfi.209: Enums and enum sets
* srfi.210: Procedures and syntax for multiple values
* srfi.216: SICP prerequisites
* srfi.222: Compound objects
* srfi.228: Composing comparators
* srfi.235: Combinators
* srfi.236: independently
* srfi.239: Destructuring lists
New modules
* text.multicolumn: Format list of words as multi-column text (imagine output
of ls).
* text.segmented-match: Segmented string matching, e.g. match c-w-c-c with
call-with-current-continuation.
* control.plumbing: A utility to create a network of ports. See Pipeworks.
* math.simplex: Simplex solver
* compat.real-elementary-functions: Compatibility module for %exp etc. See
"Real-domain elementary functions" above.
* text.info: Read and parse info documents. This module has been in Gauche
for long time, but hasn't been documented.
New procedures/macros
* New bitvector procedures:
+ Built-in: bitvector-any-value?, bitvector-every-value?
+ In gauche.bitvector: bitvector-value-map-index->list,
bitvector-value-for-each-index, bitvector->int-generator, bitvector->
bool-generator
+ In data.range: bitvector/bool-range, bitvector/int-range
* gauche.test: test-include-r7: A macro to make it easier to include r7rs
test script in Gauche tests.
* compat.chibi-test: Support test-equal.
* rotate!: CL's rotatef.
* sys-strsignal: Added.
* negative-zero?: Added.
* data.ring-buffer: Add ring-buffer-room.
* gauche.unicode: Add string-east-asian-width, string-take-width,
string-drop-width.
* logset+clear: An easy way to set and clear bits in integer.
* gauche.sequence: Added inverse-permuter, unpermute.
* typecase, etypecase: CL's macros to branch with the type of given
expression.
* default-file-encoding: A parameter to be used for file encoding when
:encoding argument isn't given to the file port open procedures.
Miscellaneous additions
* Using bdwgc 8.2.4 now.
* A pair of input and output ports now can be "linked". If you try \
to read
from an input port, the buffer of linked output port is flushed first. This
is how Unix's stdin and stdout behave, so it's been a source of confusion
about the necessity of extra (flush) after displaying prompt before reading
user's input. Now, that flush is automatically done. See port-link!,
port-unlink!.
* Source code info is now attached to precompiled code and appears in stack
trace. This makes generated C code larger. If you have a large Scheme
source and the generated C code gets too big, you can give
--omit-debug-source-info to precomp not to add it.
* math.mt-random: The random generator API is now thread-safe by default.
* Conditional debug printing. The debug print syntax #?=expr always print
expr and its value, but sometimes it is too much and you want to
selectively print it when a condition is met. A new syntax #??=test expr
prints expr only when test is satisfied. There's also #??, that corresponds
to #?,. See debug-print-conditionally.
* rfc.tls: Better error message from MbedTLS. Internal MbedTLS now uses
3.2.1.
* Source code info is attached to string interpolations and quasirename
constructed lists.
* gauche.time: Benchmarking procedures accept :metric keyword arguments that
specifies which metric the results should be compared. See time-these/
report.
* pprint:
+ Support base indentation; you can pretty-print starting from a
specified indentation, where the rest of the lines also starts with it.
See Pretty print indentation.
+ It can also limit display length of string literals, through
:string-length write control parameter.
* load: Now returns the actual filename loaded in case the loading is
successful. Useful to find out which file is actually loaded, when you let
load search a file in *load-path*. (Note: In previous versions, load
returned #t on success).
* time-comparator: Added. A comparator to compare <time> objects.
* math.const: You can now use greek ?? as the constant, so as ??/2 etc.
* define-class: New slot definition option :immutable. See :immutable slot
option.
* gosh: Extended -v option. If you specify -v:0.9.12, for example, it tries
to run 0.9.12 but falls back to the current version if the specified
version isn't available (with warning). Without colon, e.g. -v0.9.12, gosh
exits with an error in such case.
* rfc.cookie: Catch up to newer RFC (RFC6265). Issue:911
* rfc.json: Add <json-mixin> class to allow easy serialization of Gauche
objects to JSON.
* gauche.process: do-process can take :on-abnormal-exit :exit-code option so
that the caller can get abnormal exit code of the subprocess.
Deprecating some configure options
* We're planning to drop character encoding selection (--enable-multibyte)
for some time, using utf8 as our only internal representation. You've seen
warning if you select internal encoding other than utf8. We urge you to
switch to utf8.
* We're also planning to make thread support mandatory. The --enable-threads
option will be removed, and appropriate thread subsystem for the platform
will be automatically selected. The number of libraries assuming thread
support is growing, and considering the case when threads are unavaiable is
becoming a burden.
* Finally, we're planing to drop AxTLS support. The library hasn't been
updated for a while and it can't connect to some TLS site.
Bug fixes
* scheme.regex: Export missing regex?.
* Fix redefining a class with redefined metaclass (Issue:845)
* There were some SRFI-35 (exceptions) identifiers that weren't exported from
"""srfi.35"" module.
* Fix a bug in the port that (read-bytevector 0) returned EOF rather than 0.
* When we introduced immutable pairs in 0.9.10, we accidentally dropped
source code info from literal lists. (Issue:847).
* Fix SEGV on unwind-protect test when continuation frame layout is changed (
Issue:852).
* When using Scm_SimpleMain(), align exit status with script execution.
Issue:861.
* current-output-port etc. are now proper parameters. They were a
"parameter-like" objects (or "dynamic state" in our \
term), but such objects
no longer work with srfi-226 parameterize.
* Internal definition of same identifier more than once becomes an error.
Issue:872.
* ULID uses its own internal PRNG randomized per process. Issue:873.
* With REPL, some primordial thread may hold the lock of stdout, blocking
other threads from writing to it. Issue:876
* There was a case that port finalizers can access already collected object.
Issue:900.
0.9.12:
New features
Notable changes
* Basic symbol completion is now available in REPL (type TAB during typing a
symbol).
* SRFI-169 (underscores in numbers) is supported. You can write numbers like
1_234_567.89 for readability.
+ Gauche has allowed underscores in prefixed numbers, e.g. #x1234_abcd.
Now it is allowed without prefix. However, the rule is more strict;
each underscore must be surrounded by digits, it is not simply ignored.
The literal #x1234___5678, #x_abcd, or #xabcd_ were allowed previously,
but no longer.
+ Gauche adopts Lisp's tradition that "if a token can be parsed as a
number, it's a number; otherwise its a symbol". The token 1_2_3 was
parsed as a symbol before; now it's a number 123. Technically this
breaks the compatibility, though we expect it has little effect. You
can always use escapes (|1_2_3|) if you want to use weird symbols.
* AxTLS is no longer compiled by default; you need to specify ---with-tls=
axtls at configure time if you want ot include it. We recommend to use
MbedTLS. We plan to drop AxTLS support eventually, unless the new release
comes from the upstream.
New SRFIs, modules and procedures
* srfi-227: Optional arguments
* srfi-232: Flexible curried procedures
* data.ulid: ULID support
* util.temporal-relation: Temporal relations
* push-unique!: Added. Similar to CL's pushnew.
* text.gap-buffer: Added gap-buffer-pos-at-end?, gap-buffer-contains,
gap-buffer-looking-at?.
* New procedure opt-substring, like substring but if the specified range is
the entire input string it returns the input without copying.
* New procedure char-word-constituent?.
* New procedure num-pairs, an extended length that can be used for dotted and
circular lists.
Miscellaneous
* GC is now bdwgc 8.0.6.
* Improvement of compilation of case-lambda: If the binding is inlinable, its
call can be pre-dispatched and inlined.
* glob-fold: Accepts :prefix keyword arg.
* library-fold: Now it is rewritten on top of Gauche's glob, so the extended
glob pattern such as {} and ** can be used.
* format: The 'truncation' directive (e.g. ~,,,,50:S) emits closing double
quote if a string literal is truncated; it keeps font coloring in Emacs
Scheme buffer sane, even when an object is truncated in the error message.
* sys-setlocale: Allow #f for locale argument (corresponds to passing NULL in
C).
* srfi-19: Now <date>s are comparable, for object-compare method is defined.
* make-u8vector etc.: Uvector constructors are now in the core; you don't
need to use gauche.uvector for them.
* last, last-pair: Detect circular lists.
Bug fixes
* sys-sigwait: Fixed a bug that caused an error in OSX Monterey. https://
github.com/shirok/Gauche/issues/819
* =: Make sure the transitivity is kept in exact vs inexact comparison.
https://github.com/shirok/Gauche/issues/805
* sys-strftime: Fixed behavior on MinGW when multibyte character is used.
https://github.com/shirok/Gauche/pull/809
* wait-all: Fix race condition. https://github.com/shirok/Gauche/issues/812
* rfc.tls: Fix fd leak in axTLS. https://github.com/shirok/Gauche/issues/817
* Define *argv* as () and *program-name* as an empty string when gosh is run
interactively. They were undefined before, but it's convenient that they're
always defined.
* gauche.uvector: @vector-segment: Avoid infinite loop when zero is given to
the argument. https://github.com/shirok/Gauche/issues/828
* srfi-152: string-segment: Ditto. https://github.com/shirok/Gauche/pull/830
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
* control.future: Future, a simple construct for concurrent computation.
* control.cseq: A lazy sequence, but the producer and consumer can run
concurrently.
* control.scheduler: An object to run procedures in a specified delay/
interval. On top of this, srfi-120 is built.
* control.pmap: Parallel mapping.
* gauche.threads:
+ New syncronization primitives: <semaphore>, <latch>, \
<barrier>.
+ thread-terminate!: Make the default behavior non-forcible, that is, it
won't use the forcible operation such as pthread_cancel unless you
explicitly ask to do so.
+ thread-try-start!: A thread can be terminated before it is started.
This procedure can take such a case into account.
New srfis
* srfi-120: Timer APIs
* srfi-196: Range objects
* srfi-197: Pipeline operators
* srfi-217: Integer sets
* srfi-219: Define higher-order lambda
* srfi-221: Generator/accumulator sub-library
* srfi-229: Procedure tags
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
* Extended pairs are officially supported. They are pairs but you can attach
properties. It has been used internally to keep source location information
when an S-expr is read. See Extended pairs and pair attributes, for the
details.
* Some new procedures in gauche.lazy: lseq->list to realize all elements in
the lseq, port->char-lseq/position to convert port to character lseq with
position information carried in pair attributes.
* gauche.mop.instance-pool: This module has also been around for long time,
but now it is documented and official.
* sys-mmap, make-view-uvector: mmap(2) interface.
* degrees->radians, radians->degrees: Two frequently written procedures.
* data.range: A superset of srfi-196, Range objects.
* util.lcs: Added lcs-edit-list/context, lcs-edit-list/unified.
* text.diff: Added diff-report/context for context diff, and diff-report/
unified for unified diff.
* gauche.vm.debugger: Added per-thread logging. Using #?@= instead of #?=
records the log into per-thread files, so that they won't be mixed up.
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
* Fix negative zero handling. Notably, (eqv? -0.0 0.0) is now #f, which
conforms R7RS. See the blog entry for the details.
* Eq-hash computation caused crash on MinGW https://github.com/shirok/Gauche/
pull/748
* sys-ctermid could access local memory out of its extent. https://github.com
/shirok/Gauche/issues/740
* srfi-189: either-guard is updated to the finalized srfi.
* Windows home directory handling is fixed https://github.com/shirok/Gauche/
pull/757
* UTF-16 surrogate handling is fixed https://github.com/shirok/Gauche/pull/
758
* srfi-19: Fix ~V (week number) to behave as specified in ISO 8601. https://
github.com/shirok/Gauche/issues/763
* rfc.sha: Fixed strict aliasing violation in the original C code computing
SHA1.
* Fix circular reference bug via boxes. https://github.com/shirok/Gauche/
issues/787
|
Log message:
lang/gauche: update to Gauche-0.9.10
Announcements:
== Release 0.9.10
Major feature enhancements
New Features
R7RS Large and SRFI support
We cover R7RS-large Red and Tangerine Edition.
* scheme.ilist: Immutable list library
* scheme.rlist: Random access lists
* scheme.bytevector: R6RS-compatible bytevectors
* scheme.text: Immutable texts
* scheme.show: Combinator formatting
* scheme.regex: Scheme Regular Expressions: Grapheme support is
completed by @pclouds.
* srfi-78: Lightweight testing (now integrated with gauche.test).
* srfi-101: Purely functional random-access pairs and lists
(scheme.rlist)
* srfi-116: Immutable list library (scheme.ilist)
* srfi-130: Cursor-based string library
* srfi-135: Immutable texts (scheme.text)
* srfi-159: Combinator formatting (scheme.show)
* srfi-170: POSIX API
* srfi-174: POSIX timespecs
* srfi-175: ASCII character library
* srfi-176: Version flag. Supported as built-in. (version-alist)
* srfi-178: Bitvector library
* srfi-180: JSON
* srfi-181: Custom ports
* srfi-185: Linear adjustable-length strings
* srfi-189: Maybe and either: optional container types
* srfi-192: Port positioning
* srfi-193: Command line
* srfi-195: Multiple-value boxes (Boxes).
New modules
* parser.peg: PEG parser combinator library. This module has been
unofficially included for long time, but it finally became
official. If you've been using it, check out the document, for
API has been changed. Compatibility module is provided.
* data.skew-list: Skew binary functional random-access list
* data.priority-map: Priority map.
* rfc.uuid: UUID generation and parsing.
* text.external-editor: Running external editor.
* text.pager: Display with pager.
Improvements
String indexing improvements
In Gauche, string access using integer character index costs O(n)
by default, because we store strings in multibyte format. Two
improvements are incorporated to allow O(1) random string access.
* String cursors (srfi-130). It is an object directly points
to a specific character within a string, thus allowing O(1)
access. It is supported natively, so all built-in string
procedures that takes character index also accept string
cursors. See String%20cursors, for the details. This is the
work mostly done by @pclouds.
* String indexing (scheme.text). You can precompute a string
index, which is an auxiliary data attached to a string that
allows O(1) integer character index access. You need O(n) to
compute a string index, but once computed, character index
access in that string becomes O(1). In R7RS-large, scheme.text
library provides this feature (with a distinct type text). In
Gauche, a text is simply a string with a string index computed.
See String indexing for the details.
Note: Gauche internally had string pointers to implement some string
operations efficiently. Now string cursors can be used for that
purpose, we dropped string pointers. If you have code that uses
string pointers, although it was undocumented, you can keep using
it by defining GAUCHE_STRING_POINTER environment variable. We'll
completely drop it in the next release, though.
Immutable pairs
Scheme defines literal pairs to be immutable, but it is up to the
implementation to check it. Gauche used to not check it, allowing
mutating literal pairs. Now it is no longer allowed--it throws an
error. Mutating literal pairs is never correct, and if you get the
error, you've been doing it wrong.
Immutable pairs can also be explicitly constructed using scheme.ilist
module. In Gauche, immutable pairs and lists behaves exactly like
normal pairs and lists, except that they can't be modified. See
Mutable and immutable pairs, for the details.
If your code depends on the previous behavior and can't change
swiftly, set the environment variable GAUCHE_MUTABLE_LITERALS to
restore the old behavior.
Input line editing
The editor feature is enhanced a lot, including online help. Type
M-h h to get a quick cheet sheet.
The line editor isn't turn on by default yet, but you can either
turn on with the command-line option -fread-edit or the environment
variable GAUCHE_READ_EDIT.
Parameters are now built-in
You no longer need to (use gauche.parameter) to use parameters as
defined in R7RS. The module still exists and provides a few obscure
features.
Bitvector literal and incomplete string literals
We now supports bitvector type in the core. Note that there's a
syntax conflict with bitvector literals and incomplete strings;
now the official way of incomplete string literal is to prefix a
string with #**. The older syntax is still recognized as far as
it's not ambiguous. See Incomplete%20strings.
The C-level Port API is overhauled
This only affects for C code using ScmPort. To support future
extensions flexibly, we hide the internal implementation of ScmPort.
It shouldn't affect code that accesses ScmPort via API, but if the
code directly refers to the members of ScmPort, it should be
rewritten to use API.
One notable change is that port positions no longer need to be an
integer offset.
TLS support improvement
* With default configuration, Gauche searches several known
locations of ca-certificates, so it can work mostly out of
the box. See rfc.tls for the details.
* With default configuration, <mbed-tls> is used if it's available.
<ax-tls> is always available but its cipher support is limited
and can't connect to some https sites.
* You can also configure to embed MbedTLS support into Gauche so
that it will run on a system that doesn't have MbedTLS installed.
(See INSTALL.adoc for the details.) Note that if you embed
MbedTLS, the resulting binary is covered by MbedTLS Apache
License 2.0 as well. Windows Installer version has MbedTLS
embedded.
Encoding conversion improvement
Now we support conversion natively, between UTF (8, 16, 32) and
ISO8859-n, as well as between Japanese encodings. We use iconv(3)
only when we need to deal with other encodings.
This is because iconv lacks a necessary API to support srfi-181
transcoded ports properly. If you just need to convert encodings,
you can keep using gauche.charconv and it handles wide variety of
encodings supported by iconv. If you use srfi-181, the conversion
is limited between the natively supported encodings.
We may enhance native support of conversions if there's need for it.
Miscellaneous improvements
* gauche.generator: Add giterate, giterate1.
* gauche.lazy: Add literate.
* format: Make ~f handle complex numbers as well, and added a bunch
of new directives: ~t, , ~~, ~|, and ~$.
* define-hybrid-syntax: The compiler macro feature.
* current-trace-port: A parameter to keep trace output. Output of
debug-print goes to this port, for example. The default is stderr.
* gauche.record: Allow record types to inherit from non-record
class, as long as the superclass doesn't add slots. Also allow
to specify metaclasses.
* gauche.unicode: Conversion procedures utf8->ucs4 etc. now takes
replace strictness that replaces invalid unicode sequence with
U+FFFD. utf8->string is also changed to use the replace character
for invalid input sequence, instead of throwing an error.
* gauche.unicode: string->utf16: Add add-bom? argument.
* gauche.unicode: Add string->utf32, utf32->string.
* identifier?: Now it responds #t to both symbols and wrapped
identifiers. In ER-macro systems, identifiers can be a bare
symbol as well. To check an object is an identifier but not a
symbol, you can use wrapped-identifier? to check an object is
a non-symbol identifier.
* When gosh is run inside a build tree (with -frest option), make
sure we link with libgauche.so in the build tree regardless of
the setting of LD_LIBRARY_PATH. (PR#557)
* apropos now takes a string as well as a symbol (PR#555)
* Character set is now hashable with the default-hash.
* Add .dir-locals.el file in the source tree. It sets up Emacs to
add some Gauche-specific indentations.
* If gosh is run in suid/sgid process, do not load .gaucherc file
and do not load/save history files.
* complete-sexp? is moved to the core (used to be in gauche.listener.
* string->number: Added default-exactness optional argument to
specify the exactness of the result when no exactness prefix is
given in the input.
* gauche-package generate can now generate template of Scheme-only
package.
* srfi-42: Added :collection qualifier to use a collection as a
generator.
* gauche.fcntl: Added sys-open, sys-statvfs, sys-fstatvfs.
* sys-utime: Allow <time> object for timestamp.
* sys-nice: Added nice() interface.
* make-hash-table: If a comparator whose equalily predicate is
eq?/eqv?, we use eq-hash/eqv-hash regardless of comparator's hash
function. It is permitted by srfi-125, and it allows objects that
doesn't have hash method can still be used with eq/eqv based
hashtables (#708).
* gauche.vport: Add bidirectional virtual port. Add
open-output-accumulator.
* gauche.process: Allow command pipeline in process port API (#717).
Also :error keyword argument accepts :merge, to tell run-process
that stderr should be merged into stdout.
* gauche.process: Added process-wait/poll, process-shutdown.
* gauche.threads: atomic-update!: Allow proc to return more values
than the atom holds. It is useful if one wants to update atom
state and compute something using before-update values.
* gosh: -e option can accept multiple S-expressions.
* gauche.dictionary: Add <stacked-map>.
Bug fixes
* Fix double-rounding bug when converting ratnum to flonum.
Originall reported in Ruby, it is a common issue that first
convert numerator and denominator to double and then divide.
(blog entry).
* math.mt-random: (Incompatible change) When the given seed is
bignum, we use all bits now to initialize the RNG. The previous
versions only used the lowest word, but that loses the entropy.
Technically this causes RNG to produce different sequence if the
seed is bignum. For typical usage, though, seed is within fixnum
or at most as wide as a machine word and we think it's rare that
the change becomes an issue.
* Some macro-defining-macro issues are fixed, including #532 .
* file.util: make-directory*: Fixed timing hazard.
* www.css: construct-css: Fix :not pseudo class rendering (PR#645),
added missing an+b syntax (PR#648).
* gauche.process: High-level utilities didn't handle :encoding
keyword argument (#651).
* load-from-port: Fixed a bug that didn't reset literal reader
context (#292).
* apply detects if the argument list is circular and throws an error.
* copy-list detects the circular list and throws an error.
* scheme.list: lset=: Argument order to invoke the equality
predicate was incorrect.
* math.prime: native-factorize: Reject other than positive exact
integers. Factorizing 1 returns ().
* assume: Fix to return the value of the expression.
* and-let*: Fix 20-year old bug - and-let* is allowed to take an
empty body.
* let-optionals*: There was a bug that inserts reference of
undefined hygienically, causing an error when used in R7RS code
that doesn't inherit gauche module.
* rfc.json: construct-json: Allow non-aggregate toplevel value. It
was prohibited in rfc4627, but allowed in rfc7159.
* pprint: Fix circular structure printing in case when the cycle
begins in the middle of a list (#713).
== Release 0.9.9
Bug fix and enhancements
* New features
- More R7RS-large and SRFI support
- Charset enhancements to Full Unicode range
- Macro tracer
- Checking use of undefined result in conditionals
* Improvements
* Bug fixes
* Potential incompatibilities
New features
More R7RS-large and SRFI support
* scheme.stream: Streams (formerly srfi-41).
* scheme.ephemeron: Ephemeron (formerly srfi-124).
* scheme.regex: Scheme Regular Expression (formerly srfi-125).
Contributed from @pclouds. Grapheme support is still missing.
* scheme.vector.u8 etc.: Homogeneous numeric vector libraries
(srfi-160).
* srfi-162: Comparators sublibrary.
* srfi-173: Hooks.
Charset enhancements to Full Unicode range
* Predefined char-sets (srfi-14) are enhanced to the entire Unicode
range, e.g. char-set:digit now includes all Unicode characters
with general category Nd. If you want to limit the range to ASCII,
there are corresponding char sets (e.g. char-set:ascii-digit)
provided.
* 'Umbrella' general category char-set: char-set:L includes
characters from general categories that begin with L, etc.
* In regexps and char-set literals, you can use \p{category} and
\P{category}, where category is Unicode general category, e.g. Lu.
* The \d, \w, \s in regexp and char-sets are still limited to ASCII
range, for changing them would likely to break existing code.
* POSIX notation [:alpha:] etc., also covers ASCII range only. To
cover full Unicode, you can use [:ALPHA:] etc.
Macro tracer
* trace-macro: You can now trace macro expansion.
Checking use of undefined result in conditionals
* Return value of procedures that return "undefined result"
shouldn't be used in portable code. However, Gauche usually
returns #<undef> from such procedures, and it counts to true as
a boolean test in conditionals. We found quite a few code that
branches based on the result of undefined return value. Such code
is fragile, for it may break with unintentional change of return
values of such procedures. Gauche can now warn such cases when
the environment variable GAUCHE_CHECK_UNDEFINED_TEST is set. See
the blog entry and Undefined values.
Improvements
* Partial continuation support is overhauled w.r.t interaction with
dynamic environment and full continuations. Contributed by
@Hamayama.
* gauche.uvector: Support uniform complex vectors (c32, c64 and c128).
* gauche.test: New compile-only option to test-script, so that it
can perform syntax check without executing the actual script
(useful if the script is written without using main).
* gauche.generator: Add negative step value support to grange.
* regexp-replace etc.: It used to be an error when regexp matches
zero-length string. Which wasn't wrong, but in practice it was
annoyance. Now if regexp matches zero-length string we advance
one character and repeat matching. This behavior is also adopted
by Perl and Ruby.
* gosh -h now emits help messages to stdout and exits with 0.
* Experimental line editor: backward-word and forward-word added by
@pclouds PR#524
Bug fixes
* Keyword argument handling wasn't hygienic.
* pprint: Prettyprint emits negative labels (#484)
* Extend the limit of environment frame size (#487)
* Scm_CharSetAdd could yield inconsistent result when you add an
ASCII character to a large charset. Patch by @pclouds PR#500
* import: Only/rename import qualifiers didn't work with transitiev
export (#472)
* Some system calls shouldn't be restarted when interrupted. #504
* format: ~vr didn't work. #509
* sort!, stable-sort!: We implemented them as if they were
linear-updating, that is, we didn't guarantee if the argument
still pointed to the head of the sequence after the call.
However, srfi-95 didn't explicitly mentions linear updating
semantics, so we guaranteed that caller can call them purely
for side-effects.
Potential incompatibilities
* Scm_RegExec now takes two more arguments specifying start and
end of the range of input string. I overlooked this change and
missed to add a proper transition macro. You can use #ifdef
SCM_REGEXP_MULTI_LINE to switch the new interface vs the old one.
* Toplevel define now inserts a dummy binding at compile-time
(as a result of #549). It is consistent with the specification,
but existing code that relied on undefined behavior might be
affected. See the blog entry.
* The (scheme base) library inadvertently exported Gauche's define
instead of R7RS define; Gauche's define recognizes extended lambda
arguments, while R7RS's not. This was a bug and fixed now, but
if your R7RS code happens to use Gauche's extended argument
notation, it'll break.
* macroexpand: Now it strips syntactic information from the return
values (with renaming macro-inserted identifiers, so that different
identifiers with the same name won't be confused). This generally
improves interactive use when you check how macros are expanded.
If you're using the output of macroexpand programatically, this
may break hygiene; you can pass an optional argument to preserve
syntactic information.
* parser.peg: This module is still unofficial, but in case you're
using it: $do is now obsoleted. Use $let and $let*. $parameterize
is added by @SaitoAtsushi.
== Release 0.9.8
Bug fixes and enhancements
* Major changes
- The syntax of quasirename is changed
- Keywords are symbols by default.
- Some support of R7RS-Large Tangerine Edition.
- Prettyprinting is now default on REPL.
* Bug fixes
* Other notable changes
Major changes
The syntax of quasirename is changed
The template was implicitly quasiquoted before, but it turned out
it interferes when quasiquote and quasirename were nested. Now the
template needs to be explicitly quasiquoted. The old syntax is also
supported for the backward compatibility. You can change the
supported compatibility level by an environment variable
GAUCHE_QUASIRENAME_MODE. See the manual entry of quasirename and
the blog post for more details.
Keywords are symbols by default.
There can be some corner cases that causes backward compatibility.
You can revert to the old behavior by setting an environment variable
GAUCHE_KEYWORD_DISJOINT. See the "Keyword" section of the manual
for how to adapt to the new way.
Some support of R7RS-Large Tangerine Edition.
We have scheme.mapping, scheme.mapping.hash, scheme.generator,
scheme.division, scheme.bitwise, scheme.fixnum, scheme.flonum. See
Gauche:R7RS-large for which libraries in R7RS-Large have been
supported.
Prettyprinting is now default on REPL.
If it bothers you, set an environment variable GAUCHE_REPL_NO_PPRINT.
Bug fixes
* The identifiers _ and ... are bound to syntax, to be friendly to
hygienic macros.
* floor/ and ceiling/ returned incorrect values when remainder is zero.
* During compilation, feature identifiers are considered according
to the target platform, so that cross compilation work (#407).
* A finite inexact number multiplied by an exact zero now yields an
exact zero consistently.
* Precompiled uniform vectors had lost infinities, NaNs and minus
zeros. Now they are handled properly.
* The record accessor accidentally leaked #<unbound> to the Scheme
world.
Other notable changes
* GC version is bumped to 8.0.4, thanks to @qykth-git.
* Unicode support is bumped to 12.1.0, thanks to @qykth-git (#471).
* Numerous enhancements on Windows/MinGW version, thanks to @Hamayama.
* Now gauche-package compile command has --keep-c-files and --no-line
options, for easier troubleshooting with generated C files (#427).
* gauche.cgen.cise: Enhanced support for C procedure declaration,
C struct and union type definition, and function type notation.
* Default hash function works on uniform vector (#440)
* The gauche.interactive module now doesn't load ~/.gaucherc---that
feature is splitted to gauche/interactive/ init.scm. Thus, when
you start gosh it still reads ~/.gaucherc, but if you use
gauche.interactive as an ordinary module, it doesn't load
.gaucherc (#448).
* gauche.array: New procedures array-negate-elements!,
array-reciprocate-elements!.
* disasm: Now it shows lifted closures as well.
* When the number of arguments passed to apply is fixed at the
compile time, the compiler now optimize apply away. For example,
(apply f 'a '(b c)) now becomes exactly the same as (f 'a 'b 'c).
If this optimization somehow causes a problem, pass
-fnodissolve-apply option to gosh.
* srfi-42: Uniform vectors are supported just like vectors.
* Now we have predefined char-set for each of Unicode general
category, e.g. char-set:Lu.
* New flonum procedures: approx=?, flonum-min-normalized,
fronum-min-denormalized.
* gauche.vport: Virtual port constructors accept :name argument.
== Release 0.9.7
Major C API/ABI overhaul
* Changes of C API/ABI
* New modules and procedures
* Bug fixes and improvements
* Incompatible changes in unofficial module
Changes of C API/ABI
This release includes several C API/ABI changes that breaks the
backward compatibilities, in order to have clean API towards 1.0.
Although we haven't officially defined C API/ABI, we kept the de
facto backward compatible as much as possible. Some turned out to
be design shortcomings. We don't want them to hinder future
developments, so we decided to change them now.
In most cases, all you need to do is to recompile the extensions.
We checked existing extensions being compilable with the new version
as much as possible. If you find an extension breaks, let us know.
See API Changes in 0.9.7 for the details. We bumped ABI version
from 0.9 to 0.97, so the extensions compiled up to 0.9.6 won't be
linked with the new version of Gauche. If necessary, you can install
0.9.6 and 0.9.7 Gauche in parallel, and switch them using -v VERSION
option.
If you're not sure what extensions you've installed, check the
directory ${prefix}/share/gauche-0.9/site/lib/.packages /. It
contains gpd (Gauche Package Description) files of the extensions
you've installed for 0.9.6 and before.
New modules and procedures
* srfi-154: First-class dynamic extents
* gauche.connection: An interface that handles connection-based
full-dupex communication channel. The <socket> (gauche.net)
class implements it, as well as a couple of other classes. It
allows to write a communication code (e.g. server request
handlers) without knowing the underlying connection implementation.
* text.edn: Parse and write Clojure's EDN representation.
* compat.chibi-test: A small adapter module to run tests written
for Chibi Scheme (some srfi reference implementations use it)
within gauche.test.
* text.html-lite: HTML5 elements are added. PR#363
* gauche.array: Export array-copy.
* gauche.configure: Add more feature tests: cf-check-lib,
cf-check-libs, cf-check-type, cf-check-types, cf-check-func,
cf-check-funcs, cf-check-decl, cf-check-decls, cf-check-member,
cf-check-members. Also added cf-init-gauche-extension and
cf-output-default, which takes care of common task of Gauche
extensions so that the configure script can now be very terse.
* gauche-package make-tarball is updated to read package.scm. Used
with gauche.configure, this eliminates the need of DIST script
for the extensions.
* file.util: Added call-with-temporary-file,
call-with-temporary-directory.
* assoc-adjoin, assoc-update-in: A couple of new assoc-list procedures.
Bug fixes and improvements
* rfc.tls: If CA bundle path is set, axTLS connection also
validates server certificates (mbedTLS rejects connection
when CA bundle path is not set). PR#362
* rfc.tls: On Windows, you can specify system as CA bundle
path to use the system certificate store. PR#395 , PR#398
* rfc.tls: If Gauche is configured with mbed-tls but without
axtls, the default tls class is set to <mbed-tls>.
* Bumped to bdwgc 7.6.8. PR#373
* Experimentally turned on generic function dispatcher
optimization for ref and object-apply by default. It could
boost the performance of these generic function calls up to
5x. We keep monitoring the effect of optimization and will
enhance it in future.
* Now glob sorts the result by default (consistent of glob(3).
To avoid sorting, or supply alternative sort procedure, use
:sorter argument.
* REPL's info uses the value of the PAGER environemnt variable
for paging. Now you can put command-line arguments in it (not
only the command name). PR#358
* REPL's info failed to work when Gauche is built without zlib
support.
* sxml.serializer: If the attribute value is the same as attribute
name, we took it as a boolean attribute and just rendered with
attribute name only. It interferes with an attribute with the
value that happens to be the same as the name, so we changed it.
This is backward-compatible change. PR#359
* sxml.ssax: Fix whitespace handling. PR#360
* We had a kludge to handle a setter of a slot accessor method,
that causes confusion when you use the module that implements a
base class then define slot accessor in the derived class. It
is fixed. See the thread
https://sourceforge.net/p/gauche/mailman/message/36363814/
for the details.
* Now we handle utf-8 source file that has BOM at the beginning.
* open-input-file, open-output-file, etc.: We now honor element-type
keyword arguments (it was ignored before). It only makes
difference on Windows.
* scheme.set: Fix set<? etc.
* util.digest: digest-hexify can now take u8vector as well.
* A bug in hash-table-copy caused inconsistent hash table state. #400
Incompatible changes in unofficial module
* parser.peg: Removed pre-defined character parsers (anychar,
upper, lower, letter, alphanum, digit, hexdigit, newline, tab,
space, spaces, and eof) and shorthands ($s, $c, and $y). Those
names are easy to conflict (esp. 'newline') yet not so much
useful, for it's quite easy to define. If existing code relies
on these procedures, say (use parser.peg.deprecated).
|