環境指向言語


昨今、関数型言語オブジェクト指向言語の融合が行われています。
Objective CamlScalaがそれです。
しかし、現在ではまだ完全とは言えない状況です。
統一理論的な考え方を作り出すことで融合はスムーズに行えると言えるでしょう。
オブジェクトもクロージャも環境と変数と関数から構成されています。
環境を扱う言語にすればうまく統一的に扱えるのではないでしょうか?

環境とは?
値を格納するための領域です。
値を格納するのにつかわれるデータ構造は、スタック、連想配列、リスト、構造体、配列です。
配列は名前なしの関数の引数に使われます。
スタックは関数の作業領域の確保に使われます。
連想配列は名前と値を関連付けるためにつかわれます。
リストはネストした環境を作成するのにつかわれます。
構造体は実行時には連想配列を用いないようにすることで高速化するために使われます。


では、環境にはいったいどんな種類があるのでしょうか?

まず、環境といえばスタックフレームです。
関数を呼び出すたびにスタックポインタを進め、環境を作って使い、
関数呼び出し終了とともに、スタックポインタを戻します。
スタックを管理するためのレジスタも環境の一部と言えるでしょう。
メソッドはオブジェクトに属する関数です。したがってメソッド呼び出しの際には
スタックによる環境が作られます。しかしメソッドにはもう一つのオブジェクトという
環境が与えられます。オブジェクトの継承ツリーは環境のリストを作り出します。



というかんじで、環境がすべて!環境さえあれば何でもできるな言語っていう観点から
言語設計をしたら面白いんじゃないかなっと思います。