8.1
厳然たる事実
265
ません。実際に、言語を別のもっと高機能の全域的プログラミング言語で書くことができれ
ば、それは立派なことなのですが、この新しい全域的言語もまた自分自身のインタプリタを実
装することはできません。
こうした議論は好奇心をそそりますが、全域的言語というのは人為的な限界を持つよう設計
されたものです。私たちはどんなコンピュータやプログラミング言語にもできないことを求め
ていたのです。先に進みましょう。
8.1.5
プログラムは自己参照できる
does_it_say_no.rbで使われている自己参照というテクニックは、プログラムが自分自身のソース
コードを読めることに依存しています。これが常に可能だと仮定するのは、少々無理があるように思う
かもしれません。先ほどの例では、周りの環境(すなわちシェル)が提供する機能のおかげで、プログ
ラムは自分自身のソースを入力として受け取ることができました。たとえシェルが使えなくても、
RubyのファイルシステムAPIと現在のファイル名を含む特別な
__FILE__
定数を使って、
File.
read(__FILE__)
とすることにより、ディスクから直接データを読むことができます。
ところが、ここではOSや
File
クラスに依存することなく、Rubyの万能性にのみ依存した一般的
な議論にする必要があります。JavaやC言語のような、実行時にソースにアクセスできないかもしれ
ないコンパイル型言語ではどうでしょうか。JavaScriptのような、ネットワーク経由で ...