なぜ静的な世界で閉じることができないか

静的というのは、コンパイル時に決定されることを、一般的にはいいます。

 

静的型は、コンパイル時に型が決定される型。関数が静的というのは、コンパイル時に、関数の定義(戻り値、引数、実装)が決まることをいいます。

 

関数呼び出しが静的というのは、リンク時に、関数のアドレスが決定されていることをいいます。

 

ただ、世界は閉じてはいません。

 

えーっと、たとえば、あるプログラミング言語からあるプログラミング言語を呼び出します。C言語からSPVM、または、SPVMからC言語を呼び出す。

 

SPVMがC言語を完全に取り込んだ場合は、世界を閉じることができるし、C言語がSPVMを完全に取り込んだ場合は、世界を閉じることができる。

 

ただし、現実には、ダイナミックリンクする場合は、世界が閉じない。なぜダイナミックリンクなのかといえば、たとえばOpenSSLのコンパイルが難しすぎるとして、静的ライブラリで取り込むのも名前衝突がいやだ、となると、OSのディストリビュータが共有ライブラリを用意する。これをユーザーが使う。

 

こういう場合は、世界が閉じない。こういう場合は、現実にはたくさんある。