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