Subject: CVS commit: pkgsrc/lang/gauche
From: Ryo ONODERA
Date: 2024-12-12 16:14:36
Message id: 20241212151436.27A53FC1C@cvs.NetBSD.org

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

Files:
RevisionActionfile
1.77modifypkgsrc/lang/gauche/Makefile
1.34modifypkgsrc/lang/gauche/PLIST
1.43modifypkgsrc/lang/gauche/distinfo
1.8modifypkgsrc/lang/gauche/patches/patch-af
1.9modifypkgsrc/lang/gauche/patches/patch-ag
1.2modifypkgsrc/lang/gauche/patches/patch-ext_zlib_Makefile.in
1.1addpkgsrc/lang/gauche/patches/patch-ext_Makefile.ext.in
1.16removepkgsrc/lang/gauche/patches/patch-aa
1.1removepkgsrc/lang/gauche/patches/patch-ext_tls_axTLS_ssl_os__port.h