Gauche is an R5RS 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.
Gauche runs on several Unix-like platforms.
See Features for implemented features.
News
See ChangeLog for details. You can also check the most recent development status at CVS repository.
- 2008/2/13
-
Gauche 0.8.13: Lots of small improvements
- Bug fixes
- Module rfc.http: fixed a bug that didn't pass the port number in the host header field.
- rxmatch-num-matches: returns 0 if #f is given, as described in the manual.
- asin, asinh: fixed a problem of the code to avoid numerical instability.
- Module slib: fixed to work with the newest slib release.
- Module gauche.process: on-error-exit handler was errneously called even when the process' exit status was zero.
- Module file.util: Fixed a bug in copy-file that didn't preserve the mode of the desination file in certain cases.
- Module gauche.parseopt: Fixed a problem that regexp ran out of stack when very long option argument was given.
- Fixed a problem of make uninstall that might remove libgc.a which wasn't installed by Gauche.
- Module gauche.test: test-module have missed to check some of the internal definitions. Now it is fixed, and it may find references to undefined variables that haven't been spotted before.
- Fixed an autoload bug which caused malfunction when mulitple threads tried to resolve the same autoload simultaneously.
- Improvements in the core
- Improved argument handling in apply:
It used to push each arument
in the argument list onto the VM stack, so when you applied
long argument list that wouldn't fit the VM stack it failed.
Now apply only expands the argument list as much
as it needs. This eliminates the limitation of the length
of argument list in almost all cases. For example, you can
now do this:
(apply list (iota 50000))
- Better support of cross compilation (patch from YOKOTA Hiroshi).
- New procedures: fixnum-width, greatest-fixnum, least-fixnum (as defined in R6RS).
- String literals allow R6RS-style line breaking---a
sequence of a backslash, zero or more whitespaces, newline,
and zero or more whitespaces, are ignored in a string literal.
You can write
"Suppose this is very very long line."
as"Suppose this is very \ very long line."
for example.
- Improved argument handling in apply:
It used to push each arument
in the argument list onto the VM stack, so when you applied
long argument list that wouldn't fit the VM stack it failed.
Now apply only expands the argument list as much
as it needs. This eliminates the limitation of the length
of argument list in almost all cases. For example, you can
now do this:
- Improvements in the system interface
- Now Gauche uses 64bit file offsets, enabling to handle >2GB files. (On Linux, including <gauche.h> defines _FILE_OFFSET_BITS to 64. If you link libgauche with other libraries and passes around file offset value or struct stat, make sure the other libraries are also compiled with the same _FILE_OFFSET_BITS).
- glob and glob-fold now supports '**' wildcard that matches multiple levels of directories.
- New system functions: sys-getrlimit and sys-setrlimit.
- <time> can now represent a time after the year 2038.
- The default buffering mode of stdout is changed to full when it is not connected to the terminal (it remains line if it outputs to the terminal). This improves output performance quite a bit when you redirect the large output to a file or a pipe. Note: This may break programs that forgot to call (flush) when the output is piped.
- Improvements in regexp
- Regexp has now read/write invariance, except when it is created by string->regexp from a string with weird characters.
- New procedure: rxmatch->string.
- In regexp-replace family functions, you can now use names of named capturing groups to refer to the captured substring, as well as their indexes.
- Improvements in other libraries
- Module rfc.base64 and rfc.quoted-printable: The encoding routines now takes :line-width keyword arguments to insert line breaks in the output.
- Module rfc.822: Added rfc822-write-headers, a generic message header generation routine. For the symmetry with it, rfc822-header->list is renamed to rfc822-read-headers. The old name is kept for the compatibility.
- New tree-map search functions: tree-map-floor, tree-map-floor-key, tree-map-floor-value, tree-map-ceiling, tree-map-ceiling-key, tree-map-ceiling-value, tree-map-predecessor, tree-map-predecessor-key, tree-map-predecessor-value, tree-map-successor, tree-map-successor-key, tree-map-successor-value.
- Module srfi-19: Julian day and modified julian day are now calculated by exact integers, avoiding rounding errors.
- Module gauche.sequence: Officially supports methods to shuffle and permute the sequence content: permute, permute!, permute-to, shuffle, shuffle!, shuffle-to. These are already in since 0.8.12, but weren't documented.
- Bug fixes
- 2007/10/29
-
Gauche 0.8.12: Maintenance release
- Bug fixes
- Module gauche.net: Important: Socket port buffering mode was set incorrectly in the release 0.8.11, making network applications behave erroneously.
- Numeric comparison routine could return incorrect result when comparing ratnums in special cases.
- Module file.util: file->string etc. now handles :if-does-not-exist argument properly, and returns #f if the file doesn't exist and :if-does-not-exist #f is specified.
- Regmatch objects had a bug that returns "" for failed submatch, which should be #f.
- Module dbm.gdbm: gdbm-errno and GDBM_SYNCMODE weren't exported.
- Other improvements
- The `glob' functionality is reimplemented in Scheme instead of calling libc's glob so that we can have the consistent behavior across platforms. The sys-glob function is renamed to glob, with additional features (the old name is kept for the backward compatibility). See the reference manual for the details.
- New system functions: sys-environ and sys-environ->alist, to get all environment variables.
- Infinities and NaNs are now read and written as +inf.0, -inf.0 and +nan.0, following R6RS syntax. The old notations like #i+1/0 etc. are also recognized for the backward compatibility.
- Module text.progress: Allow to change header string dynamically, and also added a miscellaneous information field.
- Bug fixes
- 2007/8/16
-
Gauche 0.8.11: Maintenance release
- Important change
- If --enable-threads argument is not given to the configure script, pthreads is automatically enabled when it is available on the platform. So you don't usually need to specify that option anymore. If you want to disable pthreads support explicitly, specify --enable-threads=none.
- Bug fixes
- Fixed a long standing bug that the autoload wasn't resolved when define-method was evaluated on the autoloaded symbol.
- gauche.uvector: write-block output extra octets when byte swapping was enabled.
- srfi-13: string-upcase! etc. didn't work without giving all the arguments, including the ones that were supposed to be optional.
- rfc.ftp: ftp-put-unique now returns two values, the server's response and the remote file name created by the action; without the remote file name, it was pretty much useless. Also call-with-ftp-connection was passing a wrong keyword argument to ftp-login.
- rfc.http: Keyword arguments :sink and :flusher were ignored by http-get.
- slib: force-output didn't work.
- srfi-1: lset= didn't work if more than two lists were given.
- Gauche was SEGVed when cond or case with a dotted list in their clauses were given.
- Gauche was SEGVed when a circular structure was passed to error or errorf.
- Gauche was SEGVed when it tried to coerce some rational numbers with huge denominator/numerator into flonum.
- Gauche was SEGVed when non-string key was given to a string hash table.
- Comparing a small rational number with a big denominator against fixnum yielded a wrong result.
- Double flonum to half float conversion routine had a little error in LP64 machines.
- Fixed a problem of "port table full" when too many ports were opened and closed in a short time span.
- There was a possibility of precision loss in conversion of exact integer to flonum, due to double rounding.
- When gosh was run with a script and an error occurred, stack trace wasn't shown.
- String interpolation didn't recognize '[]' as '()'.
- sys-realpath was unusable due to typo.
- Fixed a compile problem on Solaris regarding sigwait() incompatibility.
- New modules, procedures and macros:
- New generic functions in gauche.collection: find-min, find-max, and find-min&max.
- port-fd-dup!: An interface to the dup(2) system call.
- hash-table-clear! added.
- sys-umask can now be called without arguments to obtain the current umask settings without changing it.
- Other changes:
- Template Makefile for extensions now honors separate builddir.
- gauche.test: test-end procedure now returns the number of failed tests.
- Important change
- 2007/7/9
-
Gauche-gl-0.4.4: Minor maintenance release. Fixed a problem on cygwin that prohibited using GL extensions. (Patch from Takashi Ishizaki).
Stay Informed
A mailing list for discussion and announcement of Gauche is now available, thanks for SourceForge. You can subscribe it from this page.