中間言語

現状の実行系は

  • python関数を並べた配列一つがXXX(自作言語)関数の一つに相当する。
  • 実行状態ポインタがXXX(自作言語)関数の一部を指している。
  • run()は実行状態ポインタのポイント先を実行→インクリメントの繰り返し。
  • jump系の操作では実行状態ポインタをそのまま書き換える。

という感じ。粒度が極めて大きいVMだ。
インストラクション一つをパラメータなしのpython関数にするよりも(パラメータありのpython関数, パラメータ)とした方が良いかもしれない。というより任意のpython関数を受け取る時点でポータビリティが絶望的だ。ポータビリティを確保するためには(関数タグ, パラメータ)とした方が良い。と、まあ、これは普通の中間言語だな。
中間言語コンテナとしてはJava classファイルの仕様が参考になる。
http://java.sun.com/docs/books/jvms/second_edition/ClassFileFormat-Java5.pdf
ほとんどのデータをattributeとして扱っているのが興味深い。methodのコード本体すらattributeなので、VMに応じて異なるコード、極端にはネイティブバイナリ、を読み出すことも可能だろう。
S式でもXMLでも実装は何でも構わないが、構造化データにするのは最低限必要だ。読み取り速度まで考えるのはC++を作る際で構わないとしても、必要な項目だけは先にリストアップしておきたい。とりあえず、

ユニークID
これがないとリンクが面倒くさい。
種別タグ
データの読み取り器を切り替える。
データ領域
データを適当に放り込む。

というのは必須だ。データ領域には中間言語バイナリを直接入れるのも良いし、中間言語バイナリを格納したノードへのリンクとメタデータを格納するのも良い。URIで指定できるようにしても良いかも。