./lang/gauche, R7RS Scheme implementation aimed to be a handy tool for daily works

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 0.9.15, Package name: Gauche-0.9.15, Maintainer: enami

Gauche is an R7RS Scheme implementation developed to be a handy script
interpreter, which allows programmers and system administrators to write small
to large scripts for their daily chores. Quick startup, built-in system
interface, native multilingual support are some of my goals.


Required to run:
[databases/gdbm] [devel/slib]

Required to build:
[pkgtools/cwrappers]

Package options: gdbm, utf8

Master sites:

Filesize: 9223.395 KB

Version history: (Expand)


CVS history: (Expand)


   2024-12-13 16:33:22 by Ryo ONODERA | Files touched by this commit (1)
Log message:
lang/gauche: Revert PKGNAME as lower chars
   2024-12-12 16:14:36 by Ryo ONODERA | Files touched by this commit (9) | Package updated
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
   2021-10-26 12:51:59 by Nia Alarie | Files touched by this commit (260)
Log message:
lang: Replace RMD160 checksums with BLAKE2s checksums

All checksums have been double-checked against existing RMD160 and
SHA512 hashes

The following distfiles could not be fetched (possibly fetched
conditionally?):

./lang/rust-bin/distinfo rust-bin-1.54.0/rust-1.54.0-aarch64-unknown-linux-gnu.tar.gz
./lang/rust-bin/distinfo \ 
rust-bin-1.54.0/rust-1.54.0-aarch64-unknown-linux-musl.tar.gz
./lang/rust-bin/distinfo rust-bin-1.54.0/rust-1.54.0-aarch64-unknown-netbsd.tar.gz
./lang/rust-bin/distinfo \ 
rust-bin-1.54.0/rust-1.54.0-armv7-unknown-netbsd-eabihf.tar.gz
./lang/rust-bin/distinfo rust-bin-1.54.0/rust-1.54.0-i686-unknown-linux-gnu.tar.gz
./lang/rust-bin/distinfo rust-bin-1.54.0/rust-1.54.0-powerpc-unknown-netbsd90.tar.gz
./lang/rust-bin/distinfo rust-bin-1.54.0/rust-1.54.0-sparc64-unknown-netbsd.tar.gz
./lang/rust-bin/distinfo rust-bin-1.54.0/rust-1.54.0-x86_64-apple-darwin.tar.gz
./lang/rust-bin/distinfo rust-bin-1.54.0/rust-1.54.0-x86_64-unknown-freebsd.tar.gz
./lang/rust-bin/distinfo rust-bin-1.54.0/rust-1.54.0-x86_64-unknown-linux-gnu.tar.gz
./lang/rust-bin/distinfo rust-bin-1.54.0/rust-1.54.0-x86_64-unknown-linux-musl.tar.gz
./lang/smlnj/distinfo smlnj-110.73/boot.ppc-unix.tgz
./lang/smlnj/distinfo smlnj-110.73/boot.sparc-unix.tgz
./lang/oracle-jre8/distinfo jce_policy-8.zip
./lang/oracle-jre8/distinfo jre-8u202-linux-i586.tar.gz
./lang/oracle-jre8/distinfo jre-8u202-linux-x64.tar.gz
./lang/oracle-jre8/distinfo jre-8u202-macosx-x64.tar.gz
./lang/oracle-jre8/distinfo jre-8u202-solaris-x64.tar.gz
./lang/oracle-jdk8/distinfo jdk-8u202-linux-i586.tar.gz
./lang/oracle-jdk8/distinfo jdk-8u202-linux-x64.tar.gz
./lang/oracle-jdk8/distinfo jdk-8u202-solaris-x64.tar.gz
./lang/ghc80/distinfo ghc-7.10.3-boot-x86_64-unknown-solaris2.tar.xz
./lang/ghc80/distinfo ghc-8.0.2-boot-i386-unknown-freebsd.tar.xz
./lang/ghc80/distinfo ghc-8.0.2-boot-x86_64-unknown-freebsd.tar.xz
./lang/gcc5-aux/distinfo ada-bootstrap.i386.freebsd.100B.tar.bz2
./lang/gcc5-aux/distinfo ada-bootstrap.i386.freebsd.84.tar.bz2
./lang/gcc5-aux/distinfo ada-bootstrap.x86_64.dragonfly.41.tar.bz2
./lang/gcc5-aux/distinfo ada-bootstrap.x86_64.freebsd.100B.tar.bz2
./lang/gcc5-aux/distinfo ada-bootstrap.x86_64.freebsd.84.tar.bz2
./lang/gcc5-aux/distinfo ada-bootstrap.x86_64.solaris.511.tar.bz2
./lang/rust/distinfo rust-1.53.0-aarch64-apple-darwin.tar.gz
./lang/rust/distinfo rust-1.53.0-aarch64-unknown-linux-gnu.tar.gz
./lang/rust/distinfo rust-1.53.0-aarch64-unknown-netbsd.tar.gz
./lang/rust/distinfo rust-1.53.0-aarch64_be-unknown-netbsd.tar.gz
./lang/rust/distinfo rust-1.53.0-arm-unknown-linux-gnueabihf.tar.gz
./lang/rust/distinfo rust-1.53.0-armv7-unknown-linux-gnueabihf.tar.gz
./lang/rust/distinfo rust-1.53.0-i686-unknown-linux-gnu.tar.gz
./lang/rust/distinfo rust-1.53.0-powerpc-unknown-netbsd.tar.gz
./lang/rust/distinfo rust-1.53.0-powerpc-unknown-netbsd90.tar.gz
./lang/rust/distinfo rust-1.53.0-sparc64-unknown-netbsd.tar.gz
./lang/rust/distinfo rust-1.53.0-x86_64-apple-darwin.tar.gz
./lang/rust/distinfo rust-1.53.0-x86_64-unknown-freebsd.tar.gz
./lang/rust/distinfo rust-1.53.0-x86_64-unknown-illumos.tar.gz
./lang/rust/distinfo rust-1.53.0-x86_64-unknown-linux-gnu.tar.gz
./lang/rust/distinfo rust-std-1.53.0-aarch64-apple-darwin.tar.gz
./lang/rust/distinfo rust-std-1.53.0-aarch64-unknown-linux-gnu.tar.gz
./lang/rust/distinfo rust-std-1.53.0-aarch64-unknown-netbsd.tar.gz
./lang/rust/distinfo rust-std-1.53.0-aarch64_be-unknown-netbsd.tar.gz
./lang/rust/distinfo rust-std-1.53.0-arm-unknown-linux-gnueabihf.tar.gz
./lang/rust/distinfo rust-std-1.53.0-armv7-unknown-linux-gnueabihf.tar.gz
./lang/rust/distinfo rust-std-1.53.0-i686-unknown-linux-gnu.tar.gz
./lang/rust/distinfo rust-std-1.53.0-powerpc-unknown-netbsd.tar.gz
./lang/rust/distinfo rust-std-1.53.0-powerpc-unknown-netbsd90.tar.gz
./lang/rust/distinfo rust-std-1.53.0-sparc64-unknown-netbsd.tar.gz
./lang/rust/distinfo rust-std-1.53.0-x86_64-apple-darwin.tar.gz
./lang/rust/distinfo rust-std-1.53.0-x86_64-unknown-freebsd.tar.gz
./lang/rust/distinfo rust-std-1.53.0-x86_64-unknown-linux-gnu.tar.gz
./lang/smlnj11072/distinfo smlnj-110.72/boot.ppc-unix.tgz
./lang/smlnj11072/distinfo smlnj-110.72/boot.sparc-unix.tgz
./lang/ghc84/distinfo ghc-8.0.2-boot-x86_64-unknown-solaris2.tar.xz
./lang/ghc84/distinfo ghc-8.4.4-boot-i386-unknown-freebsd.tar.xz
./lang/ghc84/distinfo ghc-8.4.4-boot-x86_64-apple-darwin.tar.xz
./lang/ghc84/distinfo ghc-8.4.4-boot-x86_64-unknown-freebsd.tar.xz
./lang/ghc7/distinfo ghc-7.10.3-boot-i386-unknown-freebsd.tar.xz
./lang/ghc7/distinfo ghc-7.6.3-boot-i386-unknown-solaris2.tar.xz
./lang/ghc7/distinfo ghc-7.6.3-boot-powerpc-apple-darwin.tar.xz
./lang/ghc7/distinfo ghc-7.6.3-boot-x86_64-unknown-solaris2.tar.xz
./lang/ghc90/distinfo ghc-8.10.4-boot-x86_64-unknown-solaris2.tar.xz
./lang/ghc90/distinfo ghc-9.0.1-boot-aarch64-unknown-netbsd.tar.xz
./lang/ghc90/distinfo ghc-9.0.1-boot-i386-unknown-freebsd.tar.xz
./lang/ghc90/distinfo ghc-9.0.1-boot-x86_64-apple-darwin.tar.xz
./lang/ghc90/distinfo ghc-9.0.1-boot-x86_64-unknown-freebsd.tar.xz
./lang/openjdk8/distinfo \ 
openjdk7/bootstrap-jdk-1.7.76-freebsd-10-amd64-20150301.tar.xz
./lang/openjdk8/distinfo \ 
openjdk7/bootstrap-jdk-1.7.76-netbsd-7-sparc64-20150301.tar.xz
./lang/openjdk8/distinfo \ 
openjdk7/bootstrap-jdk-1.8.181-netbsd-8-aarch64-20180917.tar.xz
./lang/openjdk8/distinfo \ 
openjdk7/bootstrap-jdk7u60-bin-dragonfly-3.6-amd64-20140719.tar.bz2
./lang/openjdk8/distinfo \ 
openjdk7/bootstrap-jdk7u60-bin-dragonfly-3.8-amd64-20140719.tar.bz2
./lang/go-bin/distinfo go1.14.2.darwin-amd64.tar.gz
./lang/go-bin/distinfo go1.14.2.linux-386.tar.gz
./lang/go-bin/distinfo go1.14.2.linux-amd64.tar.gz
./lang/go-bin/distinfo go1.14.2.linux-arm64.tar.gz
./lang/go-bin/distinfo go1.14.2.linux-armv6l.tar.gz
./lang/go-bin/distinfo go1.14.2.netbsd-arm64.tar.gz
./lang/go-bin/distinfo go1.16beta1.darwin-arm64.tar.gz
./lang/gcc6-aux/distinfo ada-bootstrap.i386.freebsd.100B.tar.bz2
./lang/gcc6-aux/distinfo ada-bootstrap.x86_64.dragonfly.41.tar.bz2
./lang/gcc6-aux/distinfo ada-bootstrap.x86_64.freebsd.100B.tar.bz2
./lang/gcc6-aux/distinfo ada-bootstrap.x86_64.freebsd.84.tar.bz2
./lang/gcc6-aux/distinfo ada-bootstrap.x86_64.solaris.511.tar.bz2
./lang/ghc810/distinfo ghc-8.8.4-boot-x86_64-unknown-solaris2.tar.xz
./lang/sun-jre7/distinfo UnlimitedJCEPolicyJDK7.zip
./lang/sun-jre7/distinfo jre-7u80-linux-x64.tar.gz
./lang/sun-jre7/distinfo jre-7u80-solaris-i586.tar.gz
./lang/sun-jre7/distinfo jre-7u80-solaris-x64.tar.gz
./lang/ghc88/distinfo ghc-8.4.4-boot-i386-unknown-freebsd.tar.xz
./lang/ghc88/distinfo ghc-8.4.4-boot-x86_64-apple-darwin.tar.xz
./lang/ghc88/distinfo ghc-8.4.4-boot-x86_64-unknown-freebsd.tar.xz
./lang/ghc88/distinfo ghc-8.4.4-boot-x86_64-unknown-solaris2.tar.xz
./lang/gcc-aux/distinfo ada-bootstrap.i386.dragonfly.36A.tar.bz2
./lang/gcc-aux/distinfo ada-bootstrap.i386.freebsd.100B.tar.bz2
./lang/gcc-aux/distinfo ada-bootstrap.i386.freebsd.84.tar.bz2
./lang/gcc-aux/distinfo ada-bootstrap.x86_64.dragonfly.36A.tar.bz2
./lang/gcc-aux/distinfo ada-bootstrap.x86_64.freebsd.100B.tar.bz2
./lang/gcc-aux/distinfo ada-bootstrap.x86_64.freebsd.84.tar.bz2
./lang/gcc-aux/distinfo ada-bootstrap.x86_64.solaris.511.tar.bz2
./lang/gcc6/distinfo ecj-4.5.jar
./lang/openjdk11/distinfo bootstrap-jdk-1.11.0.7.10-netbsd-9-aarch64-20200509.tar.xz
./lang/sun-jdk7/distinfo jdk-7u80-linux-x64.tar.gz
./lang/sun-jdk7/distinfo jdk-7u80-solaris-i586.tar.gz
./lang/sun-jdk7/distinfo jdk-7u80-solaris-x64.tar.gz
   2021-10-07 16:21:17 by Nia Alarie | Files touched by this commit (282)
Log message:
lang: Remove SHA1 hashes for distfiles
   2021-07-24 16:50:42 by Yorick Hardy | Files touched by this commit (3) | Package updated
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).
   2020-03-22 11:50:35 by Roland Illig | Files touched by this commit (1)
Log message:
lang/gauche: skip check for unknown configure options
   2020-01-26 18:32:28 by Roland Illig | Files touched by this commit (981)
Log message:
all: migrate homepages from http to https

pkglint -r --network --only "migrate"

As a side-effect of migrating the homepages, pkglint also fixed a few
indentations in unrelated lines. These and the new homepages have been
checked manually.
   2018-07-26 18:55:29 by Jonathan Perkin | Files touched by this commit (6)
Log message:
gauche: Various fixes.

This package can only have possibly worked on NetBSD/x86_64 previously, now it
at least works on SunOS too.