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++などのコンパイル言語で実装し、それらの機能や型をインタープリタ用のコードにエクスポートすることです。これにより、アプリケーションはインタープリタが統括するプリミティブの
ライブラリとして機能し、コンパイルされたコードの効率性とインタープリタの柔軟性を両立させることができます。
Scheme標準への遵守
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プロジェクトの様々なアプリケーションを支える重要な基盤技術として、現在も活発に開発が続けられています。