機能
標準
- R7RS-smallの仕様範囲はほぼカバーしています。
- マクロはR7RSの高レベルマクロ、伝統的なdefine-macro、 Explicit renamingマクロをサポートしています。
- 数値については、fixnum, bignum, flonum(real) 及び complex をサポートします。
- 数多くのSRFI(Scheme Request for Implementation) をサポートしています (サポートされているSRFIのリストは マニュアルエントリを参照してください)。
その他の機能
- モジュールシステム: STklos とAPI互換のモジュールシステムを備えています。
- オブジェクトシステム: CLOSライクな、 メタオブジェクトプロトコルを備えたオブジェクトシステムをサポートしています。 STklos とAPIレベルでほぼ互換です。 Guile のオブジェクトシステムとも似ています。
- マルチバイト文字列: 文字列はマルチバイト形式で扱っています。ネイティブのエンコーディングとして、 EUC-JP, UTF-8, Shift JISあるいはマルチバイトを使わないという選択がconfigure時に 可能です。各種コード変換機能はportを通じて提供されます。 [詳しくは、実装メモ「文字列について」参照]。
- 正規表現: 一応あります。まだ機能的にも速度的にも同様のライブラリより劣っていますが、ぼちぼち改善してゆきます。 パターン、マッチストリングどちらにもマルチバイト文字列が使えます。
- リーダーの拡張:
正規表現パターンを #/.../、キャラクタセットを#[...]という
構文で直接コードに書くことができます。
例:(rxmatch-substring (rxmatch #/([日月火水木金土])曜日/ "火曜日") 1) ==> "火"
また、文字列のインターポレーションもサポートしています。 例: (display #`"1 + 2 = ,(+ 1 2)\n") - システム関数: POSIX.1の大部分と、多くのunixに見られるシステム関数へのインタフェースを 備えています。
- ネットワークインタフェース: socketベースのネットワークAPIを備えています。OSがサポートしていればIPv6も 使えます。
- マルチスレッド: ネイティブスレッドが使えます。 SchemeレベルのAPIはSRFI-18に準拠しています。
- DBMインタフェース: システムがサポートしていれば、dbm系(dbm, ndbm, gdbm) へのインタフェースが提供されます。
- XMLパージング: Oleg Kiselyov氏のSXML が含まれています。
- OpenGLバインディング: 別パッケージによりOpenGLへのインタフェースが 提供されています。
- GTKバインディング: 別パッケージによりGTK2へのインタフェースが 提供されています。
パフォーマンス
Gaucheは起動されるとソースコードを読み実行するスクリプトエンジンですが、 内部では最適化コンパイラにより仮想マシン用のコードへとコンパイルして 仮想マシン上で実行しています。同様のインタプリタシステムと、だいたい同じくらいの 性能は出てるんではないかと思っています。