以前のニュース
- 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-61とsrfi-87 をネイティブにサポートしました。
- define-condition-typeは、スロットに :init-keywordオプションを自動的に付加するようになりました。 これによって、例えばerrorなどの手続きで独自のコンディション を簡単に初期化できるようになります。
- substringやrxmatch-substrinc等のルーチンで、 長いマルチバイト文字列を扱う際の性能が向上しました。
- inexact->exactはNaNやinfiniteが渡された場合に エラーを報告します。
- 新しい手続き: sys-sigwait, sys-fchmod.
- C APIの互換性:
- Scm_Eval、Scm_EvalCString、 Scm_Applyの各APIの変更のための猶予期間を延長します。 これらの手続きはデフォルトではマクロで正式なAPIである Scm_EvalRec等に展開されます。拡張モジュールの作者は 早めにScm_Eval等を"Rec"付きAPIへの呼出しへと 変更してください。猶予期間が過ぎた後は、 Scm_Eval、Scm_EvalCString、 Scm_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.testのtest-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_Eval、 Scm_EvalCString、及びScm_ApplyのAPIの 変更を予定しています。これらの関数と同じAPIを持つ関数が Scm_EvalRec、Scm_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.sxpathとsxml.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.testのtest-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を作るのに使われています。
- dbi: データベース独立アクセス層。
さまざまなRDBMSに対して統一的なAPIを提供するモジュールです。
実際にRDBMSにアクセスするには、各RDBMS毎の「ドライバ」モジュールを
インストールしておく必要があります。
http://www.kahua.org/cgi-bin/kahua.fcgi/kahua-web/show/dev/DBI/.
- 追加されたSRFI:
- SRFI-40 (遅延ストリームライブラリ): util.streamモジュール。
- SRFI-43 (ベクタライブラリ): srfi-43モジュール。
- SRFI-45 (繰り返し遅延アルゴリズムを表現するためのプリミティブ): 組み込み。
- gauche-packageが拡張されました。 generateコマンドにより、Gaucheの拡張モジュールを書くための スケルトンコードを自動生成することができます。 また、拡張モジュールのためのconfigure.acのテンプレート が改良され、Gauche特有のm4マクロを含まなくなりました。そのため autoconfだけでconfigureスクリプトを作成できます。
- srfi-1のような頻繁に使われるモジュールが、 拡張モジュールとしてコンパイルされるようになりました。 ロード時間がかなり短縮されます。
- errorとerrorfが拡張され、 デフォルトの<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で参照/変更できるようになりました。
- 組み込みマクロwhile、untilを正式にサポートします。
- モジュール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-pathname、sys-dirname、 そしてfile.utilのbuild-path等のパス名を扱う ユーティリティ関数はWindows式のパス名を生成します。また、 gauche-configやgauche-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-copy と dbm-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_GETOWNとF_SETOWNが使えるようになりました。
- gauche.termios: struct termiosのc_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_Load、Scm_LoadFromPort等の APIが、ビットフラグを受け取るように変更されています。
- 新機能
- 2004/8/2
-
Gauche 0.8.1: メインテナンスリリースです。
- 改善
- www.cgi: ファイルのアップロード (multipart/form-dataでPOSTされるフォームデータ) も処理するようにしました。
- rfc.uri: uri-parseを追加。 また、uri-decompose-hierarchicalと uri-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-sortとstable-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.process: process-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 もエラーとすべきですが、 以前のふるまいに依存しているコードがある可能性もあるので、 これに関しては警告に留めてあります。
- モジュール gauche.charconv:文字コード推定ルーチンが、
IAEA準拠のCES名を返すようにしました。
- 新機能
- 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-xorとlset-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.listと gauche.collectionを併用する場合に、予想に反する動作を することがあったためです (util.listをgauche.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-addr と sockaddr-port が追加されました。
- gauche.charconv: with-input-conversion と with-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-conversionと call-with-output-conversionが追加されました。
- gauche.process: プロセスポートが拡張されました。
- 非互換な変更: open-input-process-port とopen-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-socketsとmake-sockaddrs が追加されました。 (Kimura Fuyuki氏によるパッチ)
- socket-closeは接続をシャットダウンしなくなりました。 forkしたプロセスで接続がまだ使われている可能性があるからです。
- 次の手続きの性能を改善しました:read-line, lcs-with-positions, sort, sort!。
- with-moduleとselect-moduleを nullモジュールおよびschemeモジュールから 取り除きました。これによって、null-environmentや scheme-report-environmentで返される環境は R5RSにある束縛のみを含むようになります。
- www.cgi: cgi-parse-parametersが、'&' だけでなく ';' も区切り文字として認識するようになりました。
- gauche.reload モジュールは、 gosh が対話モードで起動された場合にオートロードされる ように設定されます。
- gauche.net:
- バグフィクス
- 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.lcs、text.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-19のmake-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.listがsrfi-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-conversion と wrap-with-output-conversion によって、 必要な時のみ変換ポートを作成する操作が簡単になりました。 また、CES "none" のセマンティクスが明確にされました。
- gauche.sequenceの改良:新しいイテレータ、 fold-with-index、map-with-index、 map-to-with-index、for-each-with-index、 find-index、find-with-indexが追加されました。
- www.cgiの改良:cgi-mainに、 出力時に文字コード変換をさせるようにすることができます。
- ポート操作の拡張:port->string等の性能が 改善されました。また、新しい手続き with-port-lockingによって、ポートを操作中に 明示的にロックすることで性能向上が図れます。 peek-byteを追加しました。
- sortとsort!がvectorもソートするようになりました。
- make-moduleによって、モジュールを動的に生成できるように なりました。無名のモジュールもサポートされます。 サーバーアプリケーションに便利です。
- loadとload-from-portが :environmentキーワード引数を取ります。 渡されたモジュール中で読み込んだ式を評価するためのものです。
- ハッシュテーブルのコンストラクション手続きhash-table、 及びイテレータhash-table-foldが追加されました。
- file.util中のdirectory-listが :filter-add-path?キーワード引数を取るようになりました。
- バグフィクス
- string=?は完全な文字列と不完全な文字列が渡された時に エラーになっていました。現在はそのような場合は#fが返ります。
- ユーザ定義オブジェクト同士を比較する場合に、 object-equal?が定義されていないと、たとえオブジェクトが eq?であってもequal?は#fを 返していました。
- gauche.regexp: rxmatch-caseが 無限ループに入る可能性があったバグを修正 (Patch from Kimura Fuyuki).
- math.mt-random: bignumがseedとして渡された時、 mt-set-random-seed!は引数にかかわらず同じ値を seedとしてセットしていました。
- text.csv:セパレータがtab文字の時に、 連続するtab文字がひとつのtab文字と同じように解釈されて いました。
- rfc.uri:uri-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-missingとslot-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-seek、port-tell 手続きによって読みだしたり変更したりすることができるようになりました。
- make-byte-stringを追加しました。
- has-setter?を追加しました。
- その他の変更
- string-splitが、デリミタとして文字だけでなく 文字セットや文字列、正規表現、述語手続き等を取れるように なりました。
- srfi-14のucs-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-optional、 get-keyword*といったマクロも追加しました。
- rfc.uriにuri-composeを追加しました。
- コンビネータany-pred、every-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->string、regexp?が追加されました。
- <regexp>および<regmatch>オブジェクト
が、上で述べたobject-applyメカニズムを使って「適用可能」に
なりました。正規表現を使うコードがコンパクトに書けるようになります。
regexpオブジェクトが文字列に適用されると、あたかもrxmatchが
呼ばれたかのように動作します。regmatchオブジェクトが整数に適用されると、
あたかもrxmatch-substringが呼ばれたかのように動作します。
- 文字セットリーダの改善:[: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-handler、get-signal-handlers、 sys-sigmask、sys-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-4をgauche.uvectorと改名し、 算術演算など多くの手続きを追加しました。モジュールsrfi-4も gauche.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 等の
コンビネータが追加されました。標準手続きmapやfor-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-file、move-file、 touch-file、find-file-in-paths が file.utilモジュールに追加されました。
- 手続きのアリティを調べる手続きarity、 procedure-arity-includes?、 arity-at-least-valueが追加されました。 リファレンスマニュアルの「手続きのアリティ」の節を参照して下さい。
- 新しい構文 define-constant、set!-values、 begin0、let1。
- モジュール math.const : よく使う数学定数(π, e等)の定義です。
- システム手続き sys-utime。
- SRFI-18, 19, 21と互換性のある時間の表現である<time> クラスが組み込みクラスとして追加されました。SRFI-18に定義されている current-time、time->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-fileや socket-{in|out}put-port)のようなファイルポートに 関係するルーチンにおいて、bufferingキーワード引数によって バッファリングの振舞いの指定ができます。詳しくは リファレンスマニュアルの「ファイルポート」の項を参照して下さい。
- キャラクタI/OとバイトI/Oを混ぜた場合の動作が不安定だったのが 修正されました。
- flush-all-portsが追加されました。
- 与えられたファイルディスクリプタからポートをオープンする open-input-fd-portとopen-output-fd-port が追加されました。
- 高レベルのファイル/ディレクトリユーティリティ関数が file.util として追加されました。
- Weak vectorが追加されました。リファレンスマニュアルの 「Weak pointer」を参照して下さい。
- "parameter"が追加されました。リファレンスマニュアルの gauche.parameterを参照して下さい。
- Pseudo ttyインタフェース関数sys-openptyと sys-forkptyが gauche.termiosモジュールに 追加されました。
- define-valuesが追加されました。
- port?が追加されました。
- <sys-stat>、<sys-group>、 <sys-passwd>等のシステムオブジェクトが 通常のオブジェクトとほぼ同様に振舞います。すなわち、各種情報が 特別なアクセス関数ではなくスロットとしてアクセスできるように なりました。
- 内部のダイナミック文字列の処理の性能が向上しました。
- メタオブジェクトプロトコルのコードの一部にメモリを壊す バグがあったのを修正しました。
- 特定の条件下で末尾再帰の最適化がなされなかったコンパイラのバグを 修正しました。
- バッファードI/Oルーチンを、stdioを使わずにGauche内で実装しました。
これによりI/O性能が若干向上し、コードサイズが減少し、
バッファリングのふるまいをプログラマがより細かく指定できるように
なりました。これに関連して次のような機能追加があります。
- 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パッケージも作成しました。
- 新機能 : String interpolation. リーダー構文
- 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さんのパッチにより、 これらのアーキテクチャに移植されました。
- バクフィクス(非互換な変更): goshが mainにコマンドライン引数リストを渡すインタフェースが 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を使うと、
map や find のような繰り返し手続きが総称関数となり、
様々なコレクション/シーケンスに対して動作するようになります。
(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.singletonとgauche.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フィールドに変な値が セットされていました。
- 一般のコレクション型に対する繰り返し処理のジェネリックなフレームワークを
実装しました。gauche.collectionを使うと、
map や find のような繰り返し手続きが総称関数となり、
様々なコレクション/シーケンスに対して動作するようになります。
- 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