Gaucheプログラミング(立読み版)

Gaucheの特徴 Slideshow

Gaucheは他のScheme言語処理系にない、いくつかのユニークな特徴を持っています。

  • 多くの部分がC言語で書かれている
  • 高速である
  • マルチバイト文字列に最初から対応している
  • 正規表現ライブラリが最初から組み込まれている
  • モジュールシステムが最初から組み込まれている
  • SXML、コレクション、パターンマッチなど豊富なライブラリを持つ
  • CLOS(Common Lisp Object System)ライクなオブジェクトシステムが最初から組み込まれている。Gaucheではすべてがオブジェクト
  • ネイティブコード拡張機能を持つ。RDBMS対応ドライバやOpenGLなど、既存のCライブラリの利用が容易

Scheme自身で書かれているScheme言語処理系も少なくありませんが、Gaucheは多くの部分がC言語で書かれています。これは、C/C++言語からの呼び出しを容易にするという設計思想に由来しています。

Gaucheは高速なScheme言語処理系です。実行の都度ソースを読み込むスクリプト処理系でありながら高速化できたのは、ある程度の最適化を行うコンパイラを走らせてVMで実行しているからです。(ただし、バッチコンパイルを行う処理系に比べて高速というわけではありません)

Gaucheはマルチバイト文字列に最初から対応しています。最近ではマルチバイト文字列に対応しているScheme言語処理系が増えてきましたが、過去にはマルチバイト文字列に対応していなかったり、マルチバイト文字の処理に特別な機能拡張を必要とするものもありました。Gaucheは日本人によって開発されているので、最初からマルチバイト文字列を扱えるように設計されています。

Gaucheには正規表現ライブラリが最初から組み込まれています。Schemeの言語仕様に正規表現は存在しませんが、GaucheではPerlバージョン5に似た正規表現が使用できます。

Schemeの言語仕様にはモジュールシステムは存在しませんが、GaucheにはPerlのモジュールシステムに似たモジュールシステムが最初から組み込まれています。モジュールシステムは様々なライブラリをパッケージ化して管理するのに役立ちます。

GaucheにはXML表現を扱うためのSXMLや、C++やJavaのコレクションライブラリに似たコレクション、パターンマッチ(正規表現とは異なる)といった様々なライブラリが用意されています。これらのライブラリはモジュールシステムによって管理され、自分のプログラムに容易に組み込む事ができます。

Gaucheには、Common LispのオブジェクトシステムであるCLOSに似たオブジェクトシステムが最初から組み込まれています。Gaucheでは、数値や文字列といった基本データもすべてオブジェクトです。CLOSではクラスやメソッドを定義したり利用したりできるだけでなく、オブジェクトシステム自身を再定義したり操作したりできます。これをMOP(Meta Object Protocol)と呼びます。GaucheのオブジェクトシステムもCLOSと同様にMOPの上に構築されているので、オブジェクトシステムそのものを再定義したり操作したりできます。

Gaucheには既存のCライブラリを利用するためのネイティブコート拡張機能が用意されています。MySQLやPostgreSQL、FirebirdといったRDBMSを利用するためのドライバや、OpenGLに対応したグラフィックスライブラリをはじめとする多様な拡張ライブラリが開発されています。 既存の拡張ライブラリを利用できるだけでなく、独自のライブラリを書くためのAPIも公開されています。

背景にある思想

Gaucheはあくまで実用を主眼に開発されています。 標準への準拠も重要ですが、 実用的な多くの仕様や機能を備えています。

要約

  • GaucheはSchemeの言語仕様の標準に準拠しているが、それ以外に多数の特徴を持つ
  • Gaucheは実用に使えることを主眼に開発されている
 

Comment Form:

コメント・トラックバック規約を必ずお読みください。

 

Comments:

2006/10/23 12:14:03 shiro
- 「多くの部分がCでかかれている」ことと「高速」であることを結びつけるのはミスリーディングだと思う。超高速なChez SchemeやStalinはほぼすべてSchemeで書かれているし、一方初期のGuileはコアが全てCで書かれていたにもかかわらず低速だった。確かにGaucheでは性能を考えてCで実装している箇所も多いが、基本的な精神はむしろ「C言語から呼び出しやすいかどうか」にある。(参考: pracitcal-scheme.net/gauche/memo-c-j.html 但し最近はSchemeコードをCにプリコンパイルしておけるようになったため、このへんの境界が徐々に曖昧になり、どちらかというとできるだけSchemeで実装する方向に移りつつある)。

- ではなぜ「高速」かというと、実行の都度ソースを読み込むスクリプト処理系でありながら、ある程度の最適化を行うコンパイラを走らせてVMで実行しているから。使っている最適化手法はどれも珍しいものではないか、ナイーブなインタプリタよりもずっと性能は出る。

- ただし、あくまでナイーブなインタプリタと比較した上での「高速」であって、バッチコンパイル処理系と比べたらそれほど高速ではない。そういう前提も入れておいて欲しい。

- マルチバイト文字列については、Gauche登場時にはとてもユニークな特徴だったと思う。現在は多くのメジャーな処理系がunicode対応しつつあるのでその優位性は薄れつつある。



Trackback URL: http://karetta.jp/trackback/book/004620/004630

Trackbacks:


このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation