出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/11/08 09:33 UTC 版)
| 登場時期 | 1993年[1] |
|---|---|
| 設計者 | Aubrey Jaffer, Tom Lord, Miles Bader |
| 開発者 | GNUプロジェクト |
| 最新リリース | 3.0.10[2]/ 2024年6月24日 |
| プラットフォーム | Linux, BSD, Windows ( MinGW や Cygwin を通して) |
| ライセンス | LGPL-3.0-or-later |
| ウェブサイト | gnu |
| 拡張子 | .scm .go (Guile オブジェクト) |
| 関連言語 | LISP, Scheme |
GNU Guile は、プログラミング言語 Scheme のインタプリタ/仮想マシン。1993年に初めてリリースされた[3]。 GuileはPOSIXシステムコールのモジュール化された拡張やAPL アレイの機能などを含み、オブジェクト[4] ライブラリとしてパッケージングされている。「Libguile」を使うことで、Guileを他のプログラムの中に組み込んで、 他言語との密接な統合が可能なインターフェースとして使用することができる[5]。
名前「Guile」は「GNU's ubiquitous interactive language for extension」から来ている。後付けのものではないが(注を参照)公式ウェブページの冒頭にあらわれたのは2011年の春頃である[6]。
GuileはGNUプロジェクトの「公式の」 拡張言語であるが、 2006年の時点で、人気のあるプロジェクトの中でこの言語を使っているものは十指に満たない。その名称については、Usenetでの議論の中で、リー・トーマス[7]によって提唱された。 基本的なアイデアは、「開発者は基本的なアルゴリズムやデータ構造はCやC++に実装し、機能や型をインタプリタ用のコードにエクスポートする。アプリケーションはインタプリタが統括するプリミティブのライブラリとなることで、コンパイルされたコードの効率とインタプリタの柔軟性の双方を備えることができる。」というものである[8]。
その歴史の多くの部分において、GuileはScheme標準に厳密に従っていたわけではなかった。
The Guile version of Scheme differs from standard Scheme ([Clinger]) in two ways. First, in Guile Scheme, symbols are case sensitive. Second, in Guile Scheme, there is no distinction made between the empty list and boolean false (between
'()and#f).[9]
現在のGuileでは、空のリストとブーリアン型の#fは区別される。シンボルの大文字/小文字は区別されるが、Guileのレキシカルスキャナ兼パーサである reader procedure における分岐により、Guileはシンボルでの大文字/小文字の区別をやめることができる。最近採用されたScheme標準R6RSは、R5RS以前の標準から離れて、大文字/小文字の区別をデフォルトとして採用している。
Guileとアプリケーションとの密接な連携にはコストが伴う。Schemeは再帰を頻繁に行うので、末尾再帰を最適化した実装を要求するが、ほとんどのテクニックは他言語との相互運用性を損なうものである。Guileは、純粋にSchemeの関数やプログラムの中で末尾再帰を最適化するよう妥協し、C言語の関数が視野に入ったときは末尾再帰をあきらめるということを強いられる[10]。Scheme標準のもうひとつの要求であるcall/ccの実装も、不満足なものである。— C言語で継続を扱うには、C言語のスタック全体をヒープにコピーすることが必要になる[11]。ガベージコレクションもまた、効率的なものとはなりえない。C言語のコードはSchemeのコードへのポインタを持つことができなければならないからだ。必要なconsセルの消失を避けるためには、Guileのガベージコレクタは保守的なものにならざるを得ず、再利用される可能性のあるセルを失う可能性がある[12]。
Guileはリチャード・ストールマンによって始められた(のちに「Tcl戦争」と呼ばれることになる)白熱した議論にその端を発する。ストールマンは、Tclはアプリケーションを記述するには力不足だとし、GNUのアプリケーションを拡張するためにふさわしい言語としてSchemeを提唱して、その結果、Guileプロジェクトが始められた[13] 。 当時、適当なSchemeインタプリタがなかったため、Guileは「隙間」を埋めるために開発された。(のちにarchの開発者となる)トム・ロード[14]はシグナスソリューションズ[15]で働いている間にGuileの開発に深くのめりこんだ。初期のバージョンは、1995年よりも以前にSIOD(英: Scheme In One Day[16])やSCMインタプリタ[17]から派生した[18]。
Guileの目標のひとつは、他の言語からSchemeさらにはポータブルな バイトコードへの翻訳を可能にすることである。そうすることで、Guileは効果的な言語中立のランタイム環境となることができる。この目標はいまだ達成されていないが、多くの努力がなされてきた(C言語と類似する構文を持たない他のScheme方言からの、Emacs Lispからの、TkWWWの関係で実装されたTclからの、そしてLOGOの類似言語からの変換が報告されている)。
Guile Scheme はXML、XPath、XSLT を(SXML、SXPath、SXSLT それぞれにおいて)サポートしている。 S式に基づいたXML処理が guile-lib によって提供されている。
GuileはポータブルなSchemeライブラリSLIBをサポートする。
scm_cons, which is the underlying implementation of the Scheme procedures cons.」Blandy、1997年, pp. 94, 96. call/cc copies the entire C stack into the heap; invoking a continuation copies the stack back from the heap and uses the longjmp function to reactivate it. This implementation has a number of drawbacks…」Blandy、1997年、p. 99. 固有名詞の分類