このWIKIを編集するにはパスワード入力が必要です

認証パスワード
RSSフィード

グローバル変数の隠匿

グローバル変数をやめて関数の引数として渡すようにしたいです。意外としんどいです。virtual_machine は動的環境、静的環境、プログラムを受け取って静的環境を返します。resume は名前、静的環境、プログラムを受け取って静的環境を返します。なぜか静的環境を返すのが人気ですね。

静的環境をグローバルにしないための変更に着手しましたが、途中で引き返しました。特に名前テーブルを隠匿するのが厳しいです。作業の予定は、2008年5月リリースのあとになりますが、こんな感じ。

まず construct_static_environment, virtual_machine, resume のインターフェースを変更。main_storage を隠匿して、記憶装置を扱う命令に senv を渡す。

名前テーブルのインターフェースは identify と destruct_gismo しかないはず。identify は静的環境を明示するようにする。このとき作られるベクトル格のデータに静的環境への弱リンクを埋め込む。equivalent と destruct_gismo はこの弱リンクを使って静的環境を区別する。

動的環境にも静的環境への弱リンクを入れます。リンクを設定するのは virtual_machine 関数です。construct_dynamic_environment ではリンクは NULL にしておきます。

あと、すぐできることとして、load_program のインターフェースを生成的にする、ファイルポインタがグローバルなのをやめる、などがあります。


  • 最終更新:2008-05-03 22:54:42