ホーム | 機能 | ダウンロード | 拡張パッケージ | ドキュメント | 開発状況 -> English | -> Practical Scheme

Gauche(ゴーシュ)は、スクリプトインタプリタとしての使い易さに重点を置いて 開発を行っているR5RS準拠のScheme処理系です。日常業務の中でのちょっとした処理を行う スクリプトを気軽にSchemeで書きたいなあ、という願望のもとに、 起動が速いこと、システムへのアクセスが組み込まれていること、 最初から多国語対応を考慮していること、 リスト処理ライブラリとして他のC/C++プログラムから簡単にリンク可能であること、 などを目標としています。

Gaucheは今のところ、いくつかのUnixプラットフォーム で動作します。

実装されている機能の概要については、 機能のページをご覧ください。

News

詳しい変更はChangeLogをどうぞ。 また、最新の開発状況はSubversionリポジトリで知ることができます。

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.
  • 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.

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.

2007/8/16

Gauche 0.8.11: メンテナンスリリース

  • 重要な変更
    • 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.

2007/7/9

Gauche-gl-0.4.4: Cygwin上でGL拡張が使えない問題を修正しました。 (Patch from Takashi Ishizaki).

古いニュース

Stay Informed

Gaucheに関するアナウンスやディスカッションを行うメイリングリストを 作成しました。リンクをクリックすると登録やアーカイブの参照を行うページに飛びます。 日本語MLに入る方は、できれば英語MLにも入っておいて下さい (話題の重複を避けるため)。

Acknowledgments

Gaucheの開発の一部(2003年9月〜2004年2月)は 情報処理振興事業協会(IPA)による 平成15年度オープンソフトウェア基盤整備事業の支援を受けています。

Gauche-gl及びGauche-gtkの開発の一部(2002年7月〜2003年2月)は、 情報処理振興事業協会(IPA)による 平成14年度未踏ソフトウェア創造事業の支援を受けています。