GNU Guile

は、プログラミング言語 lang|en|Scheme のインタープリタ/バーチャルマシン。1993年に初めてリリースされた。
はPOSIXシステムコールのモジュール化された拡張やAPL アレイの機能などを含み、オブジェクト ライブラリとしてパッケージングされている。「Libguile」を使うことで、Guileを他のプログラムの中に組み込んで、 他言語との密接な統合が可能なインターフェースとして使用することができる。
名前「Guile」は「GNU's ubiquitous interactive language for extension」から来ている。後付けのものではないが（注を参照）公式ウェブページの冒頭にあらわれたのは2011年の春頃である。
はGNUプロジェクトの「公式の」 拡張言語であるが、 2006年の時点で、人気のあるプロジェクトの中でこの言語を使っているものは十指に満たない。その名称については、ネットニュース|Usenetでの議論の中で、リー・トーマスによって提唱された。 基本的なアイデアは、「開発者は基本的なアルゴリズムやデータ構造はCやC++に実装し、機能や型をインタープリタ用のコードにエクスポートする。アプリケーションはインタープリタが統括するプリミティブのライブラリとなることで、コンパイルされたコードの効率とインタープリタの柔軟性の双方を備えることができる。」というものである。

**Scheme標準への遵守**
その歴史の多くの部分において、GuileはScheme標準に厳密に従っていたわけではなかった。
The Guile version of Scheme differs from standard Scheme () 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).
現在のGuileでは、空のリストとブーリアン型の#fは区別される。シンボルの大文字/小文字は区別されるが、Guileのレキシカルスキャナ兼パーサである reader procedure における分岐により、Guileはシンボルでの大文字/小文字の区別をやめることができる。最近採用されたScheme標準R6RSは、R5RS以前の標準から離れて、大文字/小文字の区別をデフォルトとして採用している。
とアプリケーションとの密接な連携にはコストが伴う。Schemeは再帰を頻繁に行うので、末尾再帰を最適化した実装を要求するが、ほとんどのテクニックは相互運用性を損なうものである。Guileは、純粋にSchemeの関数やプログラムの中で末尾再帰を最適化するよう妥協し、C言語の関数が視野に入ったときは末尾再帰をあきらめるということを強いられる。Scheme標準のもうひとつの要求であるlabel=call/ccの実装も、不満足なものである。— C言語で継続を扱うには、C言語のスタック全体をヒープにコピーすることが必要になる。ガベージコレクションもまた、効率的なものとはなりえない。C言語のコードはSchemeのコードへのポインタを持つことができなければならないからだ。必要なconsセルの消失を避けるためには、Guileのガベージコレクタは保守的なものにならざるを得ず、再利用される可能性のあるセルを失う可能性がある。

**歴史**
はリチャード・ストールマンによって始められた（のちに「Tcl戦争」と呼ばれることになる）白熱した議論にその起源を発する。ストールマンは、Tclはアプリケーションを記述するには力不足だとし、GNUのアプリケーションを拡張するためにふさわしい言語としてSchemeを提唱して、その結果、Guileプロジェクトが始められた 。
当時、適当なSchemeインタプリタがなかったため、Guileは「隙間」を埋めるために開発された。（のちにlang|en|archの開発者となる）トム・ロードはシグナスソリューションズで働いている間にGuileの開発に深くのめりこんだ。初期のバージョンは、1995年よりも以前にSIOD（Scheme In One Day)やSCMインタープリタから派生した。
の目標のひとつは、他の言語からSchemeさらにはポータブルな バイトコードへの翻訳を可能にすることである。そうすることで、Guileは効果的な言語中立のランタイム環境となることができる。この目標はいまだ達成されていないが、多くの努力がなされてきた（C言語と類似する構文を持たない他のScheme方言からの、lang|en|Emacs Lispからの、TkWWWの関係で実装されたTclからの、そしてlang|en|LOGOの類似言語からの変換が報告されている）。
はXML、lang|en|XPath、XSLT を（SXML、SXPath、SXSLT それぞれにおいて）サポートしている。 S式に基づいたXML処理が guile-lib によって提供されている。
はポータブルなSchemeライブラリSLIBをサポートする。

**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
*label=Liquid War 6
*mcron — Vixie cron の代替品。上位互換である。
*OpenCog
*Scwm
*Skribilo
*TkWWW — ウェブブラウザー。Tk (ツールキット)を使って作成されており、拡張も可能。開発は終了している。
*GNU DMD
*GNU Artanis

**脚注**

**参考文献**
「 Guile Scheme」— 仕様と履歴 © FSF（1995年12月）
*「 An Anatomy of Guile, The Interface to Tcl/Tk」(1995年)
*Cite book |last=Blandy |first=Jim |editor=Peter H. Salus |year=1998 |title=Guile: An Interpreter Core for Complete Applications, Handbook of Programming Languages : Functional and Logic Programming Languages |volume=Volume IV|edition=1st |language=En |location=Indianapolis, IN |publisher=マクミラン・テクニカル出版 |pages=87–104 |oclc=426167659 |isbn=1-57870-011-6|ref=harv

**外部リンク**
 GNU Guile 公式ウェブサイト- Archives of the Tcl Wars- A 2003 interview with GNU Guile maintainer Marius Vollmer
*「 a brief history of guile」（Guile説明書より）