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

以前のニュース

2012/5/28

Gauche 0.9.3.3 - マイナーバグフィクスリリース

0.9.3.2からいくつかのバグフィクスと、2つばかり新機能の追加です。 バグのひとつが、ある条件でビルドが失敗するというものだったので、 新たなリリースにした方が良いと判断しました。

  • バグフィクス:
    • DESTDIRが設定されて、以前のGaucheがインストールされていない 環境でmake installを実行しようとすると "libgauche-0.9.so.0.3: cannot open shared object file: No such file or directory" といったエラーを 出してmakeが止まるという問題を修正しました。
    • FreeBSDで、シグナルハンドリングの初期設定ルーチンが予期せぬメモリ破壊を 起こしていました。
    • everyに2つ以上の引数リストが与えれた場合、 全ての引数が条件を満たした際の返り値が、 srfi-1に指定されているように述語の最後の戻り値ではなく、 #tになるというバグがありました。 また、stream-everyにも同様のバグがありました。
    • MinGWでREPLからのinfoが動かなかったのを修正しました。
    • MinGWで、コンソールを作らないgosh-noconsole.exeを使って スクリプトを実行し、そこから子プロセスを起動してパイプで通信しようとすると gosh-noconsole.exeが落ちてしまうというバグを直しました。
  • 改善:
    • New procedure: string-scan-right
    • GC is now 7.2b

2012/5/11

Gaucheがutf-8以外の文字エンコーディングを使うようにconfigureされた場合に ドキュメントのビルドに失敗するという問題が見つかったので、これを修正したリリース(0.9.3.2) を出しました。Gaucheをデフォルトのutf-8以外のエンコーディングでコンパイルしたい 場合はダウンロードしてください。utf-8でコンパイルする場合は急いでアップデート する必要はありません。

2012/5/10

Windows/MinGW上で0.9.3リリース版がgit HEADバージョンをコンパイルできない という問題が見つかったので、修正したバージョン(0.9.3.1)を用意してあります。 他のプラットフォームには影響はありません。

2012/5/9

Gauche 0.9.3

  • 新機能
    • 遅延シーケンス: 効率良く動作し、通常のリスト手続きと シームレスに混ぜて使える、遅延評価リストがサポートされます。 遅延シーケンス内の遅延評価のforceは自動的に行われるので、 遅延シーケンスをcarfoldといった 通常のリスト手続きにそのまま渡すことができます。詳しい説明および例は マニュアルのエントリを 参照してください。
    • gauche.generator: 呼ばれる度に値を生成する手続きである ジェネレータを統一的に扱うユーティリティです。 遅延シーケンスもジェネレータを基に作られています。 詳しくはマニュアルを どうぞ。
    • Windows/MinGWビルドでスレッドが使えるようになりました。 pthreadsではなくWin32 thread APIを直接使っています。Scheme レベルで違いが見えることはほとんどありませんが、 cond-expandが拡張され、スレッドサポート自体の有無と スレッドモデルの違いそれぞれを見分けられるようになっています。 マニュアルのThreadsの項参照。
    • add-load-pathマクロに、「現在ロード中のファイルからの相対パス」 でロードパスを追加できるオプションがつきました。 この機能は、ライブラリを伴ったスクリプトを配布するのに便利です。例えば スクリプトファイル内で(add-load-path "." :relative) とすれば、それ以降、そのスクリプトのあるディレクトリからライブラリが 探されます。ユーザはディレクトリごと好きな場所にコピーして、 どこからでも起動することができます。
    • 関数呼び出しをチェインする$マクロを正式にサポートしました。 モジュールgauche.experimental.appで長らく実験されてたものです。 このマクロを使うと(f a b (g c d (h i j)))($ f a b $ g c d $ h i j)と書くことができます。文字数的には 後者の方が長いのですが、特に関数のネストが深くなった時に、 後者の方がインデントしやすいことが多いです。 マニュアルに詳しい説明があります。
    • goshにオプション-m moduleが追加されました。 この指定があると、プログラムのエントリポイントである main手続きを、デフォルトのuserモジュールではなく 指定されたモジュール内で探します。この機能は、一つのファイルを ライブラリモジュールとしても実行可能なスクリプトとしても使うことを 可能にします(例えば、スクリプトとして実行した場合にテストやデモを 走らせる等)。テストプログラムをmainという名前にして、 それをexportしないでおきます。ライブラリとしてuseした場合には そのmain手続きは見えないので何の影響も与えません。 一方、goshを-mオプションで起動すればmain 手続きからプログラムを実行することができます。
  • 非互換な変更
    • util.queue: 容量(max-length)がゼロの スレッドセーフキュー(mtqueue)を作れるようになりました。 同期デバイスとして便利です。以前のバージョンでは :max-lengthに0を渡すと「容量制限なし」を意味していたので、 これは非互換な変更となります。 (Cf: Queue of zero length).
    • 正規表現の先頭/末尾アサーション (^, $) が (?=...)等のアサーショングループの中で認識されていなかった バグを修正しました。先頭/末尾アサーションに関しては、 アサーショングループ自体がスタンドアロンであるかのように解釈されます。 これはPerlや鬼車の動作と同じです。しかし、以前の(バギーな)動作に 依存しているプログラムは動かなくなるかもしれません。
    • gauche.auxsysモジュールが無くなりました。 このモジュールはいくつかのシステム手続きを含んでいて、これまでオートロード されていたのですが、本バージョンからコアに統合されました。ほぼ影響は 出ないと思いますが、何らかの事情でこのモジュールを明示的に読み込んでいる 場合は、その部分を削ってください。
  • 改善
    • 頻繁に使われるリスト手続きの多くをコアでサポートしました (util.listの全て、及びsrfi-1の多く)。 util.listはもう必要ありません。互換性のためにダミーモジュール は残してありますが。srfi-1からは次の手続きがコアに移されています。 null-list?, cons*, last, member (extended one), take, drop, take-right, drop-right, take!, drop-right!, delete, delete!, delete-duplicates, delete-duplicates!, assoc (extended one), alist-copy, alist-delete, alist-delete!, any, every, filter, filter!, remove, remove!, filter-map, fold, fold-right, find, find-tail, split-at, split-at!, iota.
    • 新たなマクロと手続き:values->list, fold-left, regexp-num-groups, regexp-named-groups.
    • procedure?よりもより的確に 「適用可能かどうか」を調べられる手続き applicable?が追加されました。 またそれに関連して、全てのクラスのサブタイプとなる <bottom>クラスがサポートされました。
    • ソースツリー外からのビルドが可能なようにビルドプロセスを直しました。
    • 正規表現エンジンを少し改良しました。例えば、正規表現の ブロックごとに、先頭にマッチし得る文字のセットを持ち、 繰り返し等はそれを使って高速にスキャンすることで、特に長い入力に対して 性能を改善しています。
    • thread-terminate!が、強制的にスレッドを殺す前に いくつかより穏便な方法を試すようになりました。
    • open-input-file:encoding引数に #tを渡すことで、コーディング認識ポートを使ってファイルを 読ませることができるようになりました。コーディング認識ポートは ファイルの最初の方にあるcoding: ...という文字コード指定を 認識します。ソースファイルを処理する場合などに便利です。
    • mapが再スタート可能、すなわち、途中で保存した継続を 再起動した場合に、以前の結果に影響を与えないようになりました。 これはR6RSで要求されている動作です。
    • コンパイラと、VMのスタックレイアウトにいくつか改善を施しました。
    • gauche.test: test-moduleが、グローバルな 手続き呼び出しの引数の数の整合性をチェックするようになりました。 うっかりミスを検出するのに役立ちます。もし、グローバルな定義と 矛盾する呼び出しを意図的にしているコードがある場合は、 :bypass-arity-checkキーワード引数に引っかかる関数名の リストを渡してください (言語の動的な性質から、誤検出の可能性は常に あります。例えばシグネチャの異なるメソッドが後から足されるかもしれません)。
    • gauche.test: test-endに、テストが失敗した 場合に非ゼロの終了ステータスでプロセスを終了させるオプションを追加しました。 また、新しい手続き test-summary-checkによって、それまでのテスト結果ファイルを 調べて失敗があれば非ゼロステータスでプロセスを終了させることもできます。 これらは、テスト失敗を上位層 (継続ビルドサーバなど) に伝えるのに 便利です。
    • srfi-42: gauche.generatorの意味でのジェネレータ 手続きをソースとして使うための:generator qualifier を追加しました。
    • file.util: touch-filetouch-files が、touch(1)コマンドに似た色々なキーワード引数を取ります。
    • rfc.http: パラメータhttp-proxyによって デフォルトのhttp proxyを指定できます。また、https接続に、 外部のstunnelコマンドでなく Gauche自体がサポートするライブラリを使うようになりました。
    • GCのバージョンを7.2-alpha6にしました。
  • バグフィクス
    • 非正確数が与えられた時にdivmodが妙な丸めを していたのを修正しました。
    • /.で、除数と被除数共にIEEE浮動小数点数で表現できないほど大きな 数が与えられた場合に動作がおかしかったのを修正しました。
    • 準クオート展開ルーチンがunquoteunquote-splicingを 健全に扱うようになりました。
    • forceがスレッドセーフでなかったのを修正。
    • ファイルのロード、requireにスレッドセーフでない箇所がいくつかありました。 バグを追いかけてくれたKirill Zorin氏に感謝。
    • (regexp-compile '(alt))がBus Errorになっていたのを修正。
    • 大文字小文字を区別しない正規表現がASCIIを越えた文字について動かなくなって いたのを修正。OOHASHI Daichi氏のパッチです。
    • gauche.parameter: 関係の無いスレッドで作られたパラメータを 使おうとするとこれまではエラーになっていましたが、 autoloadのタイミングによって意図せずそういう状況が発生することがあり、 あまり嬉しくないので、どのスレッドで作られようがパラメータはグローバルに 使えるようにしました。
    • rfc.json: JSON生成ルーチンが不正なJSONを作ることがあるバグを修正。
    • rfc.http: 3xxレスポンスに対するリダイレクトの動作を 規格にそったものにしました。また、その動作をカスタマイズすることも可能です。
    • gauche.threads: thread-sleep!に正確な非整数有理数 が渡された場合の動作がバグってました。
    • util.stream: stream-countが動作していませんでした。

2011/8/6

Gauche 0.9.2とGauche-gl 0.5.1をリリースしました。

Gauche 0.9.2:

  • 新機能
    • 文字のケースマッピングとプロパティをUnicode準拠にしました。 R6RSおよび、R7RSの現在のdraftと互換なはずです。 文字単位のケースマッピング(char-upcase等)と、 プロパティの問い合わせ (char-alphabetic?, char-general-category等)は組み込みです。 文脈を考慮した文字列のケースマッピング(string-upcase等)は、 新たなモジュールtext.unicodeにて提供されます。 (srfi-13の提供するstring-upcase等は 変更されません。それらは文字単位のマッピングを使うと定義されているからです。) text.unicodeモジュールはまた、 utf-8/utf-16とUnicodeコードポイント間の変換ユーティリティ等も 提供します。
    • Windowsバイナリを、 WiXを使って作成した MSインストーラ (*.msi) 形式に変更しました。 以前の、NSISによる*.exe形式のインストーラは、 ウィルスと誤判定されたり、PATHが長い場合にその内容を壊してしまうなど 問題がありました。
    • スレッド間の排他制御を書きやすくするラッパーatomgauche.threadsに実装しました。 (参照)
    • PerlのBenchmarkモジュールに似たベンチマークユーティリティが gauche.timeで使えます。 (参照)
    • with-lock-file: 長らく要望されていた、ロックファイルを 簡単に使うためのマクロができました。file.utilモジュールにあります。
    • 整数のビット演算に関するsrfi-60をフルサポートしました。
    • gauche.cgen: Gauche自身がCのソースを生成する際に使っている 機能(の一部)を公開APIとしました。詳しくはマニュアルを参照してください。
  • 非互換な変更
    • control.thread-pool: add-job!はタイムアウト 引数を取れるようになりました。それに伴いデフォルトの動作が変わっています。 タイムアウト引数が省略され、ジョブキューがいっぱいの場合、 add-job!はブロックします。0.9.1では add-job!はタイムアウト引数をとれず、キューがいっぱいの場合は 直ちに返っていました。0.9.2で同じ振る舞いにするには、タイムアウト引数に 0を渡してください。 また、wait-allもタイムアウト引数を取れるようになり、 オプショナル引数の順序が変更されています。0.9.1ではwait-allは 決してタイムアウトしませんでした。
    • ./configureに、 --enable-multibyteフラグがエンコーディングの指定なしで 与えられた場合、utf-8とみなされます。0.9.1までは euc-jpになっていました。マルチバイトフラグを全く指定しない 場合のデフォルトがutf-8なので、それと一貫性を持たせるための 変更です
    • 同じく./configureで、 --enable-ipv6オプションがデフォルトで有効になります。 現代のOSでこれが問題になることはほとんど無いと考えています。 古いOSでコンパイルしようとしたときに、gauche.netで エラーが出るかもしれません。その場合は --disable-ipv6を指定してconfigureしてください。
    • (以降はドキュメントされていない非公式な機能の内部的な変更です。 拡張パッケージでこれに依存しているものがあるかもしれないので言及しておきます。) genstubprecompで生成されるCコードの 初期化ルーチンにて、以前は現在のモジュールを modという変数で参照できましたが、 今バージョンからはScm_CurrentModule()を使う必要があります。 また、gauche.cgen.unitが生成するコードは <gauche.h>を自動的にインクルードしなくなりました。
  • 改善点
    • コンパイラは、環境を綴じ込まないローカル関数を見つけると実行時に クロージャを作らないコードを出すようになりました。例えば (map (^x (* x x)) lis)は実行時にクロージャを作らず、 内部のラムダ式はトップレベルで定義されたかのようにコンパイルされます。 (ごく基本的なラムダリフティングなんですが、これまでコンパイル速度の 低下を避けるためやっていませんでした。今やコンパイラが十分速くなったので、 やるようにしたということです。)
    • R6RSに定義されるように、ゼロ引数や複数引数のunquote/unquote-splicingを サポートします。
    • sys-execsys-fork-and-execは、 現在のプロセスグルーブから離れた子プロセスを生成するための :detachedキーワード引数を取れるようになりました。
    • 組み込みのreversereverse!は省略可能な list-tail引数を取ります。
    • ドットリストも扱える、新しい組み込み関数map*
    • Common Lisp風のecaseマクロ。
    • 拡張ラムダ引数 (:key, :optional等) がdefine-methodでも使えるようになりました。
    • 新組み込み関数sys-clearenv。子プロセスを作る際の セキュリティリスク軽減に使えます。
    • rxmatch-caseは、caseと同様に (else => proc)を認識します。
    • ソケットアドレスオブジェクト(<sockaddr-un>等)が、 equal?で内容を比較できるようになりました。 ハッシュテーブルに入れる時などに役に立ちます。
    • gauche.uvector: uniform vectorの型に関わらず コピーができるuvector-copy!を追加。
    • gauche.test: 「いくつかの期待した値のうちのどれかになる」 という条件を表す期待値コンストラクタ test-one-of を 追加しました。
    • control.thread-pool: 既にシャットダウンが要求 されたスレッドプールにジョブを追加しようとすると、 <thread-pool-shut-down>コンディションが 投げられるようになりました。 terminate-allは新たなキーワード引数 :cancel-queued-jobsを受けつけ、 既にキューに入っているジョブをすべて終えてからプールをシャットダウンするか、 それらをキャンセルするかを選べます。ジョブがキャンセルされた場合、 その結果はkilledとマークされます。 新たなAPI: thread-pool-results, thread-pool-shut-down?
    • rfc.json: 一貫性のため、construct-jsonは 省略可能な出力ポートを取れるようになりました。
    • rfc.uri: 相対URIをベースURIをもとに解決する手続き uri-mergeが追加されました。
    • rfc.cookie: RFC6265で導入された:http-only クッキーアトリビュートが使えるようになりました。
    • sys-normalize-pathnameのチルド `~' 展開が Windowsでも(現在のユーザのホームディレクトリを展開する場合に限り) 動作するようになりました。いくつかの典型的な環境変数を探して ホームディレクトリを判定します。他のユーザのホームディレクトリを指す ~userという形式はまだUnixでしか使えません。
    • util.combinations: combinationsが 高速化されました。
  • バグフィクス
    • 2.2250738585072012e-308を読むと数値パーザがハングする問題を修正しました。
    • 整数乗算ルーチンに、Cの未定義動作に依存したコードがありました。 gccでは動作していましたが、clang-llvmで問題が表面化しました。
    • 特定の方法でモジュールをextendした際にシンボルの可視性にバグ がありました。
    • gauche.parameter: パラメータオブジェクトに関するいくつかのバグの修正。
    • 数値比較関数<等が、最適化のミスにより5つ以上の引数を与えたときに 誤動作するバグがありました。
    • lognot, logand, logior logxorに非整数な有理数を与えるとクラッシュするバグがありました。
    • port->string, port->string-list: 入力に文字として不正なバイト列があった場合に、入力のすべてを 読まずに返ってしまうバグがありました。今はそのような場合にも 最後まで読んで不完全文字列を返します。
    • srfi-1: いくつかの、既に組み込みになっているsrfi-1関数が exportされていなかったため、onlyインポートオプション等を使った場合に エラーになっていました。例: (use srfi-1 :only (fold)).
    • util.queue: list->queue を動くように修正。
    • binary.pack: 入力に文字として不正なバイト列があるとき、 途中までしか入力を読まない場合があったのを修正。
    • srfi-42: 健全性のバグを修正。以前のバージョンでは、 トップレベルマクロだけを:onlyでインポートした場合に 問題が出ていました。
    • rfc.json: 文字列のダブルクオートの扱い、および 空の配列が生成できない問題を修正。
    • 行末がCRのみやCRLFの形式のファイルでコーディング認識ポートが 行数を正しく数えていなかた問題を修正。
    • クラスメタオブジェクトのメタクラスを変更するとクラッシュ する問題を修正しました。また、クラスメタオブジェクトの内容を 不用意に変更すると同様の問題が発生する可能性があるため、 初期化時以外にクリティカルなスロットの内容を変更できないように しました。
    • sys-setenvで、overwrite引数が省略可能と ドキュメントされているのに省略できなかった問題を修正。
    • Solarisでgauche.netのビルドに問題があったのを修正。
    • *load-path*に存在しないディレクトリがあると、 gauche-packageがエラーになっていました。
    • 特定のアーキテクチャで 文字列比較が動作しない問題がありました。
    • <time>オブジェクトの表示が、負の値を持つ場合におかしかったのを修正。
    • ().()をリーダが正しく読んでいなかった問題の修正。
    • formatで、~*が最後の引数の次を指す (引数をすべて飛び越す)ことを許しました。
    • OSX Lionでgcがコンパイルできない問題の修正。

Gauche-gl 0.5.1: Gauche 0.9.2でコンパイルできるようにする小さな修正。

2011/3/1

開発用リポジトリをSubversionからGitに切り替えました。 チェックアウトやブラウズの方法についてはダウンロードのページを 参照してください。

2010/12/25

Windowsインストーラによるインストールの際に、Gaucheのパスを追加した結果のPATHが ある長さを越えると、PATHの内容が破壊されるという問題が報告されました。 (これはNSISで報告されている問題のようです。Winampフォーラムの類似事例。) PATHの内容が既に1000文字に近い場合は、Gauche-mingw-0.9.1.exeによるインストールを 避けてください。現在対応策を考えています。

2010/12/12

gauche-configに、 拡張ライブラリのインストールに影響を与えるバグを見つけました。 0.9.1のリリースパッケージはfixされたものに置き換えられています。 既にダウンロードしてしまった方は、お手数ですがmd5sumをチェックしてください。 以下が最新版のmd5sumです。

  6134e9c16aef2bc9fd3fa7e8fbebdd10  Gauche-0.9.1.tgz
  dce3a5f438506bfcbb63687e2debdeb1  Gauche-mingw-0.9.1.exe

2010/12/11

Gauche 0.9.1: 大きな機能拡張

  • 新規機能
    • 仮引数リストの拡張: 組み込みのlambdadefine等が、Common Lisp風の オプショナル引数やキーワード引数指定を認識します。 例えば、次のように書くかわりに:
       (define (foo x . args)
         (let-optionals* args ((y 0) (z 2)) ...))      
      
      こう書けます:
       (define (foo x :optional (y 0) (z 2)) ...)
      
      詳しくはマニュアルのlambda の項を参照してください。 ポータブルなコードを書いていて、うっかりこの記法を使ってしまうことを避けたい なら、gaucheモジュールのかわりにschemeモジュールで 提供される構文束縛を使えば、これらの記法はコンパイル時にエラーになります。 この記法の導入の経緯についてはExtended formalsもご覧ください。 (注: 今のところ、define-methodの引数リストに 拡張引数リスト記法は使えません。なるべく早く直したいと思っています)。
    • モジュール機能の拡張: モジュールをインポートする際に、 インポートするシンボルを選択したり、リネームしたり、プレフィクスを 付けることができます。マニュアルの"Using modules"の章を参照してください。 設計上の選択と実装の詳細については、 Import options: part oneImport options: part twoに説明してあります。
    • 効率的なレコード型: 新しいモジュールgauche.recordにより、ERR5RS (srfi-99) 上位互換のレコード型が提供されます。これはまたsrfi-9レコードの上位互換でも あります。(参考: ERR5RS records and beyond).
    • マルチスレッドアプリケーションのサポートの強化: util.queueモジュールにスレッドセーフキューが追加されました (cf. Enhanced queue)。また、control.thread-poolによって スレッドプールが提供されます。 継続をスレッドをまたいで受け渡すことができるようになりました。次項参照。
    • 部分継続: 部分継続 (限定継続) が gauche.partcont モジュールで提供されます。また、あるスレッドで捕捉された継続や部分継続を 別のスレッドで起動することができるようになりました。 もし通常の継続が別スレッドで起動された場合、その継続が捕捉元のスレッドの コンテキストにreturnしようとした時点でエラーとなります (参考: Partial continuations and a fun of stack fiddling).
    • Windowsサポートの強化: MinGW/MSYSビルドでは、通常のgosh.exeに加え、 非コンソールアプリケーションのgosh-noconsole.exeが 作られます。後者を使えば、Windows上で 新しいコンソールウィンドウを開かずにGaucheスクリプトを走らせることができます。 Windowsバイナリインストーラを使った場合、 *.scmファイルがgosh-noconsole.exeに 関連づけられます。 Windowsバイナリインストーラにはまた、Gauche-glもデフォルトで含まれます。 例がC:\Program Files\Gauche\examplesにインストールされるので 参照してください。 また、Windows特有のインタフェースを提供する os.windowsモジュールが追加されました。 今のところMessageBoxとWindowsコンソールAPIが提供されていますが、 徐々にサポートを増やしてゆく予定です (WindowsコンソールAPIは以前gauche.termiosで提供されていましたが、 os.windowsに移されました)。 さらに、gauche-package compileコマンドが MinGW/MSYS環境でも動作しやすいように改善されました。 run-process (gauche.process)のdirectory キーワード引数もWindows上で動きます。
    • 新モジュール: crypt.bcrypt: Blowfishパスワードハッシュを提供します。
    • 新モジュール: srfi-98: ポータブルな環境変数の参照。
    • 新モジュール: gauche.mop.propagate: オブジェクトのコンポジションを 簡単にします。
    • 新モジュール: rfc.json: JSONのパーズと構築。
  • 変更
    • 0.9.x系列でバイナリ互換性を保証しやすくするために、 Gaucheをインストールするディレクトリ構造を変更しました。 New directory structureに詳細があります。 0.9でインストールしたGauche拡張モジュールは、 0.9.1でも再コンパイルや再インストールなしで使えるはずです。
    • calleeが期待していないキーワード引数を渡すとエラーになるようになりました。 以前は警告でした。
    • 正規表現 re{,M}re{0,M} と同じ意味になりました。 これは鬼車と互換です。以前はPerlと互換、つまり re{,M} は 特別な意味を持たず、文字通りにマッチしていました。 現在のバージョンで、正規表現reに続き 開きブレース、コンマ、数字、閉じブレース、という 文字列にマッチさせたい場合は re\{,M} としてください。
  • 改善
    • コンパイラとランタイムの最適化を進めました。 コンパイラは組み込み手続きの性質についてより多くの知識を持っていて、 コンパイル時定数畳み込みやインライン展開をよりアグレッシブに行います。 (参考: Some improvements of constant propagation). 例えば、sxml.ssaxの速度はかなり改善されました。
    • ^lambdaの別名として使え、コードがよりコンパクトに 書けます。一変数の場合をさらに短く書けるマクロ ^a, ^b, ... ^z, ^_ もあります。 (参考 : Shorter names)
    • 万能アクセサ~が導入されました。 (~ x y)(ref x y)と同じ、 (~ x y z)(ref (ref x y) z)と同じになります。 一般化されたset!の左辺値としても使えます: (set! (~ array i) x). 詳しくはマニュアルの "Universal accessor" の節を参照してください。
    • define-syntax, let-syntax, letrec-syntaxが拡張され、右辺値に 構文変換器を返す任意の式が書けるようになりました。 これはsyntax-rules以外のさまざまなマクロ変換器を サポートする準備です。他のマクロ変換器はこれから徐々に提供してゆく予定です。 参考: Supporting general transformers: Step 1.
    • gauche.process: run-processのI/Oリダイレクト指定がより柔軟になりました。 参考: More control on redirection in run-process.
    • rfc.httpモジュールがhttpsコネクションをサポートします (今のところunix限定)。 コネクション自体は外部プログラム(stunnel) に依存します。
    • 新しい手続きcurrent-load-pathによって、プログラムの ロード中にプログラム内でそのロード元のファイルパス名を得ることができます。
    • 新しい手続き.$composeの別名として使えます。
    • 正規表現がread-write invariantになりました。 また、正規表現の内部をいじる関数を公開し、プログラムによって正規表現を 組み立てたり解析したりできます。 マニュアルの"Inspecting and assembling regular expressions" の節を参照してください。参考:Regexp read-write invariance
    • rfc.822: 新しい手続きrfc822-date->date
    • file.util: 手続きtemporary-directory をパラメータにしました。必要に応じて動的に切り替えられます。また、 そのデフォルト値に(sys-tmpdir)を使います。これは プラットフォームごとに推奨される方法で一時ディレクトリを決定します。 Windowsネイティブ環境でもちゃんと動きます。 home-directoryもWindowsでちゃんと動くようになりました。 UnixとWindowsで共通するスクリプトを書きやすいように、手続き null-deviceconsole-deviceも追加されました。
    • util.queue: 新しい手続き:any-in-queue, every-in-queue
    • gauche.parseopt: let-args が引数仕様にないコマンドライン引数に出会った場合、 これまでの<error>ではなく <parseopt-error>を投げます。アプリケーションは それを捕捉することで不正なコマンド引数の処理が書けます。
    • gauche.uvector: 新しい手続き: uvector-size。 uvectorの種類にかかわらず、write-blockで書き出されるであろう オクテット数を得ることができます。
    • dbm: 新しい手続きdbm-type->class によって、 実行時に必要なdbm実装を選んでロードできます。 また、dbmデータベースの簡単なバックアップや移動を行うためのユーティリティ スクリプトdbm/dumpdbm/restoreを用意しました。 マニュアルの 記述を参照してください。
    • 手続きslot-pop!を追加しました。他の *-push!/pop! APIペアとの一貫性のためです。
    • refでオブジェクトのスロットをアクセスする際に、 スロットが未束縛であった場合のデフォルト値を指定できるようになりました。
    • (set! (ref list k) value)が動作するように なりました。
    • 新手続き:delete-keywords, delete-keywords!, tree-map-map, tree-map-for-each.
    • unwind-protectがCLと同様、複数のハンドラを許します。
    • sqrtは、引数が正確数であり結果も正確数で表現可能なら、 正確数で結果を返します。R6RSのexact-integer-sqrtも追加されました。 参考: Exact sqrt.
    • gauche.parameter: パラメータも一般化されたset!の 右辺値に使えます。
    • パラメータdefault-endianbinary.ioから本体に移され、バイナリ入出力を 行うルーチン一般で参照されるようになりました。 例えばgauche.uvectorread-block!write-blockは このパラメータの値をデフォルトに使います。 プラットフォーム本来のエンディアンを知るには 新しい手続きnative-endianが使えます。
    • R6RS手続きの追加: inexact, exact, real-valued?, rational-valued?, integer-valued?, div, mod, div0, mod0.
  • バグフィクス
    • ARMプラットフォームのいくつかで、倍精度浮動小数点数のアラインメントと エンディアンのためにSEGVを起こしていたバグを修正しました。
    • rfc.http: メッセージボディのない204や304レスポンスを 受け取った時に、http-get等がボディを読もうとして止まってしまうバグ、 http-get等に渡したキーワード引数がリクエストに余分なヘッダフィールド として送られてしまうバグを修正しました。 また、mimeエンコーディングルーチンが content-transfer-encodingをちゃんと使うようになりました。
    • www.cgi: mime処理コード中、content-disposition ヘッダの値がクオートされていない場合にパーズに失敗するバグを修正しました。 クライアントによってはフォームのPOSTで問題が出ていました。
    • util.match: 必要な識別子がexportされていなかったために match-let*が動作しませんでした。 また、特定のパターンについてmatchの展開に指数時間がかかってしまう 問題を修正しました。
    • tree-map-pop-min!がエントリ数を更新していませんでした。
    • globで、パス途中の完全に指定されたディレクトリが unreadableだけれどsearchableである場合 (mode bitsが--x である場合) に失敗する問題を修正しました。
    • VMの実装コードにCのstrict aliasing rule違反箇所があり、特定の コンパイラで意図しない最適化が行われる問題がありました。 この微妙なバグはg新部氏により発見・修正されました。
    • 組み込みの数値比較オペレータが、引数にNaNが渡された場合に 正しい結果を返していませんでした。また16ビット浮動小数点数 (f16) でNaNがきちんと実装されていませんでした。
    • char-set-complementが、入力の文字セットに 1文字分の隙間がある場合に誤動作していました。
    • gauche.net: システムのIPv6ソケットのデフォルト動作が デュアルスタックの時、make-server-socketsは 自分でもIPv6とIPv4両方のソケットをバインドしようとして失敗して いました。
    • gauche.dictionary: <bimap>に コレクションプロトコルが実装されていませんでした。
    • gauche.collection: <tree-map> のビルダーが:sizeキーワード引数を許すようになりました。 これがないと、(coerce-to ...)とした 時に問題我出ます。
    • write(cdr #1='#1#)を出力しようとすると 無限再帰に陥ってSEGVする問題がありました。
    • rational?は引数が +inf.0-inf.0+nan.0 である場合に正しく#fを返すようになりました。 realなのにrationalでない数値はこの3つのみです。
    • with-signal-handlersがハンドラを意図せず SIG_DFLにリセットしてしまう問題がありました。 Enami氏提案のソリューションを実装しました。
    • srfi-19新たなうるう秒を反映しています。
    • sxml.sxpath: txpathsxpathに対する本家のバグフィクスをいくつか反映しました。
    • rfc.ftp: コンディション型 <ftp-error> がドキュメントされているにもかかわらずexportされていませんでした。
    • 文字名を指定する文字リテラルが、名前のプレフィクスだけでも 認識されるというバグがありました。

Gauche-gl 0.5

  • MinGW/MSYSでも簡単にビルドできるようにしました。 また、Windowsバイナリインストーラにはfreeglutをスタティックリンクした Gauche-glも含まれます。
  • 複数のGLウィンドウがある時にウィンドウ毎にGlutのコールバック手続きを 設定できるようになりました。
  • モジュールgl.simple-imagegl.simple.imageに改名しました。また、新たな gl.simple.viewerモジュールでカメラコントロールを持つ単純な 3Dビューワのスケルトンを提供しています。
  • gl-active-texture, gl-client-active-texture, gl-indexを追加しました。
  • gl.math3dモジュールに以下の手続きを追加しました: vector4f-norm, vector4f-mul, vector4f-mul!, vector4f-div, matrix4f->translation, matrix4f->translation!, f32vector->matrix4f! vectors->quatf, vectors->quatf!, axes->quatf, axes->quatf!, quatf-conjugate!, quatf-set4!.
  • gl-tex-image-2dはテクセル配列に#fを取れるように なりました。その場合、テクスチャメモリは確保されますが初期化は行われません。 そのテクスチャメモリをターゲットとしてレンダリングする場合に便利です。

2010/02/01

Gauche 0.9のWindowsバイナリ配布ファイルが、いくつかのアンチウィルスソフト の経験的検出アルゴリズムによって"Dropper"タイプのウィルスと判断されるようです。 SourceForge.netに現在上がっているバイナリは常にウィルススキャンされている開発者の マシンで作成されたもので、これは誤検出であると考えています。念のためオリジナルの バイナリパッケージのmd5を掲載しておきます。

5801c5a91a8e1c09e0a4b1ec30d37dee        Gauche-mingw-0.9.exe
0a1470b3a96e658c8e3c812aca880ffd        Gauchebox-0.9-box1.exe

2009/11/22

Gauche 0.9: 大きな機能拡張

  • C APIの非互換な変更: C APIのいくつかが変更されたので、Cで書かれた拡張モジュール が今のままではコンパイルできないかもしれません。 API Changes in 0.9 を参照してください。
  • 新しい機能
    • 新しいモジュール: rfc.zlib: Zlibによる圧縮/展開。
    • 新しいモジュール: rfc.sha: SHA2のサポート。 rfc.sha1はこのモジュールによって置き換えられます。
    • 新しいモジュール: util.sparse: メモリ効率の良い trieを用いた疎なベクタと、それをバックエンドにしたハッシュテーブルの 実装。ハッシュテーブルに数千万のエントリを保持して置きたい場合は 組み込みのハッシュテーブルよりもメモリ効率が良いです。
    • Autoprovide機能: 大抵の場合において、 'provide'を書く必要がなくなりました。 (require "X")X.scmをロードすることに成功し、 その中にprovideフォームが無かった場合、"X"というfeatureが 自動的にprovideされます。マニュアルの 「requireとprovide」 を参照してください。
    • モジュールgauche.test: 例外をテストする方法が改善されました。 特定のコンディションタイプの例外が上がることを、期待される値に (test-error condition-type) を与えることで検査できます。より詳しくは マニュアルのエントリをどうぞ。
    • モジュールrfc.http: httpプロキシを:proxy キーワード引数で指定できるようになりました。 また、フォーム引数を送信するための application/x-www-form-urlencodedmultipart/form-data形式のメッセージを簡単に構築できるようになっています。 手続きhttp-puthttp-delete追加されました。
    • モジュールrfc.mime: MIMEメッセージ構築のための手続きが 追加されました。
    • モジュールgauche.threads: 新手続き thread-stop!thread-cont!thread-state
    • モジュールgauche.termios: Windowsネイティブ版では、 このモジュールはPOSIX termiosの代わりにWindows Console APIを 提供します。POSIX termiosをWindowsでエミュレートするのはとても面倒だからです。 どちらのプラットフォームでも共通して使える高レベル手続きも提供されます。
    • モジュールgauche.dictionaryに汎用的な双方向マップ <bimap>が追加されました。
    • gauche.processモジュールのrun-process、 および組み込みのsys-execsys-fork-and-execで、 :directoryキーワード引数によって 実行されるプロセスのワーキングディレクトリを指定できます。
    • モジュールfile.utilに新関数create-directory-treecheck-directory-treeが追加されました。
    • モジュールgauche.netに低レベルソケット操作関数 socket-sendmsgsocket-buildmsgsocket-ioctlが追加されました。また、 Call-with-client-socketがソケットポートのバッファリングモード を指定するキーワード引数を取れるようになっています。
    • モジュールwww.cgi: cgi-mainは標準エラー 出力のバッファリングモードをlineにセットします。 これによってhttpdのログが見やすくなるでしょう。
  • 重要な修正と改善
    • OSX 10.6 (Snow Leopard)上でのビルドが失敗していたのを修正。
    • 浮動小数点数演算、組み込み手続きのオプショナル引数の処理、 およびcase-lambdaの呼び出し処理性能が大幅に改善されています。
    • R6RSで空白と定義されている全ての文字がソースコード内で空白と 認識されるようになりました。例えば全角スペースも空白扱いです。
    • スレッドがエラーで終了し、他のスレッドにthread-join!される ことなくGCされた場合に警告を出すようになりました。これは問題解決に便利です。 スレッドがエラー終了したことを確認するには、他のスレッドが thread-join!を発行するしかありません。したがって、 スレッドプログラミングでは常に、thread-join!でチェックするか、 スレッドのthunk内でエラーを捕捉して適切な処理をするようにしてください。
    • 無名モジュールの名前は、以前はシンボル|#|でしたが #fに変更されました。「無名」なのでこちらの方がふさわしいでしょう。
    • シンボルの扱いの拡張: 「インターンされない (uninterned)」シンボルを 正式にサポートします (gensymで生成されたシンボルはこれまでも uninternedでしたが、はっきりドキュメントされていませんでした。) uninternedなシンボルはCommonLisp風に#:symbolと表記されます。 uninternedシンボルは、内部のシンボルテーブルに登録されないため、 名前がたまたま同じになっても実体が衝突する心配がありません。 同一のuninternedシンボルをソースの別々の箇所から参照する唯一の方法は srfi-38記法 (#n=#n#)を使うことです。 uninternedシンボルは string->uninterned-symbolで作ることができ、また シンボルがinternされているかどうかはsymbol-intened?で 調べられます。また、新しい手続きsymbol-sans-prefixが 追加されています。
  • Windowsサポート
    • Windows用のコンパイル済みバイナリインストーラが提供されます。 Gauche-mingw-0.9.exeをダウンロードしてください。 Windows NTアーキテクチャ上で動作します (Win9xはサポート外とさせてください)。
    • プリコンパイルバイナリには(今のところ)スレッドサポートとgdbmインタフェースは 含まれていません。utf-8エンコーディングでコンパイルされています。
    • Unix特有のシステム関数はサポートされないか、Windows APIでエミュレート するために多少違った動作をします。関数がWindowsでサポートされていない場合は リファレンスマニュアルにその旨示してあります。Windows版はまだあまり 使い込まれていないので、バグが結構残っているかもしれません。
    • Windows Console上でASCII以外の文字を使うのはかなり不便です。 インタラクティブな用途では、できるだけgoshをEmacsから使う ことをおすすめします。より詳しい情報は WindowsConsoleを 見てください。

2008/10/6

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

  • バグフィクス
    • applyに渡した引数リストがコピーされないケースがありました。
    • いくつかのプラットフォームで、sigsetjmpの仕様の違いから 例外ハンドル後にスレッドのシグナルマスクが おかしくなるという現象がありました。
    • formatは、フォーマット文字列中に不正な'~'を含んでいる 場合にエラーを通知するようになりました。
    • パラメータ(gauche.parameter)処理の内部コードで、 アロケートするメモリ量が充分でない場合がありました。
    • dynamic-loadがデッドロックや内部状態をおかしくする バグを修正しました。
    • rfc.httpで、リダイレクト後に'host'フィールドがおかしくなる バグがありました。
  • R6RS風の拡張
    • R6RSにあるリーダディレクティブ #!r6rs#!fold-case#!no-fold-case が認識されるようになりました。 後者2つはソースコードの途中で大文字小文字を区別するかどうかをリーダが 切り替えることを可能にします。詳しくはマニュアルを参照のこと。
    • 追加されたコア手続き: finite?, infinite?, nan?, eof-object.
    • 2引数版の log: (log z b)b を底 としたzのlogarithmになります。
  • 拡張のビルドに関する改善
    • gauche-configスクリプトに--rpath-flag オプションが追加され、プラットフォーム特有のrpathリンクオプション (例:"-Wl,--rpath -Wl,") を取り出せます。
    • gauche-packageスクリプトの'compile'と'install' コマンドに--localオプションを与えることで、サイト固有の ローカルなインクルードパスやライブラリサーチパスを与えることが 容易になりました。 gauche-package compile --local=DIR package.tgz とすると、オプション-IDIR/include-LDIR/lib がそれぞれコンパイル時とリンク時のオプションに追加されます。 二つ以上のディレクトリを与えるには--local=DIR1:DIR2:...と します。
    • スタブジェネレータとアヘッドオブタイムコンパイラ (Schemeコードを あらかじめVMインストラクションへとコンパイルし、Cの静的配列として 書き出す機能) が統合されました。これにより、CとSchemeを混在した コードを書くことができます。この機能はまだドキュメントされておらず、 細かい部分で仕様が変更されるかもしれませんが、好奇心が抑えられない方は ext/dbm/* などのソースを覗いてみてください。以前のリリースに比べ かなりシンプルになっています。
  • その他の改善、新しい手続きとマクロ
    • GCをBoehm GC 7.1にアップデートしました。
    • メンテナンスの容易さのためにVMの大部分を書き直しました。性能も若干 良くなっています。
    • 新しい手続き: hash-table-copy.
    • 新しいマクロ: rlet1if-let1.
    • パラメータexit-handlerによってexitの 動作をフックできるようになりました。マニュアルの「プログラムの終了」 の節を参照してください。
    • Windows上でもsys-lstatを使えるようにしました。 単にsys-statと同様に動作するというだけですが、クロスプラットフォームな コードを書くのが楽になります。
    • モジュールgauche.net: socket-shutdownの 引数に使える定数 SHUT_RD, SHUT_WR, SHUT_RDWRを定義しました。
    • モジュールfile.util: 新しい便利な手続き: copy-directory*, touch-files, remove-files, delete-files.
    • モジュールdbm.*: 一貫性のため、dbm-renamedbm-moveに改名しました (互換性のために旧名もエイリアスとして 残されます)。dbm.fsdbmに欠けていたdbm-copydbm-moveを実装しました。また、ndbm互換ライブラリ のデータベースのサフィックスがライブラリによって異なるのを configure時に判定するようにしました。
    • モジュールwww.cgi: get-mime-partsのMIMEパートハンドラに :modeオプションを追加し、セーブされるファイルの パーミッションを指定できるようになりました。
    • モジュールrfc.ip: 手続きの追加: ipv4-global-address?.

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

2007/4/18

Gauche 0.8.10: 大きなメンテナンスリリース

  • 重要な変更
    • keyword引数を扱うためのマクロ(let-keywords* および,本リリースで追加の let-keywords)に認識できないキーワードを与えると警告が出るようになりました.これまでは認識できないキーワードはただ無視されていましたが,それではタイポがあっても気付かないままになってしまいます.認識できないキーワードをこれまで通り無視させるには明示的に指定してください(Common Lispの &allow-other-keys と同じ機能ですが構文が違います.詳細はリファレンスの let-keywords の項目を参照のこと).いずれ認識できないキーワードはエラー扱いにする予定です.認識できないキーワードを無視することを想定したコードを書いていたら,早期にアップデートしてください.(stubファイルで定義された手続きも影響を受けます.後述の "C API changes" を参照のこと)
    • モジュール gauche.process について: call-with-input-process 等が,子プロセスの異常終了(非ゼロの返り値)をチェックしてコンディション <process-abnormal-exit> を投げるようになりました.これに伴いプロセスポート関連手続きのデフォルト動作が変更されており,これまで無視されていた非ゼロの返り値はエラー扱いになりました.これまでと同様の動作をさせるには手続き呼び出しに :on-abnormal-exit :ignore を追加してください.
    • モジュール gauche.process について: run-process のAPIが一貫性のために変更されました.古いAPIへの対応も続けますが,新APIへの移行をお薦めします.詳細はリファレンスを参照のこと.また run-process はkeyword引数 :host を受け付けるようになりました.これはsshを利用してプロセスを別マシンで実行します.
    • モジュール www.cgi-test の名前が www.cgi.test に変更されました.古い名前は今後も互換性のために利用できますが,新しい名前への移行をお薦めします.
    • モジュール gauche.test について:環境変数 GAUCHE_TEST_RECORD_FILE が定義されているとき,その値の名前を持つファイルにテスト関連手続きが統計データを書き出すようになりました.これはGaucheのビルド後 "make check" を実行して表示されるものと同様のものです.この機能の使い方については src/Makefile を参照のこと.
    • モジュール gauche.uvector および binary.io について: 16ビット浮動小数点数に対応しました.これは "half" などと呼ばれるもので,書式は符号1ビット,指数5ビット,仮数10ビットから成ります.
    • モジュール binary.io について:関数の名前を簡潔なものに変更しました.ユニフォームベクタとの一貫性を持つようになっています.古い名前も使えますが新しい名前に移行して下さい.
    • モジュール binary.io について:新しい仮引数 default-endian が追加されました.これにより,プログラムはデフォルトのエンディアンを選択できます.
    • モジュール rfc.uri について:手続き uri-encode-string および uri-decode-string がkeyword引数 :encoding を受け付けるようになりました.それに伴い2つの文字集合 *rfc2396-unreserved-char-set* および *rfc3986-unreserved-char-set* (RFC2396およびRFC3986で "unreserved" と定義されているもの)をエクスポートします.
    • モジュール gauche.net について:手続き socket-recv! および socket-recvfrom! が追加されました.これらは受け取ったパケットを,引数で与えられたユニフォームベクタに書き込みます(よってメモリ割り当てをしません).ユニフォームベクタは socket-send, socket-sendto および socket-setsockopt でも同様にバッファとして使えるようになりました.今後これらの手続きにおいてバッファに文字列を使うことは推奨されません.代わりに u8vector を使ってください.またクラス <sockaddr-in> および <sockaddr-in6> のインスタンス生成時にkeyword引数 :host で指定するIPアドレスにもユニフォームベクタが使えるようになりました.
    • モジュール gauche.net について: ユーティリティ inet-checksum, inet-string->address および inet-address->string が追加されました.
    • Gaucheのビルド時の指定に従い様々なfeature-id(SRFI-0で使うためのもの)が定義されるようになりました.詳細はリファレンスの "Platform-dependent features" の項目を参照のこと.
  • バグフィクス:
    • コンパイラの最適化ルーチンを修正しました.ローカル変数への参照が誤っていました.
    • 文字および文字集合の表示におけるいくつかのバグを修正しました.
    • モジュール gauche.uvector について:ユニフォームベクタ関連クラスの call-with-iterator がkeyword引数 :size を認識していませんでした.
    • SRFI-10のシャープ・カンマ式が,SRFI-62のS式単位コメントでコメントアウトされていても評価されるバグを修正しました.
    • モジュール math.mt-random において,初期化keyword引数 :send に与えた種がbignumのときに種の設定がされていなかったバグを修正しました.
    • 手続き vector-ref においてインデックスがbignumのときに必ずエラーを投げていたバグを修正しました.(vector-ref は引数 fallback に手続きが与えられていればエラーを投げない仕様です.)
    • 手続き sys-putenv のメモリリークが多くの場合で改善されました. OSで提供されていれば setenv(3) を使います.
    • モジュール rfc.http について: HTTPリクエストがリダイレクトされた際に起きるバグを修正しました.また新コンディション <http-error> が追加されました.これはコネクションの断絶やメッセージヘッダの異常を知らせるためのものです.
    • モジュール www.cgi について: Content-Length が0のときにハングアップするバグを修正しました.
    • モジュール gauche.config について: Gaucheのビルド時の設定がモジュール内に埋め込まれるようになったため,実行時に外部プログラム gauche-config を走らせる必要がなくなりました.
    • モジュール srfi-19 について: 手続き date->string の返り値の書式を ISO-8601 準拠に変更しました.
    • モジュール gauche.charconv について:文字コードが U+0080 から U+009f のUnicode文字をEUC-JPに変換したときに不正なEUC文字を返していました.
  • 新規モジュール,手続きおよびマクロ:
    • 新組み込みオブジェクト,ツリーマップ:内部で平衡木を使うことでキーに従ってソートされたマップを提供します.赤黒木(モジュール util.rbtree )はツリーマップを使って再実装されました.
    • 不正確な算術演算を明示的に行うための手続き +., -., *. および /. の追加.これらの手続きは演算の前に引数を不正確数に変換します.正確な演算が不必要だと分かっているときに便利でしょう.これらを使えば意図せずに正確な有理数演算(不正確な演算と比べはるかに遅く,ときに結果も扱い辛いものです)を使ってしまうことを避けられます.
    • 新手続き round->exact, floor->exact, ceiling->exact および truncate->exact:不正確な数から正確な整数を得たいとき,これらがあればほとんどの場合は十分でしょう.
    • 新手続き sys-fdset:クラス <sys-fdset> のコンストラクタを使いやすくしたものです.
    • 新マクロ unwind-protect: Common Lisp から輸入されました.
    • 新モジュール rfc.ftp: OOHASHI Daichiさんによるコードに基づいています.
    • 新モジュール gauche.dictionary:ハッシュテーブルとツリーマップに対するジェネリック関数を提供します.
    • 新モジュール text.progress:テキスト端末でプログレスバーを表示します.
    • 新モジュール rfc.ip および rfc.icmp.
  • C APIの変更:
    • ハッシュテーブル,文字列ポート,load および require に関連するAPIが変更されました.この変更により互換性が失われるため,デフォルトでは変更は隠蔽されています.変更点の詳細およびCによる拡張コードのアップデート方法については Gauche:APIUpdate を参照のこと.
    • Cで定義された手続き(stubファイル内で define-cproc 等を使って定義されたもの)が &keyword によりkeyword引数を取るとき,認識できないキーワードを与えられると警告を出すようになりました.認識できないキーワードを従来通り無視したい場合は引数リストに &allow-other-keys を追加してください.

2007/1/17

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

  • バグフィクス
    • 先のニュースにあるように、0.8.8にはスクリプトがエラー終了した 場合にメッセージを表示しないというバグがありました。
    • シグナルハンドリングを改定し、レースコンディションの可能性を 排除しました。Schemeシグナルハンドラ実行時に適用されるべき シグナルマスクを指定できます。これにより、ハンドラ実行中に シグナルに割り込まれる心配をしなくて済みます。また、 シグナルハンドラが呼び出される前に同一種類のシグナルを受け取る 最大回数を指定できるようになりました。同一種類のシグナルの 配送が、処理されないままにその回数を越えた場合、Gaucheは 緊急事態とみなしてプロセスをabortします。プログラムから この回数を変更したりこの機能を無効にすることができます。 詳しくはマニュアルのHandling Singalsの項を参照して下さい。
    • make-threadによって作られたスレッドは、その時点での current input/output/error portを継承するはずでしたが、 そうなっていませんでした。
    • '<', '>' で囲まれていない名前を持つエラーコンディションクラスを 投げた時に、デフォルトのエラーハンドラがSEGVするというバグが ありました。
    • C API Scm_EvalCStringが0.8.8では Scm_EvalRecCStringのように誤って綴られていました。
    • <rational>クラスが正しく初期化されていませんでした。
    • 文字列処理ルーチンの中に、割り当てられたメモリの1バイト先に アクセスしてしまうバグがありました。
    • Eqvハッシュテーブルが有理数を正しく扱っていませんでした。
    • applyがR5RSに指定されたような末尾再帰になっていませんでした。
    • クラス処理ルーチンのバグにより、いくつかのCで定義されたベースクラスを 継承してクラスを定義することができていませんでした。 例えば<port-error>を継承したコンディションを 定義する場合などです。
    • Module dbi: 旧バージョンとの互換性ルーチンにバグがありました。
    • Module gauche.process: :wait #tで起動された プログラムをアクティブプロセスリストから取り除かず、メモリリークを 生じていました。
    • Module gauche.listener: 評価中にエラーが生じた場合に リスナーから抜けてしまうというバグがありました。
    • Module srfi-19: Julian dayとmodified julian day の計算を非正確数に戻しました。正確な有理数計算のオーバヘッドを 避けるためです。
  • その他の改善:
    • Slib 3a4をサポートしました。
    • srfi-61srfi-87 をネイティブにサポートしました。
    • define-condition-typeは、スロットに :init-keywordオプションを自動的に付加するようになりました。 これによって、例えばerrorなどの手続きで独自のコンディション を簡単に初期化できるようになります。
    • substringrxmatch-substrinc等のルーチンで、 長いマルチバイト文字列を扱う際の性能が向上しました。
    • inexact->exactはNaNやinfiniteが渡された場合に エラーを報告します。
    • 新しい手続き: sys-sigwait, sys-fchmod.
  • C APIの互換性:
    • Scm_EvalScm_EvalCStringScm_Applyの各APIの変更のための猶予期間を延長します。 これらの手続きはデフォルトではマクロで正式なAPIである Scm_EvalRec等に展開されます。拡張モジュールの作者は 早めにScm_Eval等を"Rec"付きAPIへの呼出しへと 変更してください。猶予期間が過ぎた後は、 Scm_EvalScm_EvalCStringScm_Applyはシグネチャの異なる新しいAPIとなります。 今から新しいAPIを試すには、gauche.hをincludeする 前にcppシンボルGAUCHE_API_0_8_8を定義して下さい。

Gauche-gl 0.4.3: メンテナンスリリース。GLUオブジェクトのファイナライザの バグを修正しました。

2006/11/18

Gauche 0.8.8についての重要なパッチ: Schemeスクリプトが捕捉されないエラーを投げた場合に、goshが エラーの報告を出力せずに黙って終了するというバグがありました。 問題を解決するには、次のメッセージに含まれるパッチを当てて下さい。 http://sourceforge.net/mailarchive/forum.php?thread_id=30949517&forum_id=2043

2006/11/11

Gauche 0.8.8: 大きなメンテナンスリリース

  • 重要な変更:
    • 正確な有理数がサポートされました。例えば(/ 1 3)を 評価すると1/3になります。正確な数の除算の結果を不正確な数 で得たい場合は明示的にexact->inexactを使って下さい。 この変更により、計算結果はより正確になりますが、もし今までのコードが 正確な数の除算が不正確な数に変換されることをあてにしていた場合、 計算がひどく遅くなる可能性があります (正確な有理数の演算は 浮動小数点数の演算にくらべ遅いからです)。 移行を助けるために、互換モジュールcompat.norationalが 提供されます。このモジュールをuseするとオペレータ/の 振舞いが以前のGaucheと同じになります。 詳しくはマニュアル を参照して下さい。
    • リーダーがutf-8エンコーディングについてより厳しいチェックを 行うようになりました。結果として、これまでutf-8ではないのに たまたま通ってしまっていたようなソースコードがエラーになる 場合があります。そのような場合に出会ったら、ソースコードの エンコーディングを変換するか、ソースに "coding:" コメントを 追加して下さい (マニュアルの "マルチバイトスクリプト" 参照)。
    • gauche.testtest-moduleによる 未定義変数への参照のチェックが厳しくなりました (これまでは バグにより見逃していたものがありました)。今までテストに 通っていたスクリプトが "symbols referenced but not defined: ..." のような エラーでfailするかもしれません。多くの場合、それはtypoなどの エラーです。詳しくはマニュアルの gauche.test - Unit testing を参照して下さい。
    • 追加されたモジュール:
      • sxml.serializer: SXMLをXMLやHTMLなどの形式に変換するための汎用的な手続きです。 Dmitry Lizorkinによって書かれたものをLeonardo Boikoが Gaucheに移植してくれました。
      • util.trie: Trieの実装です。OOHASHI Daichiにより初期の実装がなされ、 多くのGaucheハッカーによりハックされたものです。
      • util.rbtree: 赤黒木の実装です。Rui Ueyamaによる実装です。
    • ポートのロックに関するルーチンにバグがあり、複数のプロセッサを 持つプラットフォームでレースコンディションが発生していました。 バグは修正され、おまけに性能が若干向上しました。
    • C APIの変更予告: 次のリリースにてScm_EvalScm_EvalCString、及びScm_ApplyのAPIの 変更を予定しています。これらの関数と同じAPIを持つ関数が Scm_EvalRecScm_EvalCStringRec、 及びScm_ApplyRecとして定義されているので、 適宜移行しておいて下さい。
  • その他のバグフィクスと改善:
    • GCをBoehm GC 6.8にアップデートしました。Xcode-2.4/OSX対応パッチも 含んでいます。
    • portのクリーンアップルーチンを修正し、 "port vector full"エラーを起きにくくしました。 またScm_FlushAllPortsがスレッドセーフでなかったのを 修正しました。
    • guardの振舞いがsrfi-34に沿ったものになりました。 エラーハンドラ節は、guard自体と同じ動的環境で評価 されます。すなわち、guardのボディ内で生成された 動的環境はエラーハンドラに制御が渡る前に巻き戻されます。
    • 数値リテラルのパーザの、境界ケースでの振舞いのバグをいくつか修正しました。
    • クラス再定義の排他制御のバグを修正しました。
    • string-incomplete->completeが、不完全文字列に 含まれる不正なバイトシーケンスを削除したり置き換えたりできるように なりました。
    • モジュールgauche.logger: 実行時にfcntlロックが 使えるかどうかをチェックしてファイルのロック戦略を決めるようにしました。
    • モジュールgauche.sequence: fold-rightの 総称関数版を追加しました。
    • モジュールutil.match: 多値の扱いのバグを修正しました。
    • モジュールfile.util: directory-foldにおいて、 lister手続きがディレクトリの内容だけでなくseed値を返すように 修正しました。これによって、ディレクトリのパス名そのものを対象に 含めた処理ができるようになります。
    • モジュールrfc.822: 中途半端なタイムゾーンの値の 処理のバグを修正。
    • モジュールgauche.charconv: ファイルディスクリプタが リークするバグを修正。
    • モジュールgauche.net: 送信者のソケットアドレスが 取れない問題を修正。また、ソケットオプションの定数がいくつか 追加されています。
    • モジュールgauche.threads: OSX上でメモリ消費が 無闇に増えるバグを修正。
    • モジュールsxml.sxpathsxml.tools: 未定義関数を参照していたのを修正。
    • モジュールdbi: dbi-make-driverが 指定されたdbdモジュールを毎回呼ばれるたびに読み込んでいた 問題を修正。今は一度しかロードしません。
    • 正規表現エンジンが、特定の正規表現について 正規表現コンパイル時にエラーを出す問題を修正。
    • モジュールrfc.http: (send-request) リクエストボディの後にCRLFを送らないように修正 (RFC2616 sec. 4.1.)。
    • gauche-package, gauche-config: コマンド名やインクルードディレクトリをクオートせずに出力 するように変更。ここでのクオートはしばしばシェルを混乱させる 原因となっていました。この変更によってそのようなトラブルは なくなりますが、パス名に空白を含むようなディレクトリに Gaucheをインストールすると問題となります。 パス名に空白を含むようなディレクトリはunix起源のツールにとっては いずれにせよ鬼門なので、別の方策を考えたいと思っています。
    • digit->integerのバグ修正: (digit->integer #\2 2)#fでなく2を 返していました。

Gauche-gl 0.4.2: いくつかのビルド時の問題をフィックスしたリリースです。

2006/4/12

Gauche 0.8.7: 大きなメンテナンスリリース

  • バグフィクス:
    • read-blockが不正なメモリに書き込むバグを修正 (Thanks to Tatsuya BIZENN for tracking this down).
    • sys-dirname がルートディレクトリ直下のパス名に 対して動作しないバグを修正。
    • 組み込みのwriteルーチンが、たとえ循環構造を検出するモードであっても 循環構造のあるデータに対し無限ループに入ってしまうことがあるバグを 修正。
    • ローカル関数のインライン展開が重なった場合にInternal compiler error が出るバグがコンパイラにありました (Thanks to Jun Inoue for tracking this down)。 他にもいくつかInternal compiler errorとなり得るバグを修正しています。
    • call/ccによって再設定中のダイナミックハンドラ内でエラーが起きた場合に 呼ばれるべきダイナミックハンドラが呼ばれないバグがありました。
    • MinGW版におけるWindowsパス名の取り扱いを改善しました。
    • Bignumを0で割る処理にバグがありました。
    • util.stream: stream-filterに、必要な 要素の次の要素まで評価してしまうバグがあり、ストリームの終端で 奇妙なエラーが起きていました。stream-consの展開形が 第2引数を2回評価してしまうため、副作用のある処理があった場合に 結果が不正になり、また一般的に性能の低下を引き起こしていました。 さらにいくつかの未定義関数への参照を修正してあります。
    • gauche.collection, gauche.sequence: (map-to, map-to-with-index) 複数の長さの違うコレクションが与えられた場合の結果のサイズの 計算に誤りがありました。
    • util.relation: API relation-rowsが exportされていませんでした。
    • ext.net: 既に閉じられたソケット上で新たに入力/出力 ポートを作成し使おうとするassertion failureで落ちるバグがありました。
    • sys-wait, sys-waitpid: 割り込まれたシステムコール が再起動されず、子プロセスが残ってしまう問題がありました。
    • text.sql: sql-tokenizeに非常に長いSQL文を 与えた場合に、regexp stack overflowが起きるバグがありました。
    • dbi: スコープ外の変数を参照しているバグを修正。
    • srfi-13: string-copy!の引数の範囲のチェックにバグがありました。
    • プラットフォームによっては、ビルド中に不正なシェルスクリプトを 生成してしまう問題がありました。
    • www.cgi: cgi-header: 行末をCRLFに変更しました。
    • genstub: define-cgenericにsetterを定義 しようとするとうまく動きませんでした。
    • method-more-specific?: 比較するメソッドが共に rest引数を持っており、両者とも実引数にマッチする場合の処理に 抜けがありました。
    • 内部のクラス構造体のpthread mutexが初期化されないまま使われる 場合があり、プラットフォームによってはエラーを引き起こしていました。
    • dbi: 互換性を保つために、 レガシーdbdへのインタフェースでpass-through オプションを使うようにしました。
    • gauche-install: mode/owner/groupを指定するオプションが -dオプションと共に使われた場合にも有効になるように しました。
    • いくつかのドキュメント生成ツールがutf-8に完全に対応しておらず 問題が出たので、日本語のinfoドキュメントをeuc-jpで生成するように 戻してあります。
  • 改善:
    • 重要: gauche.testtest-moduleが、 モジュール内で使われている未定義のグローバル変数を探し、 見つけたらエラーを報告するようになりました。 識別子のタイプミスをうまく見つけてくれます。 (特殊なケースでこのテストが誤検出をすることがあります。 回避法はマニュアルを参照して下さい。)
    • Boehm GC 6.7採用。
    • 新モジュール: binary.io: バイナリI/Oのための基本的な 手続きを提供します。このモジュールはbinary.packの基礎として 既に含まれていましたが、本リリースからオフィシャルにサポートします。
    • さらにいくつかの良く使われるモジュール (gauche.collection等) がプリコンパイルされるようになり、ロード時間が短縮されています。
    • コマンドラインプロファイラオプションに-ploadが追加されました。 各モジュールのロードにかかった時間を報告します。スクリプトの スターとアップ時に何が時間を取っているかを知るのに便利です。
    • 正規表現エンジンが、バックリファレンス、名前つき補足、そして lookback assertionをサポートするようになりました。(Contribution from Rui Ueyama)
    • gauche.process: run-process:sigmaskキーワード引数を与えることで、子プロセスの シグナルマスクを安全に指定できるようになりました。
    • コンディションクラス<unhandled-signal-error> が追加されました。デフォルトのシグナルハンドラがこのコンディションを 報告します。
    • gauche.net: make-server-socket:backlogキーワード引数が追加され、バックログの数を 指定できるようになりました。 定数SOMAXCONNも追加されています。
    • クラスのデフォルトの外部表記に、再定義されたかどうかを表示するように しました。
    • text.sql: sql-tokenize: SQLのクオート無し識別子をシンボルではなく文字列として返すようにしました。 バックエンドとの互換性のために大文字小文字の区別を 保存する必要があるためです。
    • barがモジュールfoo内で定義されている マクロの場合、((with-module foo bar) ...)が マクロ呼び出しとしてコンパイラに認識されるようになりました。 既存の構文にラッパをかけて再定義するような場合に便利です。
    • global-variable-ref: 2番めのオプショナル引数に、 モジュール内だけを探すかどうかのフラグを取るようになりました。
    • gauche.termios: 新しい手続き: sys-forkpty-and-exec.
    • sys-sigmask は、newmask引数に#fを 許すようになりました。マスクの値を変えずに現在のマスクを 得るのに使えます。
    • debug-print (あるいは #?=) が表示する 情報の幅をdebug-print-widthパラメータで 変更できるようになりました。
    • 新しい組み込み手続き: complement, with-ports

2005/11/4

Gauche 0.8.6: Major feature enhancement.

  • お知らせ: configure時に--enable-mutibyteオプションを指定しない 場合のデフォルト文字エンコーディングがEUC-JPからUTF-8に変更になりました。 今までEUC-JPでGaucheをコンパイルしていた方は、configureスクリプト 起動時に明示的に--enable-multibyte=euc-jpを指定して下さい。
  • 新機能:
    • 追加されたモジュール:
      • dbi: データベース独立アクセス層。 さまざまなRDBMSに対して統一的なAPIを提供するモジュールです。 実際にRDBMSにアクセスするには、各RDBMS毎の「ドライバ」モジュールを インストールしておく必要があります。 http://www.kahua.org/cgi-bin/kahua.fcgi/kahua-web/show/dev/DBI/.
        にていくつかのドライバモジュールが入手できます。
        注意: 今まで、別パッケージのdbiモジュールを利用されて いた方は、新dbiを使う前に古いdbiファイルを削除して下さい。
      • util.relation: relation (Coddにより定義された意味) を扱うためのフレームワークです。dbiを使ってデータベース から取り出したデータはrelationとして表現されます。
      • text.sql: SQLパーザと構築ライブラリ。 まだ一部しか実装されていません。dbiモジュールで prepared queryを作るのに使われています。
    • 追加されたSRFI:
      • SRFI-40 (遅延ストリームライブラリ): util.streamモジュール。
      • SRFI-43 (ベクタライブラリ): srfi-43モジュール。
      • SRFI-45 (繰り返し遅延アルゴリズムを表現するためのプリミティブ): 組み込み。
    • gauche-packageが拡張されました。 generateコマンドにより、Gaucheの拡張モジュールを書くための スケルトンコードを自動生成することができます。 また、拡張モジュールのためのconfigure.acのテンプレート が改良され、Gauche特有のm4マクロを含まなくなりました。そのため autoconfだけでconfigureスクリプトを作成できます。
    • srfi-1のような頻繁に使われるモジュールが、 拡張モジュールとしてコンパイルされるようになりました。 ロード時間がかなり短縮されます。
    • errorerrorfが拡張され、 デフォルトの<error>だけでなく様々な コンディションを通知できるようになりました。
    • 新しい組み込み手続き: global-variable-bound?glboal-variable-ref。 前者は symbol-bound?を置き換えます。 ( symbol-bound?はdeprecatedとなり、将来のリリースで 取り除かれます。 symbol-bound?を使っているコードは global-variable-bound?に変更して下さい。 ). 後者は、実行時に名前がわかるグローバル変数の値を参照 するためだけにevalを使う必要性を無くします。
    • 正規表現手続きの追加: regexp-replace*, regexp-replace-all*, regexp-case-fold?.
    • Unixのエラー番号の多くが、組み込み定数として定義されます (例: EINTR)。また、組み込み手続きsys-strerror によって、エラー番号に対応する説明文を得ることができます。
    • Gauche C APIにforeign pointerオブジェクトが追加され、 Cの世界のオブジェクトをSchemeの世界に持ち込むのが簡単になりました。
    • スタックオーバフローハンドラが大幅に改良されています。 オーバフローを頻発するコードでは性能の向上が見られるでしょう。
  • バグフィクス:
    • SEGVを引き起こすメモリ関連の重要なバグをいくつかつぶしました。
    • www.cgi: Internet Explorerからファイルをアップロード した場合に元のパス名が正しく得られない問題を回避しました。
    • オートロード機能にバグがあり、オートロードファイルをロードする 環境がオートロードの定義時のモジュールではなくオートロードが トリガされた時点でのモジュールになっていました。これは、 サンドボックス環境でオートロードがトリガされた場合などに 問題を起こしていました。
    • 特定の条件下で、ベースクラスで定義されたオブジェクトのアクセサ メソッドを子クラスのインスタンスに適用した場合に異なるスロットを アクセスしてしまうというバグがありました。 (詳しい条件は、test/object.scmの"module and accessor" の部分を見て下さい)。
    • srfi-13: 第一引数の文字列が第二引数よりも長い場合に string-prefixの返すインデックスが不正である場合が ありました。
    • <time><char-set>の比較関数が ちゃんと実装されたので、これらのオブジェクトをequal?で比べる ことができます。
    • sys-basename, sys-dirname, sys-normalize-pathname: 内部エンコーディングが Shift JISの場合にこれらのルーチンがうまく動作しない可能性が ありました。またsys-normalize-pathnameには メモリを壊すバグがありました。
    • 文字列の内部表現が、よりスレッドセーフなものへと変更されました。
    • srfi-19: string->dateにtypoがありました。
    • プロファイラを起動したり止めたりを繰り返した時に問題が出るバグが ありました。
    • rfc.http: 不正なMIMEデータに対してより頑健になりました。
    • file.util: '~'で始まるパス名を相対パス名として扱います。 (チルダ拡張は、必要ならばパス名をいじる前に行われるべきです)。
    • gauche.net: socket-statusがマニュアルの 記述と異なり大文字のシンボルを返していました。
    • モジュールのシンボルエクスポート機構が書き直されました。 性能が若干向上している他、'export' 式がより厳密に解釈される ようになっています。特に、モジュール内で定義していないシンボルを exportしないように気をつけて下さい。以前はそのようなシンボルは 無視されていましたが、現在ではそのシンボルはそれより前にimport されたシンボルをシャドウします。
    • 非正規化領域の浮動小数点数リテラルの読み込みにバグがありました。
    • hash-table-update!の仕様がおかしいのを直しました。 与えられたキーがテーブルに無い場合、PROCはデフォルト値を 引数として呼び出されます。
    • util.isomorph: ユーザ定義オブジェクトに対して動作 していませんでした。
    • 多値の数が正しく伝搬しないバグがありました。
  • その他の変更
    • binary.pack: エンディアンを明示した符号付き整数 がサポートされます (n!, N!, v!, および V! directives).
    • gauche.vport: 仮想バッファポートの構築時に :buffer-sizeキーワード引数によってバッファの大きさを 指定できます。
    • gauche.net: sys-htonl, sys-htons, sys-ntohl, sys-ntohs が追加されました。
    • util.queue: copy-queueが追加されました。
    • gauche.let-opt, gauche.singleton, gauce.validator: これらのモジュールはobsoletedになって 久しいので、使われていたら警告を出すようにしました。
    • math.mt-random: <mt-random>の構築時に :seed引数としてu32vectorも与えることができるように なりました。
    • gauche.logger: デフォルトのログの行き先が パラメータlog-default-drainで参照/変更できるようになりました。
    • 組み込みマクロwhileuntilを正式にサポートします。
    • モジュールsrfi-1中にfold$等の Gauche特有の手続きが含まれていましたが、それらはオートロードされる モジュールの方に分離しました。クライアントコードの変更の必要は ありません。
    • slib: SLIB version 3 に対応しました。
    • Boehm GC 6.5にアップグレードしました。

2005/6/30

Gauche 0.8.5: メインテナンスリリース

いくつかの重要なバグを修正したリリースです。アップデートをお薦めします。

  • バグフィクス:
    • 0.8.4のコンパイラの定数式の畳み込みルーチンにバグがあり、 間違った値を生成してしまう場合がありました。
    • ビルド過程でGcc-4でコンパイルできないCソースを生成してしまう バグを修正。
    • <time>: nsecスロットに 不正な値をセットしようとした時に、エラーメッセージ文字列の バグによってダブルフォールトでgoshが落ちてしまうバグの修正。
    • 0.8.4の and-let* はテスト式が単一の変数である 場合を認識していませんでした。
    • with-signal-handlersがSIGCHLDのハンドラを きちんと復帰しないバグの修正。
    • www.cgi: 出力時にコード変換を行う際に、cgi-main が一回ごとに変換出力を完全にフラッシュするように修正。 cgi-mainを何度も呼ぶようなプログラムで問題が出ていました。
    • Windows/MinGWサポートが改善されました。 sys-normalize-pathnamesys-dirname、 そしてfile.utilbuild-path等のパス名を扱う ユーティリティ関数はWindows式のパス名を生成します。また、 gauche-configgauche-installなどの補助 コマンドがWindowsでも動作するようになりました。
  • その他の変更
    • ゼロによる除算が、エラーを投げるのではなく無限大を生成するように 変更されました。正と負の無限大は、仮に #i1/0#i-1/0と表記されます。 SRFI-70でこのへんは現在議論中なので、表記は将来変更されるかも しれません(それでもこれらの表記はリーダーにより認識されます)。 Quotient, remainder, moduloは依然としてゼロ除算時には エラーを投げます。無限大の扱いはまだ完全ではなく、NaNを生成 すべき箇所で無限大が生成されたりすることがあります。

Gauche-gl 0.4: 大幅な機能強化

  • プログラム可能なシェーダー等の、新しいOpenGLの機能の多くが サポートされました。
  • 新しいOpenGLの機能や拡張等は、コンパイル時のフラグではなく、 実行時にそのサポートがあるかどうかを判断されるようになりました。 グラフィックカードとドライバを変えてもGauche-glを再コンパイル する必要はありません。
  • Issac Trotts氏による、NVidiaのCg Toolkitのバインディングが サポートされています。コンパイルするにはconfigure時に --enable-cgを指定して下さい。

2005/6/6

Gcc-4を使うと0.8.4のコンパイルがうまくいきません。 この問題にあたってしまった方は、お手数ですが以下のファイルをダウンロードして src/ 以下の同名のファイルと置き換えてから再コンパイルして下さい。

http://practical-scheme.net/vault/autoloads.c
http://practical-scheme.net/vault/compile.c
http://practical-scheme.net/vault/scmlib.c
http://practical-scheme.net/vault/objlib.c

2005/5/31

Gauche 0.8.4:

コンパイラとVMが書き直され、以前よりも少ないメモリで速く走るように なりました (ベストケースで1.9倍の速度、もしくは0.7倍のメモリ消費。 もちろんケースにより数値は大きく異なります)。コンパイラが簡単な クロージャ最適化を行うようになったので、ローカル関数の末尾再帰を しているような典型的なコードは恩恵を受けやすいでしょう。 一方で、OO中心だったりライブラリで多くの時間を費すコードは あまり改善が見られないかもしれません。

クロージャ解析を行うようになった結果、Gaucheはローカル関数の引数の 不一致のエラーを実行時ではなくコンパイル時に検出するようになりました。 この変更で、今まではほとんど実行されることのないコードにあった ために発見されなかったバグが見つかり、コンパイルエラーで実行できなくなる スクリプトがあるかもしれません。 後でバグに思いがけず出くわすよりは、早目に見つけられる方が良いと 我々は考えています。

この変更のもう一つの副作用は(あまり望ましくないことですが) プログラムのロード時間が長くなるというものです。Gaucheがコンパイル時の 最適化により多くの時間をかけるようになったためです。 手元のテストケースではロード時間が70%ほど増加しました。 以降数リリースでこの数字は改善される予定ですが、これが問題になるようなら あまり使わない機能をautoloadにしてloadを遅らせるなどの手段を取って 下さい。

エラーメッセージ (コンパイルエラーもランタイムエラーも) には まだかなり改善の余地があります。こちらも徐々に直してゆく予定です。

他の変更:

  • 新機能:
    • srfi-42 (Eager comprehension) をサポート。
    • srfi-55 (require-extension) をサポート。
    • 簡単なサンプリングプロファイラが実装されました。 リファレンスマニュアルの「プロファイリングとチューニング」の章を 参照して下さい。
    • 実験的に、Windows/MinGWのバイナリパッケージの提供を開始しました。 ダウンロードの ページを参照して下さい。
  • 改善:
    • ARMプロセッサのサポートの追加。
    • Perl式のpositive/negative lookahead assertionが正規表現に 追加されました。
    • util.queue: queue-push-unique!enqueue-unique!を追加。
    • gauche.collection: fold2, fold3, map-accum, group-collectionを追加。
    • gauche.sequence: group-sequenceを追加。
    • rfc.md5, rfc.sha1: バッファに文字列ではなく u8vectorを使うようにして性能を改善。
    • file.util: decompose-path, path-extension, path-sans-extension, path-swap-extensionを追加。
    • gauche.net: make-server-socket(s):sock-initキーワード引数を取るようになりました。 サーバ側ソケットの生成をカスタマイズできます。
    • hash-table-update! を追加。
    • srfi-2: and-let*がネイティブでサポートされる ようになったので、もう(use srfi-2)は必要ありません。
    • ディスアセンブラ関数disasmを正式にサポート。
    • composeが0個または1個の引数も取れるようになりました。
  • バグフィクス:
    • x86プロセッサ上のシステムで、gccが「レジスタが足りない」と 言い出すバグを修正。
    • エラーハンドラ中でスタックオーバフローが起きた時にSEGVるバグを修正。
    • (use slib)とすると、以前はサポートされているsrfiが全て ロードされるようになっていましたが、 これにはGauche組み込みのformat を非互換なsrfi-29のformatがシャドウしてしまうという 不便な副作用がありました。そこでslibロード時にsrfiをロードしない ように変更してあります。必要なsrfiは個別にロードするようにしてください。
    • dbm.gdbm: dbm-db-copydbm-db-rename が動いていませんでした。
    • gauche.uvector: 引数を変更するはずの2項演算関数の いくつかが、引数を変更せずに新たなベクタを作って返すというバグを修正。
    • 巨大な正規表現を与えた時に正規表現エンジンが不可解な動作を するバグを修正。現在では容量を越える正規表現が渡されるとエラーに なります。
    • gauche.threads: mutexのオーナースレッドがkillされた 時にmutexのロックが永遠に解除されなくなる問題を修正。
    • srfi-19: string->dateが、長い月名が 渡された時に動作しないバグを修正。
    • NetBSD上で、古いバージョンのGaucheがインストールされている環境で ビルドが失敗する問題を修正。
    • stable-sort!: ベクタのソートのバグを修正。
    • <condition-type>に対するobject-applyの 定義を組込みにしたので、他のコンディション支援関数がロードされて いない段階でもコンディションクラスを述語として使えるように なりました。
    • 指定ファイルがみつからなかった時にloadがエラーを出さない という問題を修正。
    • string-suffix-lengthを修正。

2004/12/2

Gauche 0.8.3: バグフィクスリリース

0.8.2のソースコードエンコーディング検出機能にバグが見つかりました。 Windows式の行末 (CRLF) を使っている場合に、coding-aware port が2行目の最初の文字を繰り返してしまうというものです。 先頭の数行がコメントであるようなソースコードでは問題が現れませんが、 踏むと厄介なバグなので、修正したバージョンをリリースします。

他に2点程改善点があります。coding-aware portはEmacsが使っている 修飾サフィックス付きのコーディング名 (euc-jp-unix等) も認識し、 サフィックスを除いたものを文字エンコーディングとして用います。 また、f32vectorとf64vectorの外部表記がより正確なものとなりました。

2004/11/29

Gauche 0.8.2: インフラストラクチャを大きく修正しました。

  • 新機能
    • srfi-35風のコンディションシステムおよびsrfi-36の一部を サポートしました。guard (srfi-34)と合わせて 使うことにより、例外処理をわかりやすく書けるようになります。 マニュアルの「例外」の章も合わせて書き直してあるので 参考にしてください。
    • ソースコードエンコーディングの指定が可能になりました。 ソースファイルの先頭近くに"coding: utf-8"といった 特別なコメントがあった場合、Gaucheはそれを解釈して 必要ならば文字エンコーディングの変換を行います。 詳しくはマニュアルの「マルチバイトスクリプト」の項を 参照して下さい。この機能自体はソースコードのロードからは 独立しており、coding-aware ports を使うことで Schemeスクリプトを処理するようなプログラムからも利用することが できます。
    • 仮想ポート (virtual port) のサポートが追加されました。 仮想ポートとは、動作をSchemeで記述できるような ポートです。マニュアルのgauche.vportモジュールの 項を参照して下さい。
  • 改善
    • GCをBoehm GC 6.3リリースに上げました。LP64アーキテクチャでの 問題が解決しています。
    • gauche.fcntl: OSがサポートしていれば、 F_GETOWNF_SETOWNが使えるようになりました。
    • gauche.termios: struct termiosc_ccフィールドが Schemeからもアクセスできるようになりました (Thanks to Kogule Ryo)。
    • gauche.uvector: string->s8vector!string->s8vector!が追加されました。 また、TAGvector-copy!のAPIが srfi-13のstring-copy!やsrfi-43のvector-copy! とマッチするように変更されています。
    • ポートの実装を見直しました。行カウントは、キャラクタI/Oを 行っていれば、ファイルポートだけでなく文字列ポート等でも 使えます。また、バイナリI/Oのポーリングのためにbyte-ready? も追加されています。
    • text.csv: クオート文字が指定できるようになりました。
  • バグフィクス
    • 非互換な変更: 前のバージョンのrfc.mimeのAPIは 設計にミスがあり、エンコードされていないバイナリを含むパートを 正しく扱うことができませんでした。 このバージョンではrfc.mimeのストリームパーザは 仮想ポートを用いて再実装されています。MIMEパートハンドラに reader引数は渡されなくなりました。この変更はまた、 www.cgiにも影響を与え、ファイルアップロードに対して 独自のハンドラを使っている場合は変更が必要になります。 詳しくはリファレンスマニュアルを参照して下さい。
    • 可能ならば、共有ライブラリのSONAMEをセットするように しました。
    • gauche.array: マニュアルに記されていながらexportされて いない関数がありました。
    • gauche.charconv: JISの2面の変換にバグがありました。
    • gauche.regexp: regexp-replace-allが 特定のパターンで無限ループに入ることがありました。 現在はそのようなパターンではエラーが報告されます。
    • dbm.fsdbm: バイナリデータを保存するとエラーが起きて いたのを修正しました。
    • rfc.822: rfc822-parse-dateが返す月の 数値がひとつずれていました。
    • util.match: 準パターン(quasipattern) のバグを 修正しました。準パターンについてはマニュアルの記述もよりわかりやすく 直してあります。
    • srfi-19: date->julian-dayが tz-offsetも見るようにしました。
    • 数値計算部分のバグを修正しました。
    • let-argsの 'else' 節のパラメータの受渡しが マニュアル通りになっていませんでした。
    • directory-list: :filter-add-path?が 真の時に、:children?が真であっても "."".." が含まれてしまうという バグを修正しました。
    • クラス再定義の際に無限ループに入ることがあったのを修正しました。
    • let-keywords*: r5rsマクロ内で使われた場合に 正しく動作していませんでした。
  • C APIの変更e
    • クラス初期化のAPIを見直しました。 Scm_InitBuiltinClassはobsoletedになります。 新規のコードはScm_InitStaticClassを使って下さい。
    • ScmPortの構造が変更になっています。
    • Scheme整数をC整数に変換するルーチンが、範囲外の数値の 処理をより柔軟に行えるように変更されています。
    • Scm_LoadScm_LoadFromPort等の APIが、ビットフラグを受け取るように変更されています。

2004/8/2

Gauche 0.8.1: メインテナンスリリースです。

  • 改善
    • www.cgi: ファイルのアップロード (multipart/form-dataでPOSTされるフォームデータ) も処理するようにしました。
    • rfc.uri: uri-parseを追加。 また、uri-decompose-hierarchicaluri-decompose-authority#fを 引数にとることを許しました。
    • 正規表現オブジェクトをequal?で比較することができるように なりました。
    • examples/spigot以下のファイルを、最新の 拡張モジュールの書き方に合わせました。
  • バグフィクス
    • マクロ関連のバグ:
      • マクロ展開の結果生成される内部defineが正しく認識 されるようになりました。
      • マクロ展開の結果生成される'case'が動いていなかったのを 修正。
      • マクロ展開の結果に含まれるクオートされたベクタが おかしかったのを修正。
      • macroexpandがオートロードされるマクロも 認識するようになりました。
    • ビルドプロセスを若干クリーンアップしました。 共有ライブラリのシンボリックリンクが、作法に従った形に なりました(つまり、libgauche.soがlibgauche.so.0.8.1のsymlink になる、等)。
    • Bignumや複素数を含む、3つ以上の引数を除算 (/) に 渡した場合に不可解なエラーが出ていたのを修正。また、Bignumの 除算ルーチンにバグがあり、まれに結果がおかしくなっていたのを修正。
    • gauche.parameter: スレッドが、自分が所有していない パラメータを見ることが出来てしまう場合があるのを修正。
    • gauche.net: NetBSD上でのコンパイルの問題を修正 (Patch from MINOURA Makoto)。 make-sockaddrsのエラーメッセージを改善。
    • util.match: 一時変数を再利用していたため、マクロ コードの最適化ルーチンが判断を誤っていた問題を修正。
    • file.util: プラットフォームによっては、 make-directory*が末尾に'/'のあるパス名を 渡された時にエラーになっていた問題を修正。
    • sxml.ssax: ssax:make-parserのマクロ出力に、 srfi-11等、他のモジュールで定義されているシンボルが含まれている ため、そのマクロの利用者がそれらの他のモジュールをインポートする 必要がありました。これはわかりにくいので、現在は sxml.ssaxが必要なモジュールをextendするようになっています。
    • gauche-cesconv: --help オプションを動くようにしました。
    • apropos がインポートしているモジュールの親モジュールも 検索するようになりました。
    • write/ss: flonumがSRFI-38記法で出力されてしまうことが あるのを修正。
    • オートロードされるファイル中で、想定しているのとは別のモジュールで 定義を行った場合に、autoload がassertion failedに なってしまう問題を修正。
    • sys-globにメモリリークを起こす問題があったのを修正。

また、最近のGaucheでコンパイルに問題が出ていたのを修正した Gauche-kakasi-0.1もリリースしました。

2004/6/26

Gauche-gtk 0.4.1:

  • gauche-packageメカニズムへのより緊密な統合。 このパッケージのインストール後に、configure時のオプションが 'gauche-package reconfigure Gauche-gtk' で取れます。 今後同じconfigureオプションで再コンパイル、インストールする場合は 'gauche-package install -r Gauche-gtk-x.x.x.tgz' が使えます。
  • pango, gdk-pixbuf等の、より多くのAPIのサポート。
  • Gtk-2.2とGtk-2.4の双方に対応。

2004/5/22

Gauche 0.8:

  • 新機能
    • 補助スクリプト: 拡張パッケージのビルドとインストールに便利な スクリプトがいくつか用意されました。 gauche-packageは、拡張パッケージの ダウンロード、アンパック、コンフィグレーション、ビルド、そして インストールをひとつのコマンドで行うスクリプトです。 リファレンスマニュアルの"Using extension packages"の項を 参照してください。 (NB:この機能はまだ新しく、問題を抱えているかもしれませんが、 しばらく使って様子を見ます)。 また、拡張パッケージのMakefileから呼ぶのに便利な gauche-cesconv, gauche-installといった スクリプトもあります。これらにはまだドキュメントはありませんが、 --helpオプションで簡単な使いかたを見ることができます。
    • モジュールutil.match: Andrew Wrightのパターンマッチング ライブラリを標準添付しました。Gaucheのオブジェクトシステムとの 統合が図られています。
  • 改善点
    • I/OとSchemeファイルのロードに関して若干性能を改善しました。
    • <error>クラスを継承したユーザ定義クラスが 作れるようになりました。SRFI-34準拠のguardマクロと 合わせて使えば、特定のエラーだけを処理するコードがより簡単に 書けます。将来は、組み込み手続きが投げるエラーもより階層化 した形に整理する予定です。
    • システム関係の新しい組み込み手続き:sys-lchown, sys-realpath
    • 組み込みのsortに、stableな手続き stable-sortstable-sort!が追加されました。
    • 新しい組み込みマクロ: let/cc
    • キーワード関係の新しい組み込み手続き: delete-keyword, delete-keyword!
    • 正規表現関係の新しい組み込み手続き: rxmatch-num-matches
    • モジュールfile.util: 次の手続きを追加: file-is-symlink?, file->string, file->string-list, file->list, file->sexp-list.
    • モジュール gauche.net: 実験的に追加されていた以下の 手続きをドキュメントして正式サポートとしました: socket-send, socket-sendto, socket-recv, socket-recvfrom, socket-getpeername, socket-getsockname.
    • モジュール gauche.processprocess-command がexportされていませんでした。
    • モジュール gauche.test: テスト手続き内でのエラーの 詳細を表示するか否かを、環境変数 GAUCHE_TEST_REPORT_ERRORとグローバル変数 *test-report-error*でコントロールできるようにしました。 開発中にテストでエラーが出た場合の原因を調べるのに便利です。
    • モジュール www.cgi: 手続き cgi-get-metavariablesを追加しました。 ユーザルーチン内でcgi-metavariablesパラメータを介した メタ変数の参照を可能にし、cgiスクリプトを容易に再利用できるようにします。
    • モジュール gauche.parseopt: 「省略可能なオプション引数を持つコマンドラインオプション」 を指定可能にしました。
    • モジュール gauche.array:均一な数値ベクタを ストレージに使う、均一な数値配列が実装されました。
    • モジュール text.html-lite:frame関係のタグが追加されました。
  • バグフィクス
    • モジュール gauche.charconv:文字コード推定ルーチンが、 IAEA準拠のCES名を返すようにしました。
      また、拡張されたcall-with-input-file手続き等で :if-does-not-exist#fを指定するとうまく 動かなかったバグを修正しました。
    • <generic>を継承して作ったユーザ定義クラスの 適用が正しく評価されるようになりました。また、 define-generic:classキーワード引数で ジェネリック関数のクラスを指定できるようになりました。
    • モジュール srfi-13: 省略可能な引数が与えられた 時に、string-containsの返り値がおかしかったのを修正しました。
    • 0.7.4.2で、エラーメッセージ中のソースコードの行情報のカウントに コメントが含まれていなかったバグを修正しました。
    • プログラムがsetugidされているときのみ、環境変数を信用しないように しました。(以前はユーザがrootであれば信用していませんでした)。 これによって、rootでも GAUCHE_LOAD_PATHやGAUCHE_DYNLOAD_PATHを使うことができます。
    • ポートに先読みされた文字が残っていた場合に、port-seekが 正しく動作していませんでした。
    • add-load-pathの省略可能引数が使えなくなっていたものを修正。
    • トップレベルにない define-in-constant を エラーとしました。トップレベルにない define-in-module もエラーとすべきですが、 以前のふるまいに依存しているコードがある可能性もあるので、 これに関しては警告に留めてあります。

2004/3/18

Gauche-gtk 0.4:

  • GLGD (GL graph draw)ウィジェットの初期バージョンが同梱されています。 configure時に選択されれば、gtkウィジェットにグラフを描画することが できます。OpenGLとGtkGLExtが必要です。詳しくはtarball中の glgd/README.eucjpを参照して下さい。
  • Pangoの多くのAPIと、GdkのいくつかのAPIが追加されました。

2004/2/26

Release 0.7.4.2: このリリースでは、クラス再定義に関するやや重要なバグが 修正されています。このバグは、クラスの再定義を繰り返すと、元のクラスに 定義されていたメソッドが失われるというものです。クラスの再定義機構を 積極的に利用していない場合はこのバグに当たることは少ないと思われるので、 次のリリースまでアップデートを待っても良いでしょう。

そのほか、以下のバグが修正されています。

  • string-concatenate-reverseが、srfi-13の仕様通りの オプショナル引数をとるように修正されました。
  • スレッドが捕捉されない例外で終了した場合、終了したスレッドの スタックトレースもデフォルトで表示するようにしました。 なお、もしそのスレッドをthread-joinで待っているスレッドが あった場合、srfi-18に示されるように、thread-joinから uncaught-exception 例外が投げられます。従って、エラーハンドリング を全く行っていない場合は、終了したスレッドと待っているスレッドからの 二つのスタックトレースが表示されることになります。
  • モジュールwww.cgi: cgi-get-queryを インタラクティブに使った場合のおかしな動作を修正 (Patch from Grzegorz Chrupala)。
  • モジュールsrfi-1: lset-xorlset-xor! で、エラーが出るバグを修正 (pointed out by Ueyama Rui)。
  • モジュールsxml.sxpath: 特定のsxpath構文が エラーになるバグを修正。

2004/2/4

リリース0.7.4には、dbm.fsdbmのデータベースに以前のバージョンとの 互換性が無いというバグがありました。fixしたものを0.7.4.1としてリリースしています。

2004/2/3

Gauche release 0.7.4:

  • 重要な変更
    • util.listは、srfi-1をextendしないようになりました。 srfi-1をextendしていると、util.listgauche.collectionを併用する場合に、予想に反する動作を することがあったためです (util.listgauche.collection の後にuseすると、gauche.collectionがせっかく拡張した fold等のメソッドがもとのsrfi-1の手続きで シャドウされてしまうが、一見わかりにくい)。 もし既存のスクリプトでsrfi-1の手続きが定義されていないという エラーが出てしまった場合は、(use srfi-1)を追加して下さい。
  • 新機能
    • srfi-5 (拡張されたlet) を追加。
    • srfi-7 (プログラムコンフィグレーション言語) を追加。
    • srfi-16 (case-lambda) を追加。
    • srfi-29 (localization) を追加。
    • srfi-38 (external format of shared structures) を追加。
    • Alex ShinnによるGNU gettextコンパチブルのモジュール text.gettext を正式にサポート。
    • Module www.cgi-test: CGIスクリプトテストフレームワーク。
    • マルチスレッドアプリケーションで安全にfork&execするための手続き sys-fork-and-execを追加。
    • 組み込み手続き追加: hash-table-num-entries, promise?
  • 改善
    • VMのスタック操作が改善され、深い再帰を行うと急激に性能が低下する 問題が修正されました。
    • 非常に長いリストの扱いがより頑健になりました。
    • 標準のreplは、write/ss (write with shared structure) を使用するようになりました。評価結果に循環する構造があっても 無限ループに入ることなく、表示されます。 エラーメッセージ、デバッグメッセージ、テストメッセージ等も同様です。
  • バグフィクス
    • プラットフォームによっては、sys-globのエラー処理が おかしかったのを修正。
    • rfc.822, rfc.mime: 不正なバイトシーケンスを 受け取った時の動作をより頑健に。
    • FreeBSDでpthread使用時にハングする問題を修正。
    • gauche.net: バッファリングに関するキーワード引数が 仕様と異なっていたのを修正。
    • rfc.uri: サーバ名部分にuserinfoがある場合にユーザ名が 正しくパーズされていなかったのを修正。
    • read-blockが0バイトのリクエストも扱えるようになった。
    • Configureが、--with-localオプションにコロンで区切った 複数のディレクトリが与えられた場合の動作がおかしかったのを修正。

2003/12/16

Gauche release 0.7.3:

(このリリースでは、CのAPIが若干変更されており、libgaucheを使う既存の Cアプリケーションには互換性の問題が出るかもしれません。下の"C API Change" を見てください)。

  • 新機能
    • クラスの再定義がサポートされました。既存のインスタンスのアイデンティティ を保ったまま、そのクラスを再定義し、インスタンスを新しい定義に合わせて アップデートすることができます。再定義とアップデートプロトコルの 詳細については、リファレンスマニュアルの「オブジェクトシステム」の 章を参照して下さい。
    • また、既存のインスタンスのクラスを変更することもできます。
    • スロットアクセスのカスタマイズプロトコルが書き直され、 手続き的スロットがslot-bound?に応えられるようになりました。 具体的には、例えばvirtual slotに :slot-bound? スロットオプションを使ってslot-bound?が呼ばれた時の動作を プログラムすることができます。
    • 正規表現に、non-greedyマッチ (*?, +?, ??, {n,m}?) が追加されました。
    • 新モジュール: rfc.mime: MIME (RFC2045)メッセージの パーザです
    • 組み込みハッシュテーブルに使われるハッシュ関数が、 eq-hashおよびeqv-hashとしてSchemeからも 呼べるようになりました。
  • 改善
    • オブジェクトシステムに関する記述がリファレンスマニュアルに追加されました。
    • 割り込まれたシステムコールは、シグナルハンドラがリターンした場合、 Gaucheによってリスタートされるようになりました。 これによって、例えばアラームタイマーなどを、システムコールの 中断を心配すること無く使えるようになります。 なお、シグナルハンドラがエラーを投げたり(これがデフォルトのふるまいです)、 他の継続を起動した場合には、システムコールは再実行されません。
    • make installで、gauche特有のautoconfマクロが gauche.m4として $(datadir)/aclocal 以下にインストールされます。
    • gauche.net: sockaddr-addrsockaddr-port が追加されました。
    • gauche.charconv: with-input-conversionwith-output-conversion が追加されました。
    • gauche.process: process-wait に オプショナルな引数が加えられ、子プロセスの終了ステータスを サスペンドすることなくチェックすることができるようになりました。 また、便利な関数 process-wait-any が追加されました。
    • read-line に、オプショナルな引数allow-byte-string が追加されました。これによって、read-lineはバイト文字列を 読めるようになります。文字エンコーディングがわからないポートから 読み込む場合に便利です。
    • 入力文字列ポートに対して、 get-remaining-input-string 手続きが追加されました。
    • 数値のリーダーが '#' によるパディングを理解するように なりました。
    • goshはインタラクティブモードで起動されると、ファイル ~/.gauchercがあればそれをロードします。 この機能はだいぶん長い間、Gaucheに備わっていましたが、 本リリースで正式にサポートされます。但し、ノンインタラクティブ モードでは.gauchercはロードされなくなったので 注意して下さい。
    • gauche-init.scmがかなり小さくなり、 goshの起動が少し速くなりました。
    • rfc.822: パージングのためのAPIが追加されました。
    • text.html-lite: html-doctype が XHTML doctypeも生成するようになりました。また、 html-escape-stringは引数に対してx->string を適用します。
    • Cygwinにおいて、loadがDOSのドライブ指定を 理解するようになりました。
  • バグフィクス
    • バッファポートのフラッシュのロジックにバグがあり、 gauche.charconvで変換出力が途中で切られるなどの 問題がありました。
    • マクロ展開ルーチンに、"..."が不正なレベルで 使われた時に無限ループに入るというバグがありました。
    • gauche.charconv: utf8->eucjp 変換ルーチンが、 0xbfで終わるような2バイトのutf-8文字をエラーにするという バグがありました。また、"none" エンコーディングの処理が おかしかったのを修正しました。
    • gauche.parameter: メモリを壊す可能性のあるバグを修正しました。
    • gauche.selector: selector-delete!が、 ハンドラ手続きだけが指定された場合にエラーを投げてしまうバグを 修正しました。
    • slib: (require 'format) がSLIBのformat をロードするようにしました。また、systemの定義が 欠けていたのを追加し、slib:errorの動作をfixしました。
    • srfi-1: list=がautoloadリストに欠けていました。
    • srfi-14: ucs-range->char-set! が多バイト文字に対して正しく動作していませんでした。
    • srfi-37: exportリストにtypoがありました。
    • sxml.*: exportリストに欠けていたAPIを追加し、 またmake-char-quotatorのバグを修正しました。
    • dbm: アクセサをカスタマイズした場合の動作がおかしかったのを 修正し、また、exportリストに欠けていたAPIを追加しました。
    • dbm.fsdbm: dbm-fold がコールバックルーチンに おかしなkeyを渡していました。
    • 正規表現のオプティマイザのバグにより、 「complementedなcharsetの繰り返しで、後に文字と文字セット以外を 伴うもの」という特定のパターンが正しくマッチしないという問題がありました。
    • math.mt-random: (random-integer 1)が 正しく動かなかった問題を修正。
    • text.tr: build-transliteratorが、 本来は作成された手続きが呼ばれる時点でのcurrent-i/o-portを 使うべきところを、手続きが作成される時点でのポートを使ってしまう という問題がありました。
    • util.lcs: ふたつとも空のシーケンスが渡された時に lcs-with-positions がうまく動きませんでした。
    • util.queue: 要素がひとつだけのキューに remove-from-queue!を適用するとエラーになるという バグを修正しました。
  • C API Change
    • Scm_Initが引数を取るようになりました。 GAUCHE_SIGNATUREを渡して下さい。これは、 メインプログラムが正しいバージョンのlibgauche.soを リンクしたことの確認に使われます。
    • Cで定義されたクラスのカテゴリの仕様が見直されました。 gauche.h中の 'Class categories' コメントを 見てください。大部分の変更はマクロ内に隠されていますが、 ひとつ重要な変更があります。Schemeでサブクラス可能な C定義クラス(SCM_CLASS_BASEカテゴリ)を 定義した場合、そのインスタンスはSCM_HEADERのかわりに SCM_INSTANCE_HEADERを使う必要があります。

Gauche-gl release 0.3.1: 行列の分解ルーチンのバグと、コンフィグレーション時 の問題のfix。また、Gauche-0.7.3への適合。

Gauche-gtk release 0.3.2: 新しいGtk-2.2でのコンパイル時の問題のfix。 gtk-accel-groupとgtk-window-get-sizeのサポート (Patch from Michal Maruska).

2003/10/4

Gauche release 0.7.2:

  • 新しい機能
    • 新モジュール dbm.fsdbm: レコードの保存に個別のファイル を使う形式のdbmインタフェースの実装です。dbmライブラリが 使えない環境等で代替として使えます。
    • ジェネリックファンクションobject-hashによって、 ユーザ定義のクラスに対してハッシュ関数を定義することが可能になりました。 object-equal?と併せて使えば、ユーザ定義オブジェクトを equal?ハッシュテーブルに格納することが可能になります。
    • gauche.charconv: 手続き: call-with-input-conversioncall-with-output-conversionが追加されました。
    • gauche.process: プロセスポートが拡張されました。
      • 非互換な変更: open-input-process-portopen-output-process-portは、作られたポートと プロセスオブジェクトの2値を返すようになりました。 プロセスオブジェクトが帰らないと、実用上役に立たないことに 気づいたためです。
      • プロセスポートの手続きにキーワード引数が追加され、 文字エンコーディング変換やリダイレクションが指定できます。
      • サブプロセスのエラーメッセージは、デフォルトではカレントプロセスの 標準エラー出力に向けられるようになりました。 (以前はデフォルトで/dev/nullに送られていました)。 明示的に変更することはもちろんできます。
    • 新モジュール util.record: SCM互換のレコードライブラリです。
    • 新手続き library-exists?, library-fold, library-map, library-for-each, library-has-module?: インストールされているgaucheライブラリ を問い合わせたりできます。
  • 改善
    • gauche.net:
      • 複数のプロトコル(ipv4とipv6等)が使える環境下でソケットを扱 うのに便利な、 make-server-socketsmake-sockaddrs が追加されました。 (Kimura Fuyuki氏によるパッチ)
      • socket-closeは接続をシャットダウンしなくなりました。 forkしたプロセスで接続がまだ使われている可能性があるからです。
    • 次の手続きの性能を改善しました:read-line, lcs-with-positions, sort, sort!
    • with-moduleselect-modulenullモジュールおよびschemeモジュールから 取り除きました。これによって、null-environmentscheme-report-environmentで返される環境は R5RSにある束縛のみを含むようになります。
    • www.cgi: cgi-parse-parametersが、'&' だけでなく ';' も区切り文字として認識するようになりました。
    • gauche.reload モジュールは、 gosh が対話モードで起動された場合にオートロードされる ように設定されます。
  • バグフィクス
    • gauche.charconv: ある特定の条件下でバッファオーバーランや 出力が欠けるといったバグを修正しました。
    • RedHad9 NPTLでpthread-cond_waitがハングするバグを 修正しました。
    • Cygwin上でGCが落ちていたバグを修正しました。
    • string-splitは、空文字列にマッチするセパレータが 与えられた場合にはエラーを投げます。
    • gauche.fcntl: 定数F_SETFDがexportされて いませんでした。(patch from Kimura Fuyuki).
    • math.mt-random: (random-integer (expt 2 16)) が動作していませんでした。 Patch provided by Alex Shinn.
    • srfi-1: typoを修正し、また (not (pair? ...)) をより厳密な (null-list? ...) に修正しました。 (Patch from Grzegorz Chrupala).
    • list-tail, quotient, modulo: 変なエラーメッセージが出ることがあったのを修正しました。
    • sxml.sxpath: かけていたソースとexportリストのtypoを 修正しました。 (Patch from Hisazumi Kenji, Makoto Satoh).
    • 拡張モジュールで memset の用法がおかしかったのを修正しました。
    • インストールしないでもgoshの全機能がビルドツリーから 使えるようにしました。パッケージング等が楽になっていると 思います。
    • rfc.url: uri-decodeにて、 不完全な入力をうまく処理するようにしました。

Gauche-gl release 0.3: Cygwinで走るようになりました (OpenGL 1.1.0-6使用、X不使用。).

Gauche-gtk release 0.3.1: gtk-2.2に対応しました。

2003/7/23

Gauche release 0.7.1:

  • SXMLフレームワークが統合されました。 SSAX XMLパーザ、SXPATH問い合わせ言語、および Kirill LisovskyとDmitry Lizorkinによるsxml-toolsが含まれます。
  • Boehm GC 6.2へとアップグレード。
  • fluid-letマクロを追加 (thanks to Dorai Sitaram).
  • Gaucheの拡張モジュールのサンプルソースをexample/spigotに置きました。
  • text.html-liteは、空エレメントに対して XHTMLと互換性のある "<tag />" を出力するようになりました。
  • www.cgi: cgi-header は任意のキーワード引数 を取り、それらを追加のヘッダとして出力するようになりました。 また、 :location 引数とset-cookieヘッダを同時に使う事も できるようになりました。
  • 変数 *program-name* and *argv* は -u, -l, -e コマンドラインオプションが評価される前に設定される ようになりました。したがって、これらのオプションで引用される ファイル中のこれらの変数への参照が正しく動作します。
  • バグフィクス: Cコンパイラの最適化戦略によって、 極形式の複素数の表記(例:1@1.57) と、(make-polar 1.0 1.57)とで微妙に異なる値を生成する バグを修正しました。
  • バグフィクス: ScmPortRec中の'private'フィールドを C++でもコンパイルできるように 'priv' に変更しました。
  • バグフィクス: インストール後にSLIBのためのslibcatを生成するルールが 落ちていたのを復活しました。
  • バグフィクス: rfc.httpにおいて、リプライに content-lengthとtransfer-encodingのいずれも見当たらなかった場合の ハンドリングを追加しました。
  • バグフィクス: char-ready?の引数をR5RSに従い省略可能としました。
  • バグフィクス: dbm.gdbmにおいて、値の変換ルーチンが キーの変換ルーチンと混同されていました (Thanks to Alex Shinn for a patch)。
  • バグフィクス: --enable-multibyte=noneでコンパイルされた 時、しばしば#\x80よりおおきい文字が、Cのsigned charと unsigned charの混同により化けてしまう場合がありました。
  • バグフィクス: インストール時にDESTDIR変数を参照するようにして、 パッケージングをやりやすくしました (Thanks to Kogule Ryo for a patch)。
  • バグフィクス: gauche-config の出力から 不要な-lgauche-uvectorフラグを除きました。

2003/5/30

Gauche release 0.7:

  • 新モジュール: util.lcstext.diff: longest common sequece を計算します。
  • 新モジュール: binary.pack, バイナリデータを扱う、 Perlのpack/unpack互換のルーチンです。
  • Kimura Fuyukiさんにより、試験的にIPv6サポートが追加されました。 OSがIPv6をサポートしている場合は、--enable-ipv6をつけてconfigure することによりIPv6を扱うルーチンが追加されます。 詳しくはINSALLを見て下さい。
  • 連想リストライブラリがutil.listモジュールに追加されました。
  • コマンドライン引数をパーズするのに便利なlet-argsマクロが gauche.parseoptモジュールに追加されました。
  • バグフィクス: 特定の浮動小数点数が正しく出力されないというバグがありました。
  • バグフィクス: gauche.array中に、存在しない手続きを呼んでいる というバグがありました。
  • MacOS Xで最近のdlcompatライブラリを使っている場合に 拡張ライブラリの動的ロードがうまくいかない問題を修正しました。
  • Cygwinで、math.mt-randomモジュール中のいくつかの 手続き(uvectorを参照するもの)が使えなかった問題を修正しました。

2003/3/30

Gauche release 0.6.8: メンテナンスリリース

  • 正規表現エンジンの改良: ほぼPOSIX拡張正規表現互換になりました。 また、Perlの拡張である捕捉なしのクラスタリングや単語境界のアサーション 等が採り入れられました。詳しくはリファレンスマニュアルの 「正規表現」の項を参照して下さい。
  • 文字集合と正規表現での '\w' に、Perlに習って アルファベットと数字に加えてアンダースコアを含めることにしました。
  • MacOS Xでpthreadを使えるようにするパッチ(from HISAZUMI Kenji) を適用しました。
  • バグフィクス: gauche.netをスレッドセーフに。
  • バグフィクス: autoloadをスレッドセーフに。
  • バグフィクス: srfi-19make-timeを仕様に合わせました。
  • バグフィクス: 大文字小文字を区別しないコンテキストでの正規表現内の 文字集合が'z'と'Z'をうまく扱っていなかったのを修正。
  • バグフィクス: マルチバイト文字列に対する文字列ポインタのふるまいの修正。
  • バグフィクス: 汎用イテレータのハッシュテーブル用メソッドの修正 (Patch from Kimura Fuyuki)。
  • バグフィクス: 存在しないモジュール名が渡された時に define-in-moduleがSEGVる問題の修正 (Patch from Kimura Fuyuki)。
  • バグフィクス: text.parse内のnext-tokenの修正 (Patch from Grzegorz Chrupala)。
  • バグフィクス: rfc822-parse-dateが認識しない日付フォーマット があったのを修正 (Patch from OGURISU Osamu)。
  • バグフィクス: 非常に大きいbignumが作られた時の振る舞いがおかしかったのを 修正。bignumがシステムの制限を越えた場合はエラーを通知するように しました。
  • バグフィクス: トップレベルのREPL毎に戻り値の個数を正しく合わせるように 修正。
  • util.listに手続きintersperseを追加。 また、util.listsrfi-1を継承するようにしました。

2003/2/10

Gauche-gl release 0.2.2

  • gl.math3dに新しい手続きをいくつか追加しました。
  • GLUTがCPUを消費しまくる問題を修正しました (Patch from Yokota Hiroshi)。
  • GLUTのexample gears.scmを追加しました (Ported by Yokota Hiroshi)。

Gauche-gtk release 0.3

  • Schemeから<gtk-widget>を継承して新しいクラスを定義できるように なりました。また、GTk widgetを通常のmakeメソッドで 生成できるようになっています。例: (make <gtk-window>)
  • メモリ管理のコードをクリーンアップしました。READMEファイルを参照して下さい。
  • GTk 2.2 に対応しました (Patch from Alex Shinn)。
  • gtkglext 0.6 及び 0.7 に対応しました。
  • コンパイラがwarningを出していたコードおよび、問題があったexampleの コードを修正しました(Patch from Yokota Hiroshi)。
  • gdklibの初期化コードが無かったのを修正しました(Patch from Kimura Fuyuki)。

詳しくは拡張パッケージを参照して下さい。

2003/2/7

0.6.7に2つのバグが見付かりました。アプリケーションによっては大きな 影響を受けるので、パッチを適用した版を0.6.7.1としてリリースします。 修正されるバグは以下の2つです。

  • copy-portが、:unit引数にバッファサイズとして 整数の値を受けた場合にエラーとなります。
  • ces-convertで、漢字1文字だけからなるeuc-jpもしくは shift_jisの文字列をutf-8に変換しようとすると、空文字列が返ります。

2003/2/6

Gauche release 0.6.7 : 機能拡張

  • 新モジュールと拡張された機能:
    • 新モジュール srfi-37: コマンドライン引数のパーザです。
    • 新モジュール util.combinations: Alex Shinn氏による、順列組合せ等を計算するモジュールです。
    • 新モジュール util.list:追加のリスト処理ライブラリ。
    • gauche.testの改良: `test' 手続きは、テストとして渡された手続き中で発生したエラーを 捕捉するようになりました。新たに導入された変数 *test-error*は特殊な「エラー値」を保持し、 テスト中にエラーが起きた場合に test が返す値と 比較することで、「エラーが起きるべき場合」をテストすることが できるようになりました。また、テストを簡単に書くためにtest* マクロも導入されています。さらに、新しいtest-module 手続きはモジュール中のautloadやexportされたシンボルと 実際に定義されている変数の間に矛盾が無いかどうかを検査します。
    • gauche.charconvの改良: 変換手続きは、符合化文字方式(CES)名として文字列だけでなく シンボルも取るようになりました。gauche-character-encoding の戻り値も直接渡せます。 新たな手続き ces-equivalent?ces-upper-compatible? によってCESの互換性を 調べることが出来ます。また、 wrap-with-input-conversionwrap-with-output-conversion によって、 必要な時のみ変換ポートを作成する操作が簡単になりました。 また、CES "none" のセマンティクスが明確にされました。
    • gauche.sequenceの改良:新しいイテレータ、 fold-with-indexmap-with-indexmap-to-with-indexfor-each-with-indexfind-indexfind-with-indexが追加されました。
    • www.cgiの改良:cgi-mainに、 出力時に文字コード変換をさせるようにすることができます。
    • ポート操作の拡張:port->string等の性能が 改善されました。また、新しい手続き with-port-lockingによって、ポートを操作中に 明示的にロックすることで性能向上が図れます。 peek-byteを追加しました。
    • sortsort!がvectorもソートするようになりました。
    • make-moduleによって、モジュールを動的に生成できるように なりました。無名のモジュールもサポートされます。 サーバーアプリケーションに便利です。
    • loadload-from-port:environmentキーワード引数を取ります。 渡されたモジュール中で読み込んだ式を評価するためのものです。
    • ハッシュテーブルのコンストラクション手続きhash-table、 及びイテレータhash-table-foldが追加されました。
    • file.util中のdirectory-list:filter-add-path?キーワード引数を取るようになりました。
  • バグフィクス
    • string=?は完全な文字列と不完全な文字列が渡された時に エラーになっていました。現在はそのような場合は#fが返ります。
    • ユーザ定義オブジェクト同士を比較する場合に、 object-equal?が定義されていないと、たとえオブジェクトが eq?であってもequal?#fを 返していました。
    • gauche.regexprxmatch-caseが 無限ループに入る可能性があったバグを修正 (Patch from Kimura Fuyuki).
    • math.mt-random: bignumがseedとして渡された時、 mt-set-random-seed!は引数にかかわらず同じ値を seedとしてセットしていました。
    • text.csv:セパレータがtab文字の時に、 連続するtab文字がひとつのtab文字と同じように解釈されて いました。
    • rfc.uriuri-encodeが、内部エンコーディングと 異なる文字列を受け取った場合にエラーとなってしまっていました。
    • gauche.net: データグラムソケットを扱うための John Kilburgによるパッチを適用しました。
    • gauche.net:ソケットオブジェクトが、それを使用中の ポートがあるにもかかわらずGCされてしまう可能性があったバグを 修正しました。
    • hash-table-map:ハッシュテーブルにキーを #<eof>とするエントリがあった場合にそこで繰り返しが 終ってしまっていました。
    • srfi-1, srfi-13:いくつか、 あるべきautoloadが存在していませんでした (Patch from Kimura Fuyuki)。
    • sys-putenvに渡された文字列がGCされてしまうという バグがありました。
  • その他の変更
    • ソースコード中のリテラルのuvectorは変更不可ベクタとして 扱われるようになりました。

2002/12/15

Gauche release 0.6.6 : たくさんのバグフィクスと機能拡張

  • バグフィクス:
    • gauche.net に、メモリを壊す危険なバグがありました。
    • file.util: file-mtime=? 系の手続きが、 引数にファイル名を与えられた時に動作していませんでした。
    • doフォーム中でcall/ccを呼んでいる場合に gosh がクラッシュすることがある危険なバグを修正しました。
    • make-stringに負の文字列長が与えられた場合をチェックして いませんでした。
    • slot-missingslot-unboundメソッドが、 write-object中から呼ばれた場合に無限ループを引き起こす 場合がありました。
    • srfi-19: 日付のパーズ関数中のバグ修正 (Shin-ichi Hirataさんよりパッチ)。
    • rfc.822: 空のメッセージヘッダも扱えるように修正。
    • rfc.cookie: 古いスタイルのクッキーをフォーマットする コードにバグがありました (KIMURA Shigenobuさんよりパッチ)。
    • gauche.time: typoのfix (Kimura Fuyukiさんよりパッチ)。
    • ドキュメントに対する多数のパッチを頂きました: Kimura Fuyuki、Jiro KANAYAMA、KIMURA Shigenobu各氏。
    • 文字列の補間構文がリーダーで解釈されるようになりました。 また、文字列の補間構文を健全なマクロ内で使った場合に 変数参照がうまくいかなかった問題が解決されました。
    • 内部文字エンコーディングがUTF-8の場合に、 正規表現中のマルチバイト文字のマッチがうまくいかなかったのを修正。
    • UADDのインラインアセンブリが、Intelコンパチブルの プロセッサによってはコンパイルできなかった問題を修正。
    • SRFI-30のコメントリーダの不具合を修正。
    • ハッシュテーブルのイテレータのバグ修正(Kimura Fuyukiさんよりパッチ)。
  • 新たなモジュールと手続き
    • util.digest, rfc.md5, rfc.sha1, rfc.hmac: Kimura Fuyukiさんによるメッセージダイジェスト ライブラリを統合しました。
    • srfi-31: SRFI-31の`rec'を オートロードマクロとしてサポートしました。
    • gauche.hook: Guileコンパチブルな `hook' 機能のサポートです。
    • gauche.parameter: PLT Schemeと同じように、 パラメータの値がスレッド毎に保持されるようになりました。 また、パラメータにフックを付けることもできます。
    • ポートの読み書きポインタをport-seekport-tell 手続きによって読みだしたり変更したりすることができるようになりました。
    • make-byte-stringを追加しました。
    • has-setter?を追加しました。
  • その他の変更
    • string-splitが、デリミタとして文字だけでなく 文字セットや文字列、正規表現、述語手続き等を取れるように なりました。
    • srfi-14ucs-range->char-setが 非ASCII文字に対しても動作するようになりました。
    • open-output-fileが、if-existsキーワード 引数に:overwriteを取れるようになりました。これは、 ファイルが既に存在していた場合に、ファイルを切り詰めずに 先頭から上書きしてゆくオプションです。port-seekと 併せて使うと便利です。
    • gauche.logger: `lock-policy' スロットが追加され、 ファイルロックの方法を選べるようになりました。また、fcntlのlock をサポートしていないMacOSXでも使えるようになりました。
    • ビルドされたソースツリー中から起動された場合に goshがカレントディレクトリと../libを 暗黙のうちにロードパスに加えるという機能を取り除きました。 インストールせずに走らせてみる場合は明示的に-ftest オプションを与える必要があります。

Gauche-gl release 0.2.1 : このリリースでは、FreeBSDでのインストールに 関する問題が解決され、またgl.math3dの不具合が修正されています。

Gauche-gtk release 0.2.4 : gtk-text-viewとgtk-tree-modelのAPIを 追加しました。gtk-tree-view-set-cursorを修正しました。 インタラクティブリスナーがEOFを読んだ時にアプリケーションを終了 するようにできるオプションを追加しました。

2002/11/20

Gauche-gtk release 0.2.3 : Schemeレベルのコンストラクタがウィジェットを だぶって作ってしまうというバグを修正しました。また、gtk-dialog-new-with-buttons を追加しました。

2002/11/14

Gauche release 0.6.5 : 様々なバグフィクスと機能拡張

  • 新モジュール
    • rfc.http - httpクライアントメソッド
    • gauche.reload - 開発者向けの、モジュールをリロード するための便利な手続き
    • gauche.listener - リスナー (並行して走る read-eval-printループ)をシングルスレッドで実装する際に 便利なライブラリ
    • gauche.config - 実行中のGaucheの コンフィグレーション情報を取る手続き
  • ヘルパーマクロlet-optionals*を正式にサポートしました。 また、let-keywords*get-optionalget-keyword*といったマクロも追加しました。
  • rfc.uriuri-composeを追加しました。
  • コンビネータany-predevery-predを追加しました。
  • GCをBoehm gc 6.1にアップデートしました。
  • ext/uvectorのコンパイルがプラットフォームによっては失敗していた 問題を修正しました。
  • sys-timesがプラットフォームによってはエラーになっていた問題を 修正しました。
  • 必須引数を取らないメソッドも定義できるようにしました。
  • string.c内で、マルチバイト文字列の接続時に問題がでる可能性のあった バグを修正しました。これによって、formatで~sディレクティブ にmaxcolパラメータを指定した場合にマルチバイト文字列が きちんと表示されないことがあるというバグも解消されています。
  • gauche.charconvが、本来エラーでないのにエラーをあげるバグを 修正しました。
  • gauche.procedureのarity-at-least-valueがバグで動作していなかったのを 修正しました。
  • あまりにも長い引数リストをapplyしようとした時にSEGVるバグを 修正しました。
  • copy-portの性能を改善しました。
  • 不完全な文字列の外部表記に#"..."は使えなくなりました。
  • 正式にサポートしていませんが、port.* モジュールを compat.* へ 移しました。
  • gauche-configスクリプトが引数--mandirと--infodirを取るようになりました。
  • モジュールgauche.singletonとgauche.validatorをそれぞれ gauche.mop.singletonとgauche.mop.validatorに移しました。 元のモジュール名も互換性のために動作するようにしてありますが、 いずれ完全に新しい方に移行します。

Gauche-gtk 0.2.2: gtk-mainを呼んだ後でもインタラクティブなreplが 持てるようになりました。gauche.listenerを使って実装されています。 詳しくはREADMEファイルを見て下さい。また、GtkTreeStore, GtkTreePath, GtkTreeSelection他いくつかのAPIが追加されました。

2002/10/14

Gauche release 0.6.4 : 若干のバグフィクスと機能拡張です。

  • gauche.uvectorの拡張: バイナリブロックI/O (read-block!, write-block)、 データエリアの共有(uvector-alias)、文字列との相互変換 (u8vector->string等) を行う手続きを追加しました。 内部的には、データストレージとオブジェクトヘッダを別々に持つように 構造体が変更されています。
  • 新モジュール gauche.time: 実行時間の計測に使えるモジュールです。
  • goshのコマンドライン引数の処理を修正し、 -I-e-l-u等の 状態を変えるオプションが出現順に処理されるようになりました。 (今までは各オプション毎にまとめた後、それぞれのオプション内で 出現順に処理されていました)。 また、-A (指定パスを現在のロードパスの末尾に追加)、 -E (指定コマンドの外側に括弧を補った上で評価)、のオプションが 追加されました。なお、この変更で、初期化ファイルgauche-init.scm-I-Aオプションが処理される前に読まれるように なります。もし標準でない場所にあるgauche-init.scmを読ませたい 場合は次のように明示的に指定して下さい。
                gosh -q -Imy/local/directory -lgauche-init
  • gauche.sequenceの拡張: gauche.collectionを継承するようにしました。 また、subseqのsetter手続きを定義しました。
  • file.utilsモジュールにhome-directory手続きを 追加しました。
  • SRFI-1のいくつかの手続きとport->stringの性能を 向上させました。
  • gauche.charconvで、変換先のコードに"iso-2022-jp"を 指定するとハングすることがあるバグを修正しました。
  • ドキュメント(info、manpages)のデフォルトのインストールパスを autoconfのデフォルト (${prefix}/manと${prefix}/info) に 戻しました。(過去のいくつかのリリースでは${prefix}/share/manと ${prefix}/share/infoになっていました。) これらのパスは configureの--mandirと--infodirオプションでカスタマイズできます。

Gauche-gl release 0.2 : gl.math3dモジュールを追加。 3D homogeneous coordinatesを扱うベクタや行列演算、及び四元数演算の モジュールです。

2002/9/24

Gauche-gl release 0.1.6 : テクスチャ関連とセレクション関連のAPIを 追加しました。 また、gl-call-listsが文字列もバイトアレイとして引数に取れるようになりました。 Exampleもいくつか追加されました。拡張パッケージ からダウンロードできます。

Gauche-gtk release 0.2.1 : TAGA Yoshitakaさんからの、UTF-8エンコーディング でのコンパイルの問題をfixするパッチを取り込みました。また、gtk-radio-menu-item のサポートを追加しました。拡張パッケージ からダウンロードできます。

最近のいくつかのGaucheのリリースに、手違いによりインストール手順の説明ファイル が含まれていませんでした。 こちらのINSTALL.eucjpを参照して下さい。

2002/9/21

Gauche release 0.6.3 :

  • コンパイラとVMの実装を改善しました。関数呼び出しが多いアプリケーションでは 5%-10%の性能改善が見られるでしょう。
  • Object-apply hook: 手続きではないオブジェクトが「適用」されると 自動的にジェネリックファンクションobject-applyが起動する メカニズムが実装されました。例えば、次のようなメソッドを定義しておくと:
        (define-method object-apply ((s <string>) (i <integer>))
          (string-ref s i))
    ("abcde" 2)#\c を返すようになります。 このメカニズムは手続きが許されるほとんどの場所で使えます。例えば: (map "abcde" '(1 2 3)) => '(#\b #\c #\d). 詳しくはリファレンスマニュアルの「適用可能なオブジェクト」の章を 参照して下さい。
  • Regexpの改善:
    • <regexp>および<regmatch>オブジェクト が、上で述べたobject-applyメカニズムを使って「適用可能」に なりました。正規表現を使うコードがコンパクトに書けるようになります。 regexpオブジェクトが文字列に適用されると、あたかもrxmatchが 呼ばれたかのように動作します。regmatchオブジェクトが整数に適用されると、 あたかもrxmatch-substringが呼ばれたかのように動作します。
       
          (define m (#/(\d+) (\d+:\d+:\d+)/ "Sep 22 00:01:02 2002"))
          m           =>  #<regmatch>
          (m)         =>  "22 00:01:02"
          (m 1)       =>  "22"
          (m 2)       =>  "00:01:02"
          (m 'before) =>  "Sep "
          (m 'after)  =>  " 2002"
    • 大文字小文字を区別しない正規表現オブジェクトを作れるようになりました。 リテラル表記では、後ろに'i'を付けます (例: #/abc/i)。 文字列から実行時に作成する場合はstring->regexpの キーワード引数case-foldに真の値を渡します。 (今のところ、大文字小文字の同一視はASCIIの範囲についてのみ行われます)。
    • [:alpha:] のような、POSIXキャラクタクラスの指定が 行えます。
    • 手続きregexp->stringregexp?が追加されました。
  • 文字セットリーダの改善:[:alpha:] のような、POSIXキャラクタクラス 表記が認識されます。例:#[[:alpha:]]
  • リテラルの不完全な文字列の表記が#"..."から #*"..."に変更されました。古い表記もしばらくは認識されますが、 いずれ古い表記の方を文字列の補間機能で使おうと考えているので、 そちらを使っているコードはなるべく早く新しい表記に移行して下さい。 (あまり無いと思いますが)。
  • モジュールの追加:gauche.syslog - syslog(3) APIです。
  • gauche.loggerの改善: ログのプレフィクスを生成するのに、 文字列だけでなく手続きを渡せるようになりました。また、ログファイルの パスとしてシンボルsyslogを渡すと、システムログの方に ログを送るようになりました。
  • バグフィクス: file.utilにおいて、ディレクトリ内に 存在しないファイルへのシンボリックリンクがあると directory-fold等がエラーになるという問題がありました。
  • モジュールの追加: rfc.quoted-printable
  • バグフィクス:math.mt-randomで、DSOをリンクする際に :export-symbols #tとするようにしました。これで、このDSOを使う 他のCで書かれた拡張モジュールがリンクできるようになります。
  • バグフィクス:configure.in内でautoconf変数にGZIPというのを 使っていましたが、これがgzipの使う環境変数とバッティングしていました。 GZIP_PROGRAMに変更しました。

2002/9/17

日本語MLをSourceForge.netからSourceForge.jpに移しました。

2002/9/14

Gauche-gtk に、Gaucheの内部エンコーディングをUTF-8にしていると コンパイル出来ないというバグがありました。TAGA Yoshitakaさんから パッチを提供して頂きました。

2002/9/12

Gauche-gtk 0.2 : GtkGLExtバインディング、<g-timer>サポート、 <pango-font-description> サポート、GDK keysymsサポートが追加されました。 拡張パッケージのページからダウンロード できます。

2002/9/6

Gauche-gtk 0.1 : GaucheのGTK2バインディングの最初のリリースです。 欠けているAPIがまだ大量にあると思いますが、試してみてください。 拡張パッケージのページからダウンロード できます。

2002/9/2

Gauche release 0.6.2 :

  • モジュールの継承: モジュールが継承できるようになりました。 既存のモジュールの拡張を書いたり、いくつかのモジュールを束ねて 一つのモジュールに見せたりすることができます。 リファレンスマニュアルの「モジュール」の項を参照してください。
  • ネスト可能なブロックコメント#| ... |#をサポートしました。 これはSRFI-30で定義されているほか、主要なScheme実装で広く使われています。
  • デバッグ用のプリントスタブを簡単に埋め込む構文 (#?=) の 正式サポート。リファレンスマニュアルの「デバッグ」の項を参照してください。
  • バグフィクス:SIGINTのハンドラが設定されている状況でreadが シグナルで中断された時に、readがEOFを返してしまうという バグを修正しました (Thanks to Julian Fondren for reporting this).
  • バグフィクス:enable-debugが過去数リリースで壊れていました。
  • バグフィクス:regexpが #/a|(b)|c/ のようなパターンでおかしな動作を していました (Thanks to Alex Shinn for reporting this).
  • SIGHUP, SIGQUIT, SIGTERMに対しては、デフォルトで インタプリタを終了させるようなシグナルハンドラがインストールされるように なりました。これで、Emacs内でgoshを使っていてSchemeバッファを killした場合にもgoshが正しく終了します。
  • 新しい手続き:fixnum?, bignum?, string-pointer-copy, string-pointer-byte-index (these two are contributed by Alex Shinn), keyword->string, read-eval-print-loop, sys-nanosleep。
  • 新しい手続き(util.queueモジュール内):queue-length, list->queue, queue->list, find-in-queue, remove-from-queue!。

Gauche-gl release 0.1.5:

  • 木村栄伸氏により、MacOS Xでも動作するようになりました。
  • glut-initのフィクス。
  • gl-call-lists及びGL1.2のいつくかの手続きの追加。
  • examplesをいくつか追加。

2002/7/31

Release 0.6.1 : バグフィクスリリースです

  • バグフィクス: エラー時のスタックトレース表示が出なくなっていたのを 直しました。
  • バグフィクス: Emacsからgoshを使っていて、Emacsを終了させると goshがコアダンプするというバグを直しました (Thanks to Sakae)
  • スタブジェネレータgenstubを変更して、よりコンパクトにスタブ仕様が 記述できるようになりました。stubファイルの書式が若干変更され、 以前と非互換な部分があります。
  • stubファイルの書式変更に合わせたGauche-glの新バージョン0.1.4も リリースしました。これには機能追加等はありません。

2002/7/18

Release 0.6

  • スレッドサポート: プラットフォームがサポートしていれば、 pthreads上に構築したスレッドライブラリが使えるようになりました。 SchemeレベルAPIはSRFI-18互換です。スレッドを使うには、configure 時に'--enable-threads=pthreads'を指定する必要があります。 詳しくはディストリビューション中のINSTALL.eucjpファイルを 参照して下さい。作者が確認したスレッドが使えるプラットフォームの リストもどうぞ。
  • デフォルトでinfoドキュメントがビルド/インストールされます。
  • オンラインドキュメント: infoドキュメントがインストール されている場合、インタラクティブモードで info手続きにより 手続きやマクロのinfoファイルのエントリを閲覧することができます。 (info 'info)等。 詳しくはリファレンスマニュアルの gauche.interactiveモジュールの項を 参照して下さい。この機能はどのくらい便利かをみるために 実験的につけてみました。
  • シグナルハンドル関連のバグをいくつか修正し、全体をクリーンアップ しました。set-signal-handler!get-signal-handlerget-signal-handlerssys-sigmasksys-sigsuspendといった手続きが 追加されています。また、sys-pauseがシグナルを捕まえ損ねる 問題があったのを直しました。
  • gauche.netモジュールで、socket-bindおよび make-server-socketにポート番号として0を渡せるように しました。システムがポート番号を割り当てます。割り当てられたポート 番号はソケットのアドレスを得ることで参照できます。 (thanks to 小田英生さん)。
  • call/ccとdynamic-windのバグの修正。捕捉した継続をトップレベルの 変数に代入して、それをトップレベルから再起動した時に、 dynamic-windのハンドラが正しく呼ばれないことがありました。
  • 環境変数からライブラリサーチパスを取り出すコードのバグフィクス (thanks to Alex Shinn)。
  • gauche.uvectorコードで、s64vector/u64vectorを使った際に クラッシュするバグの修正。
  • goshスクリプトで、Schemeのmain関数から戻ってスクリプトを終了 した際にバッファードポートがフラッシュされないバグを修正。 (thanks to 藤井さん)。

2002/6/30

Release 0.5.7

  • Boehm GCをversion 6.1alpha5にアップデートしました。
  • 文字をUnicodeの16進数コードでも表記できるようにしました。 文字リテラルは#\uXXXXもしくは#\uXXXXXXXX、 文字列リテラル中では\uXXXXもしくは\UXXXXXXXXです。 Gaucheの内部文字エンコーディングがUTF-8以外の場合は、 リーダーが変換ルーチンを呼んで内部エンコーディングに変換します。 char->ucs及びucs->charという手続きも提供されます。
  • SRFI-25 (多次元配列) のサポート。gauche.arrayモジュールにより、 SRFI-25のスーパーセットが提供されます。詳しくはリファレンスマニュアルの 「ライブラリモジュール-配列」の項を参照して下さい。
  • SRFI-26 (cut、cuteマクロによる部分適用) のサポート。 リファレンスマニュアルの「基本的な構文 - 手続きを作る」の項を 参照して下さい。
  • SRFI-28 (basic format string) のサポート。 従来のGaucheの組み込み手続きformatで、 第一引数のportを省略できるようにしました (その場合はフォーマットされた文字列を返します)。 これでformatがSRFI-28上位互換になります。
  • モジュールsrfi-4gauche.uvectorと改名し、 算術演算など多くの手続きを追加しました。モジュールsrfi-4gauche.uvectorの別名として残してあるので後方互換性は 保たれます。
  • gauche.charconv中の、UTF8からEUC_JPへの変換ルーチンの バグを修正しました。
  • makeのターゲットにuninstallを追加しました。

2002/6/14

Release 0.5.6 : バグフィクス・機能追加リリースです。

  • JIS X 0213:2000日本語文字集合のサポート。文字エンコーディング EUC_JP、Shift JIS、UTF-8、ISO2022JP(-n)間の 変換はiconv()ではなくGauche内部で処理されます。 したがって、iconv()が無い、もしくはあるが日本語のサポートが 不十分であるプラットフォーム上でも日本語を扱うことができるように なりました。詳しくはリファレンスマニュアルのgauche.charconv の項を参照して下さい。
  • SRFI-27 (Source of random bits)のサポート。
  • マクロdolistを追加しました。誘惑に負けました。 やっぱりあると便利だ。
  • Cygwinで、DLL中のアクティブなオブジェクトがGCされてしまうという 危険なバグをfixしました。
  • char->integerが変な値を返すことがあるバグを修正 (thanks for Sven Hartrumpf)。
  • goshのusageメッセージを修正 (thanks for Sven Hartrumpf)。
  • vector-fill!が省略可能なstart, end引数を取るようになりました (SRFI-13のstring-fill!とパラレルになります)。

2002/5/27

Release 0.5.5 : 機能追加リリースです。

  • モジュール math.mt-random : Mersenne-Twister乱数発生器 の実装です。
  • モジュール srfi-19: SRFI-19 (Time data types and procedures) のサポートです。
  • pa$ (partial apply)、compose 等の コンビネータが追加されました。標準手続きmapfor-each の部分適用版であるmap$for-each$ 等も定義されて います。リファレンスマニュアルの「コンビネータ」の節を参照して下さい。 例えばこんなふうにコードを書けます。
           (define map2* (map$ (pa$ * 2)))
           (map2* '(1 2 3)) => (2 4 6)
    
           (define dot-product (compose (apply$ +) (map$ *)))
           (dot-product '(1 2 3) '(4 5 6)) => 32
  • 手続き copy-filemove-filetouch-filefind-file-in-pathsfile.utilモジュールに追加されました。
  • 手続きのアリティを調べる手続きarityprocedure-arity-includes?arity-at-least-valueが追加されました。 リファレンスマニュアルの「手続きのアリティ」の節を参照して下さい。
  • 新しい構文 define-constantset!-valuesbegin0let1
  • モジュール math.const : よく使う数学定数(π, e等)の定義です。
  • システム手続き sys-utime
  • SRFI-18, 19, 21と互換性のある時間の表現である<time> クラスが組み込みクラスとして追加されました。SRFI-18に定義されている current-timetime->seconds 及びseconds->timeも定義されます。
  • 組み込みのsort手続きのワーストケースに対する動作が改善されました。

2002/5/4

Release 0.5.4 : 主としてI/O関係の機能追加です。

  • バッファードI/Oルーチンを、stdioを使わずにGauche内で実装しました。 これによりI/O性能が若干向上し、コードサイズが減少し、 バッファリングのふるまいをプログラマがより細かく指定できるように なりました。これに関連して次のような機能追加があります。
    • char-ready?がバッファードポートに対しても動作します。
    • open-{in|out}put-filesocket-{in|out}put-port)のようなファイルポートに 関係するルーチンにおいて、bufferingキーワード引数によって バッファリングの振舞いの指定ができます。詳しくは リファレンスマニュアルの「ファイルポート」の項を参照して下さい。
    • キャラクタI/OとバイトI/Oを混ぜた場合の動作が不安定だったのが 修正されました。
    • flush-all-portsが追加されました。
    • 与えられたファイルディスクリプタからポートをオープンする open-input-fd-portopen-output-fd-port が追加されました。
  • 高レベルのファイル/ディレクトリユーティリティ関数が file.util として追加されました。
  • Weak vectorが追加されました。リファレンスマニュアルの 「Weak pointer」を参照して下さい。
  • "parameter"が追加されました。リファレンスマニュアルの gauche.parameterを参照して下さい。
  • Pseudo ttyインタフェース関数sys-openptysys-forkptygauche.termiosモジュールに 追加されました。
  • define-valuesが追加されました。
  • port?が追加されました。
  • <sys-stat><sys-group><sys-passwd>等のシステムオブジェクトが 通常のオブジェクトとほぼ同様に振舞います。すなわち、各種情報が 特別なアクセス関数ではなくスロットとしてアクセスできるように なりました。
  • 内部のダイナミック文字列の処理の性能が向上しました。
  • メタオブジェクトプロトコルのコードの一部にメモリを壊す バグがあったのを修正しました。
  • 特定の条件下で末尾再帰の最適化がなされなかったコンパイラのバグを 修正しました。

2002/4/15

Release 0.5.3 : バグフィクスリリースです。

  • 数値の入出力ルーチンを全面的に書き直しました。 浮動小数点数を(ほぼ)正確に読み書きします。 また、exactnessとradixのプリフィクスが同時に指定された場合を 正しく認識します。有理数の構文も認識するようになりました (読んだ時点で実数に変換されます)。 また、magnitude@angle形式の複素数も読みます。
  • モジュールslibがslib2d3で動かなくなっていたのを修正し、 またインストール時にカタログファイルslibcatを作成するようにしました。
  • (write* '#())の出力がおかしかったのを直しました。
  • (let* ((x 1) (x (+ x 1))) x) のように重複する変数名を 持つlet*フォームを正しくコンパイルするようにしました。
  • 追加された手続き:print, decode-float, min&max.

2002/3/30

Gaucheからslib2d3を使おうとするとエラーになります。これを避けるには、 src/gauche-init.scmにある 'use' マクロの定義を以下のものに置き換えて下さい。

    (define-macro (use module)
      (let* ((mod  (cond ((symbol? module) module)
                         ((identifier? module) (identifier->symbol module))
                         (else (error "use: symbol required:" module))))
             (path (string-join (string-split (symbol->string mod) #.) "/")))
        `(begin (with-module gauche (require ,path))
                (import ,mod)))
      )
    

2002/3/8

Release 0.5.2 : バグフィクスと若干の機能拡張です。

  • 新機能 : String interpolation. リーダー構文 #`"..."は、実行時に文字列中に埋め込まれたScheme式を 評価した文字列を生成する式に展開されます。例えば、 #`"結果は,(+ 2 3)" という式は "結果は5" という値になります。詳しくはリファレンスマニュアルの 「文字列の補間」の項を参照して下さい。
  • マクロ展開ルーチン内のバグフィクス。
  • バグフィクス:sys-mkstempが正しく動作していませんでした。
  • バグフィクス:call-with-input-file 等の実装が正しくありませんでした。 以前の実装では、これらの手続きの動的環境内で捕捉された継続を後から リスタートした場合に正しく動作しませんでした。
  • バグフィクス:text.html-lite モジュールで、パラメータ内の バックスラッシュがエスケープ時に変になっていました。
  • Cygwin上で時々ビルドに失敗する問題の修正。
  • POSIXおよび他の Cコンパチブルな手続きを更に追加。
  • 新モジュール: file.filter
  • man形式のマニュアルページを追加しました。
  • RPMパッケージも作成しました。

2002/2/16

Patch for 0.5.1: 次の二つの問題を解決します。

  • MacOS X (Darwin kernel version 5.2): extensionのビルドが失敗する問題
  • Cygwin: 'configure' がしばしば必要なファイルを生成できない問題

他のプラットフォームに影響はありません。

2002/2/14

Release 0.5.1 : 移植といくつかのバグフィクス

  • Cygwinへの移植:DLLとダイナミックロード可能なextensionが Windows 2000/Cygwin 1.3.9 上で動くようになりました。
  • HP-UX 11.0 と FreeBSD 2.xへの移植:Abe Hiroshiさんのパッチにより、 これらのアーキテクチャに移植されました。
  • バクフィクス(非互換な変更): goshmainにコマンドライン引数リストを渡すインタフェースが SRFI-22の最終形に従った形式に変更されました。以前のGaucheの ために書かれたスクリプトは動作しなくなる可能性があります。 「リリース0.5以前のスクリプトとの互換性」 を参照して下さい。
  • バグフィクス:uvectorのアクセサの一部といくつかの数値演算関係の 関数に範囲外の数値を与えた時の挙動がおかしかったのを修正 (パッチ提供:Abe Hiroshiさん)。
  • バグフィクス:read-byteが0x7f以上のバイトを読み込んだ時に いくつかのプラットフォームでEOFを返していたのを修正 (パッチ提供:Abe Hiroshiさん)。
  • バグフィクス:cond-expand (srfi-0)が動作していませんでした。 今は動作するようになり、またcond-expandはオートロード されます。'gauche' というfeature idが追加され、 ポータブルスクリプトにGauche特有のフォームを (cond-expand (gauche ...)) という形式で 含めることができるようになりました。
  • 修正:goshにスクリプトファイルが相対パスで与えられた場合、 ロードパスにカレントディレクトリが含まれていなくても、 スクリプトファイルをまずカレントディレクトリから探すようになりました。
  • 修正:ニーモニックによる文字リテラル (#\newline等) は リーダーのモードにかかわらず大文字小文字を区別しないで認識されるように なりました。
  • gosh-l-eオプションが追加 されました。 -lオプション(load) は指定ファイルを ロードし、-eオプション(eval) は引数で与えられた Scheme式を評価します。
  • gauche-config--ac--reconfigure オプションが追加されました。 gauche-config --help で説明が出ます。
  • gauche.versionモジュールが追加されました。
  • XMLパーザのモジュールが拡張モジュールとして提供されます。 拡張パッケージを参照して下さい。

2002/2/2

ドキュメントの日本語マニュアルへのリンクが 英語マニュアルを指していたのを直しました。

2002/1/30

Release 0.5

  • シグナルハンドリングの機能を追加しました。with-signal-handlers マクロによってシグナルハンドラをSchemeで書くことができます。 詳しくはリファレンスマニュアルのシグナルの項を参照してください。
  • 重要な変更: Gaucheはデフォルトで、シンボルの読み込み時に 大文字小文字を区別するようになりました。コマンドラインオプションに よって、R5RS準拠の大文字小文字を区別しない動作にすることもできます。 リファレンスマニュアルの「大文字小文字の区別」の章を参照して下さい。
  • バグフィクス: コンパイラの最適化ルーチンのバグで、 (+ 1 (if 0 1)) が正しく計算されなかったのを修正しました。
  • バグフィクス: exit手続きは終了する前にダイナミックハンドラの 後処理ルーチンを呼ぶようになりました。

2002/1/7

Release 0.4.12: メンテナンスリリース

  • バグフィクス: SJISとUTF-8のサポートにいくつか重大なバグがありました。 テストケースを整えたので、現在は(少なくとも日本語に関しては)両者とも 動作すると思います。
  • バグフィクス: (define-macro foo (lambda (arg ...) body ...)) という形で定義されたレガシーマクロに引数が正しく渡されていませんでした。
  • バグフィクス: evalの第2引数が規格通りに解釈されるようになりました。
  • バグフィクス: デバッガ内のバグをいくつか直しました。

FreeBSD 4.4 附属の libiconv 2.x (/usr/local以下のもの)では gauche.charconvの動作に不具合が出るとの報告がありました。GNU libiconvを 使えばうまく行くようです。tarballに含まれるINSTALL.eucjpを参照してください。

2001/12/21

パッチ: リリース0.4.11に、会話環境でエラー時にスタックが リセットされないというバグがありました。そのまま使っているとエラーメッセージが見にくく なってしまいます。パッチ../vault/Gauche-0.4.11.patch を適用して下さい。

2001/12/20

Release 0.4.11:

  • 重要な変更: カレントディレクトリ ``.'' は*load-path* にデフォルトでは含まれなくなりました。必要な場合は、コマンドラインオプション -I.もしくは add-load-path フォームを使って ``.'' をロードパスに明示的に追加して下さい。
  • autoload機能が強化されました。マクロもオートロードするように設定できます。 また、ファイルだけでなくモジュールもオートロードできるようになりました。 例えばgauche.regexpモジュールはデフォルトでオートロードされるように 設定されるようになりました。
  • スタックトレースに、可能ならばソースファイルの情報も表示されます。
  • 実験的なデバッガが追加されました。トップレベルで(enable-debug) を評価すると、以降エラー発生時にデバッガに制御が移ります。今のところ ごく単純なものです---スタックを見たり環境を表示したりできるだけです。 (disable-debug) でデバッガをoffにできます。
  • SRFI-18スタイルの低レベル例外処理機構が、高レベルエラー処理機構である with-error-handlerと統合された形で実装されました。 詳しくはリファレンスマニュアルの「例外」の項を参照して下さい。
  • コマンドライン引数 -fload-verbose を指定すると、gosh がファイルをロードする時に報告するようになります。どのファイルをロードしているのか 確かめたい時などに便利です。
  • フォーマット指示子~a~sが拡張され、最大カラム数を 指定できるようになりました。
  • バグフィクス: dynamic-windが正しく多値を返すようになりました。
  • バグフィクス: r5rsマクロで、(?x ... . ?y)というテンプレートで ?x ... が空の時に展開がおかしかったのを直しました。

2001/12/2

Release 0.4.10:

  • 一般のコレクション型に対する繰り返し処理のジェネリックなフレームワークを 実装しました。gauche.collectionを使うと、 mapfind のような繰り返し手続きが総称関数となり、 様々なコレクション/シーケンスに対して動作するようになります。
            (fold + 0 '#(1 2 3 4)) => 10
            (map-to <vector> + '#(1 2 3) '#(4 5 6)) => #(5 7 9)
            (subseq '#(a b c d e) 1 4) => #(b c d)
    
    詳しくはリファレンスマニュアルの該当する項目を参照して下さい。
  • 多くの組み込みクラスは、そのクラスだけをインスタンスとするメタクラスを持つように なりました。これにより、いわゆる「クラスメソッド」が定義できるようになります。
  • メタオブジェクトプロトコルを応用したモジュール、 gauche.singletongauche.validatorが追加されました。 後者は、スロットの値が変更される際にその値の正当性を検査できるような クラスを定義することを可能にします。
  • (write '(quote a))'a を出力します。
  • 内部のクラスやスロット操作のコードがクリーンアップされました。
  • バグフィクス: is-a? は、第2引数が<class>ではなくその サブクラスでも動作すべきですが、エラーになっていました。
  • バグフィクス: (list-ref '(a b c) 3) がSEGVを起こしていました。 げげげ。
  • バグフィクス: srfi-1のassoc-delete!が動作していませんでした。
  • バグフィクス: www.cgi モジュールの、デフォルトのエラーページ作成ルーチンが 未定義の手続きを呼んでいました。
  • バグフィクス: メタオブジェクトプロトコルのcompute-get-n-setのインタフェースが STklosと互換ではありませんでした。今はSTklosの上位互換になりました。
  • バグフィクス: 文字コード変換ポートが、空文字列に対して開けないというバグがありました。
  • バグフィクス: eqv?-type のハッシュテーブルのtypeフィールドに変な値が セットされていました。

2001/11/14

Release 0.4.9: またまたライブラリの追加とバグフィクス。

  • CGIを書くのに便利なモジュールが増強されています。www.cgiにいくつか手続きが 追加され、またtext.html-liteとtext.treeモジュールが追加されました。
  • 新モジュール: util.queue - Queueライブラリ
  • call-with-*-file, with-{input-from|output-to}-file が open-{input|output}-file と同様のキーワード引数を取ります。
  • バグフィクス: メタオブジェクトプロトコルの実装に、SEGVを引き起こすバグが ありました。
  • バグフィクス: read-lineが、よく使われる行末シーケンス \n, \r, \r\n の全てに対応。
  • バグフィクス: #[] が空のキャラクタセットとして正しく読まれます。
  • バグフィクス: regexpのバグひとつ。

2001/11/1

Release 0.4.8: さらにライブラリの追加とバグフィクス。

  • GCをBoehm GC 6.0に移行しました。FreeBSDでdlopen()したモジュールの データエリアがマークされなかった問題は解決されているようです (どなたかNetBSDで試して頂けたら助かります)。
  • 非互換な変更: モジュールw3c.cgi は www.cgi になりました。
  • DBMインタフェースが追加されました:モジュールdbm, dbm.gdbm, dbm.ndbm, dbm.odbm。リファレンスマニュアルを御覧下さい。
  • 追加モジュール:util.isomorph, util.toposort, text.tree.
  • バグフィクス:string-substitute! がメモリを壊していました。
  • バグフィクス:autoloadが変数参照でも正しく動作するようになりました。
  • バグフィクス:equal?-hashtableが正しく動作するようになりました。
  • バグフィクス:SRFI-13のstring-indexが、start/end引数を与えた状態でも 正しく動作します。

2001/10/14

Release 0.4.7: 再びライブラリの追加とバグフィクス。

  • 日本語マニュアルはじめました。 まだ翻訳途中なのでいきなり英語が混ざったりしています。
  • マクロdotimes, push!, pop!, inc!, dec!追加。
  • list-ref, vector-ref, string-refが追加の引数を取ります。
  • logand, logior, logxor が2つ以上の引数を取ります。
  • goshのコマンドライン引数の認識方法を、スクリプトへの引数がgoshに横取り されないように修正。
  • Oleg Kiselyovの入力パージングユーティリティ互換のモジュール text.parse。同氏の作成したXMLライブラリを使うのに必要です。
  • その他のバグ修正 (thanks to TAGA Yoshitaka)。
また、GaucheのOpenGLバインディングGauche-gl 0.1別パッケージとして公開しました。 OpenGL 1.0/1.1 の大部分の関数と、GLUとGLUTを部分的にカバーします。 Mesaでも動きます。

2001/9/29

Release 0.4.6:

  • 非互換な変更: 一貫性のため、システムで定義されている定数 (access(2) で 使われるR_OK等) をすべて大文字のシンボルにバインドしました。 ソースコード中で使う場合はエスケープする必要があります (例:|R_OK|)。 過去のコードとの互換性のために小文字のシンボルも定義してありますが、将来は 取り除かれます。
  • 様々なライブラリモジュールを追加しました。UnixやPerlのtrの機能を提供する text.tr, CSVファイルを扱うtext.csv, CGIスクリプト用ユーティリティw3c.cgi, URIのパージングを 行うrfc.uri, HTTPのCookieを扱うrfc.cookie 等々。
  • よく使うファイル関係のユーティリティー関数を追加:file-exists?, file-is-directory?, file-is-regular?.
  • VMのスタックトレースを直しました。
  • gauche.regexpモジュールにregexp-replace[-all]を 実装しました。
  • 効率良く文字列をパージングするためのプリミティブstring-scanを 追加。

2001/9/17

Release 0.4.5:

  • 重要なバグフィクス:スクリプトをノンインタラクティブに実行しているときにエラーが 起こると ``assertion failed'' で落ちてしまっていました。
  • SRFI-10 sharp-comma syntax をサポート。
  • open-input-fileopen-output-fileに、 CommonLispライクなキーワード引数 :if-exists や :if-does-not-exist を追加して、より細かい制御ができるようにしました。
  • モジュールgauche.fcntlでfcntlの機能をサポート。
  • モジュールgauche.loggerで簡便なログ機能をサポート。
  • regexpのバグを2つばかり修正。
  • LP64アーキテクチャで問題となるバグをいくつか修正 (thanks to 阿部洋志さん)。

2001/9/12

Release 0.4.4:

  • エラーハンドリングのメカニズムを追加しました。効率良く例外をサポート するためにVMの内部にかなり手を加えました。Scheme APIについては リファレンスマニュアルの"Exceptions" の項を参照してください。
  • termiosを拡張モジュールでサポートします。リファレンスマニュアルの gauche.termiosの項を御覧下さい。
  • select(2)を使ったイベントディスパッチャモジュールgauche.selector。 簡単なサーバーアプリケーションなど、複数の入力を監視するスクリプトに 便利です。
  • gauche.processに process-output->string を追加。 コマンドをサブプロセスで起動して、その標準出力に出されたものを文字列にして 返します。
  • リファレンスマニュアルに、Cのライブラリ関数とScheme関数の対応表を つけました。

2001/8/5

Release 0.4.3: メインテナンスリリース。あと3週間くらいはこちらの開発に時間を 割けないので、これまでのバグフィックスを一度まとめます。リーダーが、厳密にはR5RS に従わないけどよく使われている数値/シンボルを読み込むようになりました (例:".12" は数値0.12と読まれる)。また、特殊文字を含むシンボルは `|' でエスケープすることに より表記できます。 "apropos" を改良しました。 VM関係のバグを2つばかり潰しました。 configureスクリプトはautoconf-2.52で生成されたものになっています。

2001/7/14

Release 0.4.2:

  • MacOS Xへのポートのパッチを適用しました (from KIMURA Shigenobu)
  • SRFI-9 (record type) をサポートしました。
  • format関数に機能追加。~s, ~aの他に~d, ~o, ~x, ~b のディレクティブを 認識し、CommonLispと同様のパラメータとフラグも有効です。
  • バグフィクス:マクロ展開、文字のリーダ、数字のプリンタ、caseフォームの コンパイル

2001/7/7

Release 0.4.1:

  • やっとVMのスタックオーバーフローをハンドルするルーチンを実装しました。 (VMのスタック操作に実装に関する ちょっとしたメモがあります。)
  • コマンドラインオプションをパーズするモジュールgauche.parseopt を追加しました。詳しくはリファレンスマニュアルの該当箇所を見て下さい。
  • ext/net内のバグを修正しました。また、いくつかconfiguration時の問題を 修正しました。

2001/6/30

Release 0.4: バグフィックスの他、デザインの一貫性のためにいくつかの非互換な変更を 行いました。

  • error関数のふるまいがSRFI-23と互換になりました。引数を formatを使わずに出力します。SLIBや他の多くの処理系も同様のAPIを 持っています。formatを使う関数の方はerrorfという名で 使用可能です。
  • スクリプトインタプリタとして起動された場合、main関数が 定義されていたらそれを呼びますが、その評価値が整数ならそれをexit status として使用します。SRFI-23 Draftの仕様に準じています。
  • sys-pipesys-waitが値のコンスのかわりに 多値を返すようになりました。
  • サイト特有の拡張モジュールのインストール先が若干変わりました(Gaucheの バージョンがパス名に入ります)
  • ドキュメントされていないマクロlet-optional*を scshとコンパチブルなlet-optionals*に変えました。
  • sockaddr-familyはキーワードでなくシンボルを返します。
  • call-with-io-process は call-with-process-io になりました。
  • make-server-socketのバグが修正されました

2001/6/27

お知らせ:NetBSD/i386及びFreeBSD/i386では、拡張モジュールをdynamic load すると動作が不安定になります。GCがdynamic loadingに対応していないためです。 おいおい直して行きますが、ちょっと時間がかかると思います。

2001/6/23

お知らせ:OSによっては、gethostbyname_rが未定義などのエラーがext/net/libnet.soの ビルド時に出るようです。こちらから Gauche-0.3.15.patchを取って、Gauche-0.3.15.tgzを展開して出来る ``Gauche'' ディレクトリの下でパッチを当ててみてください。

2001/6/23

Release 0.3.15:

  • ネットワークモジュール ``gauche.net'' が追加されました。 ソケットベースのプロセス間通信とnetdb (gethostbyname等)へのインタフェース が備わっています。詳しくは リファレンスマニュアルの gauche.netの項をどうぞ。
  • goshの起動時にスクリプトファイルが与えられて、その中でmainという 手続きが定義されていた場合、goshはスクリプトファイルをロードした後、 コマンドライン引数のリストを持ってその手続きを呼び出します。 これは、提案されているSRFI-22に準拠したふるまいです。 (SRFI-22はまだドラフトなので今後変更があるかもしれません)。
  • いくつかシステム関数が追加されました (select(2)へのインタフェースなど)。
  • ``process ports'' が追加されました。サブプロセスを呼び出して コミュニケートすることが簡単にできます。
  • クラス回りのCのAPIがかなり変更されています。

2001/6/7

Release 0.3.14: 文字コード変換モジュールgauche.charconvを実装しました。 iconvを利用して、各種文字コード間の変換ができるほか、エンコーディングの 判定ルーチンなどを備えています。インターフェースの詳細に関しては、 リファレンスマニュアルの gauche.charconvモジュールの記述を参照してください。

また、portとregexp関係のバグをいくつか修正しました。

2001/6/2

ドキュメントのページから リファレンスマニュアルをオンラインで参照できるようにしました。 と言ってもまだ中身は関数名が羅列してあるだけですが。

2001/5/29

Release 0.3.13: メンテナンスリリース。iconvの無いシステムでコンパイルが 失敗するという0.3.12の問題を修正しました。ほか、uvectorモジュール、bignum、 dynamic load関連でのバグを修正。

2001/5/28

Release 0.3.12:

  • MINOURA Makotoさんのパッチにより、NetBSDでも動作するようになりました。
  • ポータブルなSchemeライブラリ、SLIB に対応しました。 (use slib)でslibが使えるようになります。詳しくはINSTALLを参照して 下さい。
  • sys-timeがEpochからの秒数を返すようになりました。
  • リファレンスマニュアルを書きはじめました。まだ単なる関数のリストですが。 tar ballを展開するとdoc/以下にtexinfoとhtmlのドキュメントがあります。

2001/5/20

Release 0.3.11: キャラクタコード変換のサポートの前段階として、不完全な 文字列(正規のマルチバイト文字列として解釈できない文字列)のサポートを強化しました。 また、リテラル文字列はimmutable stringとなり、 それを変更しようとするとエラーになります。これらのサポートのため、String APIが 変更されました。

不完全な文字列は #"..." のように表記されます。リーダーとプリンタがこの構文を サポートするように拡張されました。

また、いくつかのビット演算オペレーション (ash, lognot, logand, logior) が 追加されました。

2001/5/12

Release 0.3.10: 数値計算コード再訪。解析関数が複素数の範囲まで動作するように なりました。『Common Lisp, the Language 2nd Edition』 の "Numbers" の 章にあげられている、解析関数の値の複素平面でのプロットがGaucheでも生成できます (思ったより大変でした… 同書339-349ページに示されたプログラムをSchemeにポートした コードはディストリピューションには含まれませんが、良いテストベッドだと思うので、 興味のある方はメイルを下さればお送りします)。

また、インライン展開されるScheme関数中でエラーが起きた場合にコアダンプする バグや、複素数がeqv?にならないバグなどが修正されました。

2001/5/3

Release 0.3.9: 文字列ライブラリSRFI-13のほとんどをカバーしました。 また、configure時のオプションにより、文字列の内部エンコーディングとして EUC-JP以外にUTF-8、shift jis、そしてマルチバイトを使わないという選択が出来ます。 (EUC-JP以外はあまりよくテストしていませんが)。方法についてはINSTALLを見て下さい。

2001/4/22

Release 0.3.8: bignumの除算ルーチンまわりのバグが修正されました。 やっとgcdとlcmも動きます (これでようやくr4rstest.scmがほとんど 通るようになりました)。srfi-13の実装へ向けて、文字列ルーチンの整理に 取り掛かりました。

2001/4/19

Release 0.3.7: 数値の入出力まわりとインライン展開される数値計算コードの バグが修正されました。bignumも加減乗算はまともに動作します (除算はまだ…)。 正規表現に \s, \S, \d, \D, \w, \W の表現が使えるようになりました。 リテラルキャラクタセットを記述するのに拡張構文 #[...] が使えるようになりました。

2001/4/17

Release 0.3.6: 正規表現ルーチンを多少まともにしました。現在使えるのは リピート (?, *, +)、キャラクタレンジ ([a-z] etc.)、括弧によるグルーピング、 alternative (|)、BOL/EOLアンカー (^, $) のみです。test/regexp.scmを 見て下さい。また、number.c にあった segvを起こすバグを修正しました。

2001/4/15

Release 0.3.5: SRFI-4 (homogeneous numeric vector) をextentionとして追加。 正規表現も一応動き始めましたが、まだごく基本的な機能しか提供されていません。 また、SourceForge にプロジェクトとして登録しました。