Gauche:Translation
- リファレンスやリリースノートの未訳の原文をここに貼る
- 原文を行ごと or 段落ごとコピーしておく
- みんなでよってたかって翻訳(英日,日英etc.)
Devlog
- Gauche:Translation:Devlog:そしてランダムデータ生成器がやってきた
- Gauche:Translation:Devlog:正確なsqrt
- Gauche:Translation:Devlog:スクリプトのチェック
- Gauche:Translation:Devlog:文字列中のNUL
- Gauche:Translation:Devlog:普遍的な変換器のサポート
- Gauche:Translation:Devlog:ジェネレータを使ったやりかた - ジョン・ナッシュの暗号器
- Gauche:Translation:Devlog:R7RSサポート
- Gauche:Translation:Devlog:マクロシステム拡張
- Gauche:Translation:Devlog:前進
- Gauche:Translation:Devlog:もうすぐ?
- Gauche:Translation:Devlog:キーワードとシンボルの統合
- Gauche:Translation:Devlog:ありゃりゃ - gauche-package リグレッション
- Gauche:Translation:Devlog:オンラインドキュメントのちょっとした改善
- Gauche:Translation:Devlog:REPLでのプリティプリンタ等
- Gauche:Translation:Devlog:手続きインライナの改善
Gauche 0.8.13 リリースノート
2008/2/13: 多数の細かな改良
バグ修正
- rfc.http: Host ヘッダでポート番号を渡していなかったバグを修正。
- rxmatch-num-matches: マニュアルの通り、#f を渡された場合に 0 を返すよう修正。
- asin, asinh: 数値不安定性(numerical instablity)を回避するためのコードの問題を修正。
- slib: 最新の slib で動作するように修正。
- gauche.process: プロセスの終了状態が 0 であった場合でも on-error-exit ハンドラが呼ばれていたのを修正。
- file.util: 特定の場合に copy-file がコピー先ファイルのモードを保存しないことがあったのを修正。
- gauche.parseopt: 非常に長いオプション引数が与えられた場合に正規表現がスタックを食い潰す問題を修正。
- make uninstall で Gauche のインストールしたものでない libgc.a がアンインストールされる可能性があったのを修正。
- gauche.test: test-module で内部定義のチェックを取りこぼすことがあった。現在はこれは修正されていて、以前は発見されなかった未定義変数への参照を見つけられるようになった。
- 複数のスレッドが同時に autoload を解決しようとしたときに誤動作するバグを修正。
本体の改良点
- apply での引数の扱いが改良された。以前は引数リスト中の各引数をすべて VM スタック上にプッシュしていたため、VM のスタックに載らない長い引数リストを apply すると失敗していた。現在は、引数リストを必要なだけ展開する。これにより、ほとんどすべての場合で引数リストの長さが無制限になった。例えば次のようなことができる。
(apply list (iota 50000))
- クロスコンパイル環境の改善(patch from YOKOTA Hiroshi)。
- 新規手続き: fixnum-width, greatest-fixnum, least-fixnum (R6RS)
- 文字列リテラルで R6RS 形式の改行が使えるようになった。バックスラッシュの後に 0 個以上の空白・改行・ 0 個以上の空白の続いたものは無視される。例えば、
"Suppose this is very very long line."
は"Suppose this is very \ very long line."
のように書くことができる。
システムインタフェースの改良
- 64bit のファイルオフセットを使うようになり、 2GB 以上のファイルを扱えるようになった(Linux では <gauche.h> を include すると _FILE_OFFSET_BITS が 64 に define される。 libgauche をほかのライブラリとリンクし、ファイルオフセットの値や stat 構造体を渡す場合には、そのライブラリも同一の _FILE_OFFSET_BITS でコンパイルされているように注意すること)。
- glob と glob-fold で ** ワイルドカードがサポートされた。これは多段階のディレクトリ階層にマッチする。
- 新規システム関数: sys-getrlimit、 sys-setrlimit。
- <time> が 2038 年以降の時間も表現できるようになった。
- stdout が端末でない場合のバッファリングモードのデフォルトが full になった(端末の場合は line のままである)。これにより、大量の出力をファイルやパイプにリダイレクトしたときのパフォーマンスが大きく向上した。注意: これにより、出力がパイプされている場合、 (flush) をしていないプログラムがうまく動かなくなることがある。
正規表現の改良
- 正規表現が read/write invariant になった(string->regexp に妙な文字を含む文字列を渡して生成した場合は除く)。
- 新規手続き: rxmatch->string
- regexp-replace 系列の関数で、添字と同様に、名前付き補足の名前を補足された部分文字列の参照に使うことができるようになった。
その他のライブラリの改良
- rfc.base64, rfc.quoted-printable: エンコードルーチンが :line-width キーワード引数を取るようになり、出力に改行を入れられるようになった。
- rfc.822: 汎用的なメッセージヘッダ生成ルーチン rfc822-write-headers が追加された。対称性のために、 rfc822-header->list は rfc822-read-headers という名前になった。以前の名称も互換性のために残されている。
- 新規 tree-map 探索関数: 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
- srfi-19: 丸め誤差を避けるため、ユリウス日と改訂ユリウス日は正確な整数で計算されるようになった。
- gauche.sequence: シーケンスの内容のシャッフル/順序の変更をするメソッドが公式にサポートされた(permute, permute!, permute-to, shuffle, shuffle!, shuffle-to)。これらは 0.8.12 に既に入っていたが、明文化されていなかった。
Gauche 0.8.12 リリースノート
メンテナンスリリース
バグ修正
- gauche.net: 重要 0.8.11 ではソケットのバッファリングモードが間違って設定されてい、ネットワークアプリケーションがエラーめいたふるまいをしていました。
- 特定の場合に ratnum の比較で数値比較が誤った結果を返すことがありました。
- file.util: file->string 等で、ファイルが存在しない場合に :if-does-not-exist に #f が指定されたときに、この引数を正しく扱うようになりました。
- Regmatch オブジェクトに、マッチに失敗したときにサブマッチに #f を返すべきところを "" を返すバグがありました。
そのほかの変更点
- `glob' 機能を実装するのに、libc の glob を呼ぶのではなく、Scheme で再実装することにしました。platform ごとに一貫性のある挙動にするためです。sys-glob 関数は、機能を追加して glob に名前を変更しました(古い名前も後方互換性のために残してあります)。詳しくはリファレンスマニュアルを見てください。
- 新規システム関数: sys-environ, sys-environ->alist。環境変数をすべて取り出すためのものです。
- 無限大・負の無限大・非数がそれぞれ、R6RS にしたがって、 +inf.0, -inf.0, +nan.0 として読み書きされるようになりました#i+1/0 といったような古い表記も後方互換性のために通用します。
- text.progress: ヘッダ文字列を動的に変更できるようにし、様々な情報用のフィールドも追加しました。
リリースノートから漏れていたこと
- Visual C++ でコンパイル可になった。
- gauche.sequence: 総称関数 permute, permute!, permute-to, shuffle, shuffle!, shuffle-to
- Shiro(2007/10/31 00:11:51 PDT): ちがーう!漏れていたのではなく、
「敢えてリリースノートに書かなかった」のです。
なぜかもメールに書いてありますが、
VC++についてはまだ作業にやり残しがある
(どこを直せば良いか見当はついているがまだやってない)からで、
permuteなどについてはドキュメントが間に合わなかったからです。
- わー、すみません。`were not described in the official release note' とあったのを読み間違えたみたいです。こういうときに <del>~</del> 相当の機能が欲しい。
Gauche 0.8.11 リリースノート
重要な変更
- configure スクリプトに --enable-threads フラグを指定しなかった場合に、そのプラットフォームで pthreads が利用可能であれば、自動的にそれを使用するようにします。したがって、ほとんどの場合このオプションを明示的に指定する必要はありません。明示的に pthreds サポートを無効にしたい場合には --enable-threads=none を指定してください。
バグフィクス
- 長らく define-method で autoload が実行されずにいたバグを修正しました。
- gauche.uvector: byte swap を有効にした場合 write-block で余計なオクテットが出力されていました。
- srfi-13: string-upcase! 等が、省略可能なはずなものも含めすべての引数を指定しないと動かないようになっていました。
- rfc.ftp: ftp-put-unique がサーバーレスポンスと作成されたファイルの名前のふたつの値を返すようになりました。リモートファイルの名前がわからないのでは多くの場合不便でしょう。また、call-with-ftp-connection が ftp-login に誤ったキーワード引数を与えていました。
- rfc.http: http-get の :sink と :flusher キーワード引数が無視されていました。
- slib: force-output が動作していませんでした。
- srfi-1: リストを 3 つ以上渡した場合に lset= が動作していませんでした。
- cond や case の節に dotted list を渡した場合に Gauche が SEGV していました。
- error や errorf に循環構造を渡すと SEGV していました。
- 分母または分子が巨大な有理数を flonum に変換しようとすると SEGV していました。
- 文字列ハッシュテーブルに文字列以外をキーに与えると SEGV していました。
- 分母の非常に大きい小さな有理数を整数と比較すると間違った結果が返っていました。
- LP64 環境での double flonum から half flonum への変換に小さな誤差がありました。
- 短時間のうちに多くのポートを開いて閉じると "port table full" になる問題を修正しました。
- 精確な整数を flonum に変換すると二重丸めにより精度の落ちる可能性がありました。
- gosh にスクリプトを渡して起動してエラーの起きた場合にスタックトレースが表示されませんでした。
- 文字列補間で [] を () と同じように解釈していませんでした。
- typo により sys-realpath が使われていませんでした。
- Solaris 環境での sigwait() の非互換性によるコンパイルの問題を修正しました。
新規モジュール、手続き、マクロ
- gauche.collection: 総称関数 find-min, find-max, find-min&max
- pord-fd-dup!: dup(2) へのインタフェース
- hash-table-clear! 追加
- sys-umask に引数を与えずに呼ぶことで、現在の値を変更することなく現在の unask の値を得ることができるようになりました。
その他の変更点
- 拡張ライブラリ用のテンプレート Makefile が、別の builddir を使うように変更されました。
- gauche.test: test-end 手続きが失敗したテストの個数を返すようになりました。
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 を追加してください.
Tag: 翻訳