./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.6, Package name: Gauche-0.9.6, 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:

Package options: gdbm, utf8

Master sites:

SHA1: 20f2a0a4b37c40ce0175e627d5767b32d8f4eb5d
RMD160: 36d77c87881978c408daf7958bc41048aa4b2edd
Filesize: 6765.166 KB

Version history: (Expand)

CVS history: (Expand)

   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.
   2018-07-24 16:52:18 by Ryo ONODERA | Files touched by this commit (3) | Package updated
Log message:
Update to 0.9.6

* Use gmake for pattern rules

Release 0.9.6

Major feature upgrade

  * Notable feature enhancement:
  * New modules and procedures
      + R7RS-Large Red Edition support (WiLiKi:Gauche:R7RS-RedEdition)
      + New srfi support:
      + Other new modules and procedures:
  * Incompatible changes
  * Other bug fixes

Notable feature enhancement:

  * Static linking and standalone executable support: Now you can create a
    standalone executable from Gauche program. See blog entry and "Building
    standalone executables" section.
  * Single shell-script installer (blog entry).
  * REPL enhancement: Pretty printing (blog entry), online document display (
    blog entry) and search (blog entry).
  * Method dispatch optimizations (1, 2).
  * Procedure inlining optimizations (1, 2)
  * Windows console Japanese handling: Thanks to @hamayama, numerous fixes to
    use Japanese on Windows command prompt is incorporated.
  * Bump to Boehm gc 7.6.6, thanks to @qykth-git.
  * Support mbedTLS as an additional TLS support, thanks to @qykth-git. See
    rfc.tls for the details.
  * format finally supports floating number formatting ~f. It also supports a
    subtle rounding mode switch regarding binary to decimal conversion (blog
  * Support of using multiple versions of Gauche in parallel---from 0.9.6 and
    after, you can invoke a different version of Gauche by gosh -vVERSION, as
    far as VERSION of Gauche is also installed. This isn't much useful now
    (VERSION must be 0.9.6 or later), but will be handy with future releases.
  * Sampling profiler now works on Windows, thanks to Saito Atsushi and
    @hamayama (although it can only sample the attached thread).

New modules and procedures

R7RS-Large Red Edition support (WiLiKi:Gauche:R7RS-RedEdition)

12 libraries (out of 17) are supported:

  * scheme.list List library (formerly srfi-1)
  * scheme.vector Vector library (formerly srfi-133)
  * scheme.sort Sort libraries (formerly srfi-132)
  * scheme.set Sets and bags (formerly srfi-113)
  * scheme.charset Character-set library (formerly srfi-14)
  * scheme.hash-table Intermediate hash tables (formerly srfi-125)
  * scheme.ideque Immutable deques (formerly srfi-134
  * scheme.generator Generators (formerly srfi-121)
  * scheme.lseq Lazy sequences (formerly srfi-127)
  * scheme.box Boxes (formerly srfi-111)
  * scheme.list-queue Mutable queues (formerly srfi-117)
  * scheme.comparator Comparators (formerly srfi-128)

Those are still accessible as srfi-* names, but new code is recommended to use
the scheme.* names.

New srfi support:

  * srfi-64 A Scheme API for test suites
  * srfi-66 Octet vectors
  * srfi-74 Octet-addressed binary blocks
  * srfi-96 SLIB prerequisites
  * srfi-129 Titlecase procedures
  * srfi-141 Integer division
  * srfi-143 Fixnums
  * srfi-145 Assumptions (built-in)
  * srfi-146 Mappings
      + srfi-146.hash Hashmaps
  * srfi-149 Basic Syntax-rules template extensions (built-in)
  * srfi-151 Bitwise operations
  * srfi-152 String library (reduced)
  * srfi-158 Generators and accumulators

Other new modules and procedures:

  * pprint - pretty printer.
  * assume-type macro and type-error procedure.
  * define-inline is now official.
  * hash-table-compare-as-sets, tree-map-compare-as-sets - compare those
    mappings as sets
  * let-values, let*-values: now built-in.
  * In gauche.process: do-process!, do-pipeline, run-pipeline!.
  * In gauche.unicode: char-east-asian-width
  * In gauche.uvector: uvector-binary-search, u8vector=? ..., u8vector-compare
  * In gauche.charconv: Conversion routines accepts u8vector as well as
  * In gauche.sequence: delete-neighbor-dups, delete-neighbor-dups!,
    delete-neighbor-dups-squeeze!, group-contiguous-sequence
  * In gauche.threads: atomic and atomic-update! allows more than one timeout
  * text.template: Simple template expander, based on built-in string
    interpolation feature.
  * Char-set can be immutable. char-set-freeze and char-set-freeze! are used to
    make a char set immutable. Literal char-sets are immutable, as other
    literal objects.
  * rfc.http: You can now use stunnel process to do https connection instead of
    Gauche's rfc.tls module. Note that it only works with command mode of
    stunnel---which isn't available on Windows.
  * rfc.tls: Now that we support mbedTLS and server certificate authentication,
    a minimal document is added.
  * binary.io: get-uint, get-sint, put-uint!, put-sint!.
  * gauche.generator: generator->uvector, generator->uvector!, generator->
    bytevector, generator->bytevector!.
  * data.random: regular-string$ - creates a generator that generates random
    strings that match the given regexp.
  * string-incomplete->complete: Add :escape mode to escape illegal bytes in
    lossless way.

Incompatible changes

Some change undocumented behaviors; others change because of bug fix.

  * Literal character sets (#[chars]) are now immutable, as other literal
    objects; it will raise an error if you try to mutate it.
  * getter-with-setter now associates the setter to the getter in immutable way
    ('locked'); it will raise an error if you try to change it. It is the way
    specified in srfi-17. It also allows Gauche to inline setters. (NB: Many
    predefined setters are now locked. If your existing code alters them it
    will cause an error.)
  * list*, cons* - Requires at least one arg, as specified in srfi-1. Zero
    argument doesn't make sense, although previous versions of Gauche allowed
  * append, append! - Now it is an error if the arguments except the last one
    is a dotted list. We've tolerated it before, but it's rather error prone.
  * util.match: The way to match record instance with positional variables are
    changed for more reasonable way. We hope no code depends on the previous
    way, which was broken anyway. See the blog entry for the details.
  * twos-complement-factor: We fix the behavior when 0 is passed; it used to
    return 0, now it returns -1. The latter is consistent with srfi-60.
    Unfortunately we documented the former behavior, so it breaks
  * string-split: Splitting an empty string now yields an empty list instead of
    (""), as srfi-152 specifies

Other bug fixes

There are too many; we list up some notable ones.

  * The behavior of guard when no clauses are satisfied and the exception is
    reraised is now R7RS-compatible ( https://github.com/shirok/Gauche/pull/335
    ). When using R7RS, with-exception-handler is R7RS compatible (which is
    slightly different from built-in with-exception-handler, compatible to
  * unwind-protect: Fix bug with interaction of call/cc.
  * rfc.tls: axTLS interface had MT-hazard.
  * er-macro-transformer: Fix hygienity issue ( https://github.com/shirok/
    Gauche/issues/250 )
   2018-01-28 21:11:10 by Thomas Klausner | Files touched by this commit (462) | Package updated
Log message:
Bump PKGREVISION for gdbm shlib major bump
   2016-10-13 02:30:13 by enami tsugutomo | Files touched by this commit (6) | Package updated
Log message:
Update gauche to 0.9.5

Release Notes:

Better R7RS conformance

  * Keyword-symbol integration: Gauche keywords (e.g. :key) can be symbols
    that are automatically bound to itself. It breaks the backward
    compatibility in some corner cases, however, so we haven't make the
    change in effect by default in 0.9.5. Setting the environment variable
    GAUCHE_KEYWORD_IS_SYMBOL turns on this feature. See Keywords, for the
    details. We urge you to test your code with this feature turned on,
    for pretty soon (probably in the next release) we'll make this feature
    effective by default.
  * R7RS raise is now conformant of R7RS (which is slightly different from
    Gauche's builtin raise, which is srfi-18 conformant).

New modules and procedures

  * Renamed modules (old names are still valid, but new code should use
    the new names):
      + Data structure implementations are now named data.*; so
        util.queue, util.sparse, util.trie are renamed to data.queue,
        data.sparse, data.trie.
      + Module text.unicode is renamed to gauche.unicode, for it's
        essential for R7RS support.
  * New modules:
      + data.cache - Cache
      + data.heap - Heap
      + data.ring-buffer - Ring buffer
      + data.imap - Immutable map
      + data.ideque - Immutable deque
      + text.console: Simple console control module, works on both
        vt100-ish terminals and Windows console. Try examples/snake.scm to
        see it in action.
      + util.dominator - Find a dominator tree of a directed graph.
      + util.levenshtein - Calculate various edit-dinstances.
      + util.unification - Unification algorithm.
  * Low-level hygienic macro support by er-macro-transformer.
  * New builtin macros and procedures:
      + and-let1.
      + macroexpand-all - Expands everything in the given form.
      + sys-available-processors - query # of processor cores at runtime.
      + symbol-append.
      + sys-getgroups, sys-mkdtemp.
      + debug-label - Get unique label of an object.
      + length<?, length>?, length>=?, length=? - We had length<=?, \ 
so why
      + encode-float, inverse of decode-float.
  * In gauche.uvector:
      + New procedures:string->u32vector!, string->s32vector!,
        make-uvector, port->uvector
      + Generic accessor and mutator uvector-ref, uvector-set!.
  * In gauche.sequence:
      + New searching procedures - sequence-contains,
        break-list-by-sequence, break-list-by-sequence!, sequence->
      + New utilities - common-prefix, common-prefix-io.
  * In gauche.array: Add constructors u8array, etc., for the consistency.
  * In gauche.lazy: lappend-map
  * In gauche.generator: gflatten, uvector->generator.
  * In gauche.process:
      + run-process-pipeline - for easier pipelining.
      + shell-tokenize-string.
  * In gauche.termios: sys-termios-copy
  * In gauche.test:
      + test-none-of - As an expected value.
      + test-script - To test script files.
  * In gauche.vport: List ports are added. See open-input-char-list,
  * In data.queue: mtqueue-num-waiting-readers.
  * In data.trie: trie-longest-match.
  * In data.random: samples$, for random sampling.
  * In text.csv: Middle-layer procedures: csv-rows->tuples,
    make-csv-header-parser, make-csv-record-parser.
  * In rfc.uri: uri-ref to access components of uri conveniently.
  * In rfc.http: http-status-code->description.

Added srfi supports

  * srfi-69: Basic hash tables
  * srfi-111: Boxes
  * srfi-112: Environment inquiry
  * srfi-113: Sets and Bags
  * srfi-114: Comparators
  * srfi-117: Mutable queues
  * srfi-118: Simple adjustable-size strings
  * srfi-121: Generators - Covered by gauche.generator.
  * srfi-128: Comparators (reduced) - the comparator is actually built-in
    to Gauche's core, so that other built-in mechanism such as hashtables,
    treemaps, sort, etc. can take comparators.
  * srfi-131: ERR5RS Record Syntax (reduced) - Subset of gauche.record.
  * srfi-133: Vector library
  * srfi-134: Immutable deques - Covered by data.ideque.

More pleasant interactive experience

  * Better error message while loading/compiling, using <mixin-condition>
    mechanism. Details.
  * Improved describe.
  * Toplevel REPL commands. See blog entry, or see the manual section
    "Working in REPL"
  * Scheme-defined procedures maintain source code and source location. It
    can be queried by source-code and source-location. The source location
    is also shown by describe. (Source code isn't kept for precompiled
    Scheme code for now.)
  * Online REPL document (info procedure, or ,info/,doc toplevel command)
    now shows just the named entry.
  * Experimental support of line-editing. If the environment variable
    GAUCHE_READ_EDIT is set and the terminal is capable, you can use line
    editing (with emacs-like key binding). This feature still in early
    development stage and has number of known issues---especially,
    multiline edit only partially work. If you're brave, give it a shot,
    but don't blame me if your REPL explodes.
  * You can invoke editor from repl by (ed file-or-procedure) (see ed). If
    the source location is known, you can directly jump to the source of
    the procedure, edit, and reload it.
  * Now REPL consumes the trailing newline of input S-expr; that is, when
    you type (read-line) on REPL, it waits for your input. Before, REPL
    didn't consume the trailing newline, so (read-line) immediately
    returned when it sees the newline character left in the input buffer,
    but that confused users.
  * use, select-module, export, import - Now these forms evaluate to zero
    values instead of #<undef>, for less cluttering of REPL.

Other notable improvements

  * gauche.configure: More feature tests on compilers and linking. Start
    using package.scm for the source of package metainformation.
  * Extended number syntax:
      + You can insert _ in prefixed numeric literal for readability, e.g.
      + Polar notation of numeric literal recognize pi suffix, e.g.
        2@0.5pi => 0.0+2.0i.
      + The reader recognizes CL-ish #<radix>r syntax, e.g. #3r121 for 121
        on base 3 (which is 16 in decimal).
  * Hashtables are now salted, meaning, it uses different hash functions
    at least for each invocation of the program, so that it is immune to
    the hash collision attack. The hash function is deprecated, replaced
    by default-hash, portable-hash and legacy-hash. See the manual entry
    for the details.
  * sys-sleep, sys-nanosleep: Changed to retry sleep/nanosleep by default
    if it is interrupted by as signal.
  * A new debug special reader macro: #?,, which can be used as #?,(proc
    arg ...). When evaluated, it displays the form (proc arg ...) and each
    value of arg, then calls proc with those arguments and displays the
    return value(s). Similar to #?= but you can also check the actual
    value of arguments. The #?= stub is also improved to show the thread
    from which it is displaying.
  * gauche.vport: open-output-uvector now takes an option to make the
    output buffer extendable.
  * load searches .sld suffix as well, as some other R7RS implementations
  * Stack trace now works for threads (but you have to call report-error
    within guard clauses explicitly, for by default unhandled error is
    propagated to the thread that calls thread-join!).
  * gauche.uvector: s8vector->string and u8vector->string now take
    optional 'terminator' argument, convenient to extract NUL-terminated
    string from fixed size buffer.
  * gauche.net: More flexible port number selection in make-server-socket
    and make-server-sockets.
  * data.sparse: Allow default value per vector (a sparse vector returns
    its default value when unset element is accessed).
  * rfc.http: Handles ipv6-style server address spec, e.g. [::1]:8888.
  * file.util: copy-file - Now takes :if-exists and :append keyword
  * crypt.bcrypt: Update bcrypt implementation and changed the default
    from 2a to 2b.
  * gauche.termios: Support mintty on MSYS.
  * rfc.tls: Add basic server-side certificate support.

Changes that may alter the behavior of existing code

  * gauche.generator: gtake - changed optional argument spec to match
    srfi-121. Existing code that needs the old behavior can use a new
    procedure gtake*.
  * If a hygienic macro inserts a fresh toplevel identifier, that
    identifier is renamed. E.g. if you say

    (define-syntax define-x (syntax-rules () ((_) (define x #t))))

    and then


    the toplevel x is renamed and can't be referred to from outside. This
    is not explicitly specified in R7RS, but renaming is consistent with
  * U+180e Mongolian Vowel Separator is no longer treated as a whitespace
    character, since Unicode 6.3.0 changed its category from Zs to Cf.
  * when, unless - Now they require at least one expr in their body.
  * require: Now loads a file into a special module, instead of #<module
    gauche>. This may catch an error that was previously ignored. See the
    manual entry for the details.
  * include, include-ci: Now relative pathnames, including ones that begin
    with ./ or ../, are taken relative to the includer file. Before, files
    beginning with ./ and ../ are treated specially, just like load. But
    it is less useful for include and just increases confusion.

Bug fixes

  * Fixed numerous bugs in hygienic macro expander.
  * When a module exports an inherited binding from renaming, it wasn't
    searched properly.
  * util.match: Fixed a bug that doesn't handle match expressions
    generated by hygienic macros.
  * Make -fcase-fold option affect REPL as well.
  * fixnum-width: It returned a number one smaller than the correct value.
  * Fixed a number reader bug handling very big or very small exponent.
  * srfi-13: Fixed a bug in xsubstring when 'from' argument is negative.
  * parameterize: Fixed a bug that failed to restore parameter values in
    some edge cases.
   2016-01-26 15:46:46 by Ryosuke Moro | Files touched by this commit (1)
Log message:
   2015-11-25 13:51:17 by Jonathan Perkin | Files touched by this commit (22)
Log message:
Remove mk/find-prefix.mk usage from the lang category.

The find-prefix infrastructure was required in a pkgviews world where
packages installed from pkgsrc could have different installation
prefixes, and this was a way for a dependency prefix to be determined.

Now that pkgviews has been removed there is no longer any need for the
overhead of this infrastructure.  Instead we use BUILDLINK_PREFIX.pkg
for dependencies pulled in via buildlink, or LOCALBASE/PREFIX where the
dependency is coming from pkgsrc.

Provides a reasonable performance win due to the reduction of `pkg_info
-qp` calls, some of which were redundant anyway as they were duplicating
the same information provided by BUILDLINK_PREFIX.pkg.