GNU Guileは、
Schemeプログラミング言語のインタプリタ兼バーチャルマシンとして、
1993年に初めてリリースされました。Guileは、
POSIXシステムコールのモジュール化された拡張や
APL配列の機能など、豊富な機能がオブジェクト
ライブラリとして提供されています。特に注目すべきは、「Libguile」を利用することで、他のプログラムにGuileを組み込み、多言語との緊密な連携を実現できる点です。これにより、Guileは単なる
スクリプト言語ではなく、アプリケーションの拡張や統合のための強力なツールとして機能します。
Guileという名前は、「GNU's ubiquitous interactive language for extension」の頭文字から取られています。これは後付けではなく、公式
ウェブサイトでこの名称が最初に登場したのは2011年春頃です。Guileは
GNUプロジェクトの「公式」拡張言語として位置づけられていますが、
2006年の時点では、実際にこの言語を使用している人気プロジェクトはごく少数でした。この名称は、Usenetでの議論中にリー・トーマスによって提唱されました。
Guileの基本的な思想は、開発者が基本的な
アルゴリズムや
データ構造をCや
C++などのコンパイル言語で実装し、それらの機能や型をインタープリタ用のコードにエクスポートすることです。これにより、アプリケーションはインタープリタが統括するプリミティブの
ライブラリとして機能し、コンパイルされたコードの効率性とインタープリタの柔軟性を両立させることができます。
Guileは、その歴史の中で、必ずしも
Scheme標準に厳密に準拠していたわけではありませんでした。過去のバージョンでは、シンボルの大文字と小文字が区別されたり、空のリストと
ブーリアン型のfalseが区別されなかったりするなどの差異がありました。しかし、現在のGuileでは、空のリストと
ブーリアン型の#fは区別されるようになり、シンボルの大文字・小文字は区別されるものの、レキシカルスキャナ兼パーサのreader procedure における分岐によって、大文字・小文字の区別を無効にすることも可能です。また、最近採用された
Scheme標準R6RSでは、大文字・小文字の区別がデフォルトとして採用されています。
Guileとアプリケーションとの緊密な連携には、いくつかの課題も伴います。
Schemeは
再帰を頻繁に行うため、末尾
再帰の最適化が求められますが、
相互運用性を考慮すると最適化が難しくなります。Guileは、純粋な
Scheme関数内では末尾
再帰の最適化を行いますが、
C言語関数が関わる場合は最適化を諦めざるを得ません。また、call/ccの実装も不十分であり、
C言語で
継続を扱うには、
C言語のスタック全体をヒープにコピーする必要があるため、効率的な
ガベージコレクションの実現が難しくなります。
C言語のコードは
Schemeのコードへのポインタを持つ必要があり、ガベージコレクタは保守的なものにならざるを得ず、再利用可能なセルを失う可能性があります。
歴史
Guileは、リチャード・ストールマンが主導した議論(後に「
Tcl戦争」と呼ばれる)に端を発しています。ストールマンは、
Tclがアプリケーション記述には力不足であるとし、GNUアプリケーションの拡張言語として
Schemeを提唱し、その結果、Guileプロジェクトが立ち上げられました。当時は適切な
Schemeインタプリタが存在しなかったため、Guileは「隙間」を埋めるために開発されました。
トム・ロードは、シグナスソリューションズ在籍中にGuileの開発に深く関与しました。初期のバージョンは、SIODやSCMインタプリタをベースとしていました。Guileの目標の一つは、他の言語から
Scheme、さらにはポータブルな
バイトコードへの変換を可能にすることです。これにより、Guileは言語に依存しないランタイム環境となることを目指していますが、この目標はまだ完全には達成されていません。しかし、
Emacs Lisp、TkWWWで使用されていた
Tcl、
LOGOに類似した言語などからの変換が試みられています。
Guile
Schemeは、XML、XPath、XSLTをSXML、SXPath、SXSLTとしてサポートしており、S式に基づいたXML処理がguile-libを通じて提供されています。また、Guileはポータブルな
SchemeライブラリSLIBをサポートしています。
Guileを使用しているプログラム
以下は、Guileを使用している代表的なプログラムの一覧です。
GNU Guix
GnuCash
GNUデバッガ
GNU make
GNU TeXmacs
GNU LilyPond
Denemo
AisleRiot (
GNOME Gamesの一部)
gEDA
GNU Anubis
GNU MIX Development Kit
GNU Robots
GNU Serveez
GnoTime
Liquid War 6
mcron (Vixie cronの代替、上位互換)
OpenCog
Scwm
Skribilo
TkWWW (ウェブブラウザ、開発終了)
GNU DMD
GNU Artanis
Guileは、
GNUプロジェクトの様々なアプリケーションを支える重要な基盤技術として、現在も活発に開発が続けられています。