概要
- CHICKEN Scheme 6.0.0 と 5.4.0 の主な変更点と改善点を要約
- R7RS small language 完全対応や UNICODE対応 などコア機能強化
- モジュール構成の見直し や ファイル操作・プロセス管理API の刷新
- ビルドシステム・ツールチェーン の近代化
- セキュリティ修正 や 細かなバグフィックス も多数実施
CHICKEN Scheme 6.0.0 主な変更点
- R7RS small language で指定された全モジュールをコアシステムで利用可能
- 内部文字列表現 をUTF-8へ変更、 完全なUNICODE対応 を実現
- (chicken blob)モジュール を (chicken bytevector)モジュール へ置換、R7RS互換のバイトベクタ操作を提供
- バイトベクタはSRFI-4のu8vectorと完全互換
- blobのread構文 (
#${...})を廃止、バイトベクタは#u8(...)や#u8"..."で読込 - char-name で名前付き文字定義の削除が可能に
- open-input-file / open-output-file でファイルエンコーディング指定可能(UTF-8/Latin-1対応)
- file-read, file-write, set-pseudo-random-seed!, random-bytes はバイトベクタのみ受け入れ、文字列は非対応
- プロセス操作API刷新
- process-fork, process-run, process, process*はPIDでなくプロセスオブジェクトを返却
- process-wait, process-signalはPIDまたはプロセスオブジェクト受け入れ
- ファイルロック操作 をflock(2)に統一、スレッドセーフ化・簡素化
- file-test-lock廃止
- read-u8vector, read-u8vector!, write-u8vector を削除、(chicken io)モジュールの同等操作を利用
- read-bytevector, read-bytevector!, write-bytevectorを(chicken io)に追加
- set-port-name! 廃止、SRFI-17のsetterでport-nameを設定
- port-encoding を(chicken port)モジュールに追加
- make-input-port, make-output-port のオプションメソッドはキーワード引数化
- make-binary-input-port, make-binary-output-port を追加
- 文字列のロカティブ はバイト単位でなくコードポイント単位でインデックス
- symbol-escape でシンボルのエスケープ表示制御が可能に
- シンボル表示 のエスケープ判定がより厳格化
プリミティブ・モジュール再編
- 多数の手続きが(chicken base)等からR7RSモジュールへ移動
- exact-integer?, exact-integer-sqrt?, vector-copy!, make-parameter, call/cc, open-input-string, open-output-string, get-output-string, input-port-open?, output-port-open?, parameterize, port?は(scheme base)へ
- case-lambdaは(scheme case-lambda)へ、featuresは(scheme base)へ
- write-stringは(scheme base)へ移動しR7RS仕様に変更
- define-record-typeは(scheme base)へ、生成的型対応
- syntax-errorは(chicken syntax)から削除、マクロとして(scheme base)へ
- record-instance?, make-record-instanceは非シンボル型指定にも対応
- 新モジュール(chicken number-vector)でSRFI-4の上位互換(64/128bit複素ベクタ含む)を提供
- load, load-relativeの第2引数は環境または評価手続き指定可能
- srfi-0, srfi-6, srfi-9, srfi-11, srfi-23, srfi-39, srfi-98のモジュールエイリアスを廃止(R7RSでカバー)
- r4rs, r5rs, r4rs-null, r5rs-nullは(scheme XXX)へリネーム
- 16進エスケープは
;で終端必須(R7RS準拠) - #ci / #cs構文を廃止、#![no-]fold-caseマーカーを利用
- include, include-relativeは複数ファイル指定可能、include-ci追加
- include-pathを(chicken platform)モジュールに追加
- number-vector-dataを(chicken memory representation)モジュールに追加
- define-libraryでexport-all指定対応
- mingw32プラットフォーム識別子をmingwへ変更
- パス返却手続きは常にスラッシュ区切り、make-pathnameも"/"固定
- expand1を(chicken syntax)モジュールに追加、csiに",x1"コマンド追加
- (chicken version)モジュール新設
- delete-file*, delete-fileは壊れたシンボリックリンクも一貫して処理
- number->stringは基数36まで対応(従来は16まで)
- string->numberは18進以上での"i"の曖昧ケースをより一貫して処理
- make-rectangularは虚部が不正確なゼロでも複素数返却
- string->number/リーダーは虚部が負の不正確ゼロの複素数も正しく処理
- imag-partは非複素数に対し正確なゼロを返却
- max/minは非nan引数が含まれる場合nan値を無視
その他の主な機能追加・改善
- syntax-rulesで末尾パターンの...(エリプシス)サポート強化
- FFI強化:文字列・シンボルはコピーせず直接渡し、外部コードの変更がScheme側に反映
- 複素数・C構造体・ユニオンもC側引数/戻り値として直接扱えるように
- コンパイラ/インタプリタの-r5rs-syntaxオプションは-r7rs-syntaxへリネーム、拡張シンボル構文は無効化しない
- "feathers"デバッガはコアから分離しeggとして提供
- set-describer!はcsiモジュールから削除
- cscプログラムはツールフラグ(例: -compiler, -cc等)でスペース含むパスをクォート不要で指定可能
- 代償として、スペース区切りのフラグ指定は非対応。必要ならシェルスクリプトで対応
- chicken-installはeggインストール時にキャッシュディレクトリをロック
- eggフォーマットにinstalled-c-object型追加
- csc-options/link-optionsにcustom-config対応、任意のコンパイラ/リンカオプション生成可能
- scripts/smoke-test.sh追加で基本テスト自動化
- -merge-reusable-closures/-merge-shareable-closuresオプション追加、クロージャ再利用/共有によるメモリ削減
- 最適化レベル1(再利用)、2(共有)で自動有効化
- ビルドシステム刷新:"configure"スクリプト導入でmake運用・プラットフォームチェック強化
- Windowsの最小mingwビルドは非サポート、POSIXシェルとCLIユーティリティ必須
- 推奨ツールチェーンはChris Wellons "w64devkit"
- mingw-msysプラットフォーム識別子はmingwへリネーム
- "zig cc"によるビルドもサポート
CHICKEN Scheme 5.4.0 主な変更点
セキュリティ修正
- CVE-2022-45145 :eggメタデータのエスケープ文字無効化でOSコマンドインジェクション防止
- ランタイムオプション"-:b"を削除、CLIからREPL落ち禁止で安全性向上
- ランタイムオプション処理の堅牢化、最初の非ランタイムオプションまたは"-:"で終了
コアライブラリ・API改善
- file-selectの型宣言修正
- create-temporary-file/directoryのWindowsフォールバックで%USERPROFILE%/AppData/Local/Tempを利用(環境変数が設定時)
- POSIXシグナル用スレッドセーフAPI(make-signal-handler, signal-ignore, signal-default)追加、既存API非推奨
- make-finalizerでファイナライザのスレッドセーフ実行
- (chicken base)にweak pair追加、Chez Schemeに類似
- locative-index追加(John Croisant寄稿)
- chicken.flonumモジュールにfp*+(融合積和演算)、双曲線関数・逆関数追加(Christian Himpe提案)
- process-executeはargv[0]にファイル名を修正前のまま設定(従来はディレクトリ部除去)
- SRFI-4ベクタリテラルで埋め込み文字列・文字対応
- read-with-source-infoを(chicken syntax)で公式サポート、read/source-infoは内部モジュールで非推奨
- (chicken module)にexport/rename追加、エクスポート時の識別子リネーム対応
- TMPDIR, TMP, TEMP環境変数値はキャッシュせず都度取得(#1830修正)
- errno変更手続きを発生させた条件オブジェクトにerrnoプロパティ追加
- chicken-home非推奨、chicken.platformモジュールにinclude-path追加
- Irregexを0.9.11へ更新、utf-8関連修正・空白文字集合拡張
ツール・ビルドシステム改善
- chicken-installのWindows向けスクリプト生成でechoの">>"クォート問題を修正(Jani Hakala報告・修正)
- csi/cscの-Rオプションでリスト記法(例: (srfi 1))対応(#1809, Wolfgang Corcoran-Mathe報告)
- cscから他ツールへのオプション渡し時のシェルクォート修正(#1302, Xin Wang報告)
- cscの-prelude/-postludeオプションが正常動作
- chicken-installは再インストール時に最新版egg取得(#1802)
- setup.defaultsのlocation指定時、egg探索で2種類のレイアウト考慮
- chicken-install: #1684修正(component-dependencies指定プログラムのimportライブラリ依存性対応)
- chicken-installはローカルeggのキャッシュ対応
- chicken-installは-location(-l)オプションでeggソース取得ディレクトリ指定可能
- chicken-installは予期しないプロパティに警告表示(#1492)
- chicken-installはキャッシュメタデータ用ディレクトリを分離、MacOS等の大文字小文字非区別ファイルシステムでも衝突防止(#1753, Kon Lovett報告)
- Syntax expanderでevalにモジュールを環境として渡す際、マクロ展開時の識別子解決を正しく処理(#1295, Caolan McMahon報告)
- コア特殊形式の内部定義は再束縛を尊重(#1132)
- グローバル定義でマクロ再束縛時に完全にシャドウ可能(#1166, Michele La Monaca報告)
- 型ファイル出力時、リストをソートしてビルド結果を決定的に(#1783, "ss2"報告)
- ビルドシステムでゼロサイズmemsetの警告回避(Claude Marinier報告)
- Windowsでtest-create-temporary-fileの無効化("jjhoo"報告)
- MacOSでXCODE_...環境変数の利用を廃止
この内容はCHICKEN Scheme 6.0.0および5.4.0の主なリリースノートを日本語で簡潔にまとめたものです。