機能
標準
- R5RSの仕様範囲はほぼカバーしています。
- マクロはR5RSの高レベルマクロと、伝統的なdefine-macroの両方を サポートしています。
- 数値については、fixnum, bignum, flonum(real) 及び complex をサポートします。
- 次のSRFI(Scheme Request for Implementation) をサポートしています。
- SRFI-0 Feature based conditional expansion construct
- SRFI-1 List library
- SRFI-2 And-let*
- SRFI-4 Homogeneous numeric vector datatypes
- SRFI-5 A compatible let form with signatures and rest arguments
- SRFI-6 String ports
- SRFI-7 Feature-based program configuration language
- SRFI-8 Receive
- SRFI-9 Record Types
- SRFI-10 Sharp-comma external form
- SRFI-11 Let-values
- SRFI-13 String Library
- SRFI-14 Character Set Library
- SRFI-16 Syntax for procedures of variable arity
- SRFI-17 Generalized set!
- SRFI-18 Multithreading support
- SRFI-19 Time data types and procedures
- SRFI-22 Running Scheme Scripts on Unix
- SRFI-23 Error reporting mechanism
- SRFI-25 Multi-dimensional array primitives
- SRFI-26 Notation for Specializing Parameters without Currying
- SRFI-27 Sources of random bits
- SRFI-28 Basic format strings
- SRFI-29 Localization
- SRFI-30 Nested Multi-line comments
- SRFI-31 A special form rec for recursive evaluation
- SRFI-34 Exception Handling for Programs
- SRFI-35 Conditions
- SRFI-36 I/O Conditions (partially)
- SRFI-37 args-fold: a program argument processor
- SRFI-38 External Representation for Data With Shared Structure
- SRFI-39 Parameter objects
- SRFI-40 A Library of Streams
- SRFI-42 Eager comprehenshion
- SRFI-43 Vector Library
- SRFI-45 Primitives for Expressing Iterative Lazy Algorithms
- SRFI-55 require-extension
- SRFI-61 A more general cond clause
- SRFI-62 S-expression comments
- SRFI-87 => in case clauses
その他の機能
- モジュールシステム: 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も 使えます。
- マルチスレッド: いくつかのプラットフォームで、 pthreadsに基づいたスレッドが使えます。 SchemeレベルのAPIはSRFI-18に準拠しています。
- DBMインタフェース: システムがサポートしていれば、dbm系(dbm, ndbm, gdbm) へのインタフェースが提供されます。
- XMLパージング: Oleg Kiselyov氏のSXML が含まれています。
- OpenGLバインディング: 別パッケージによりOpenGLへのインタフェースが 提供されています。
- GTKバインディング: 別パッケージによりGTK2へのインタフェースが 提供されています。
パフォーマンス
Gaucheは起動されるとソースコードを読み実行するスクリプトエンジンですが、 内部では最適化コンパイラにより仮想マシン用のコードへとコンパイルして 仮想マシン上で実行しています。同様のインタプリタシステムと、だいたい同じくらいの 性能は出てるんではないかと思っています。
動作プラットフォーム
動作が確認できたプラットフォームの一覧です。 他のプラットフォームで動作が確認できたら教えて下さい。
| Gauche version | OS | CPU | CC | Threads | Status |
|---|---|---|---|---|---|
| 0.8.13 | Linux (Fedora 8) | x86 | gcc | OK | 全テストOK。 |
| Linux (Ubuntu 6.10) | x86_64 | gcc | OK | 全テストOK。 | |
| FreeBSD 6.2-RELEASE | x86 | gcc | OK | 全テストOK。 | |
| NetBSD 3.1 | x86 | gcc | OK | 全テストOK。 | |
| Windows XP (Cygwin-NT 5.1) | x86 | gcc | N/A | いくつかのシステム関数、プロセス関連関数以外のテストは通ります。 | |
| Windows XP (MinGW) | x86 | gcc | N/A | 実験段階です。システム関数の多くは動きません。ビルドにはCygwinもしくはMSYS が必要ですが、バイナリを走らせるには(MinGW DLL以外の)ライブラリを必要と しません。コンパイル済パッケージ(MinGW DLL含む)も ダウンロードできます。 | |
| 0.8.8 | Linux (Debian3.0) | Alpha | gcc | OK | 全テストOK。 |
| Solaris 9 | SPARC | gcc | OK | ビルドにはgmakeを使って下さい。全テストOK。 | |
| Solaris 9 | x86 | gcc | OK | ビルドにはgmakeを使って下さい。全テストOK。 | |
| 0.8.9 | HP-UX 11.11 | PA RISC | gcc | N/A | gauche.charconvのテストに失敗します。システム提供のiconvを使った際に 問題が出るようです。まだよく調べていませんが、問題になったら 別のiconvライブラリを試してみて下さい。 |
| 0.8.12 | MacOS X 10.5 | x86 | gcc | OK | 全テストOK。 |
| Linux (Debian3.0) | Power PC | gcc | OK | 全テストOK | |
| 0.7.1 | Linux (Debian3.0) | SPARC | gcc | OK | 全テストOK。 |
| 0.5.2 | Irix 6.5 | MIPS | gcc, MIPSPro CC | ? | 全テストOK |
| FreeBSD 2.2.1 | x86 | gcc | ? | 全テストOK (thanks to Abe Hiroshi) | |
| 0.5.4 | MacOS 7.5.5 | 68k | sc | N/A | Yasunari Shimizuさんより、多少の変更で動いたとの報告です。システム関数はほぼ使えません。私の手元には変更点のコードはありません。 |
バグ
たくさんあると思いますが、重要なものを挙げておきます。
- characterのクラスは、例えネイティブコードをUTF-8にしても、 ASCIIの範囲でしかサポートされません。これはいつ直るんだろう…
- R5RSのdefine-syntaxマクロを生成するdefine-syntaxマクロが うまく動作しません。
これ以外でも、不審な挙動を発見したりcore dumpしてしまったなどありましたら 作者に一報頂ければ幸いです。