実行可能ファイルのフォーマット

実行可能ファイル(拡張子.rlx)からのロード・実行を実装しました。

http://github.com/nineties/rowl/commit/c454fd019919dee0526ecc96b256091ca1da9771

実行可能ファイルのフォーマットは先頭から

  • 1ワード : ファイルの総バイト数(=N)
  • 1ワード : グローバル参照オブジェクトの数
  • 1ワード : グローバル値オブジェクトの総バイト数(=M)。Mはワードの倍数になるようにアラインする。
  • Mバイト : 値オブジェクト領域
  • 残り : バイトコード

という感じにしてます。今後も随時必要なフィールドを追加していきます。

プログラムのロード→実行の流れは

  • 最初の3ワード(ヘッダ)をロード
  • スタックの底に参照オブジェクト領域確保
  • 値オブジェクト領域+バイトコード領域を一括してメモリ上にロード
  • プログラムカウンタをバイトコードの先頭に移して実行

となります。

いずれは分割コンパイルの為にオブジェクトファイル(.rlo)を定義して、リンカを作る予定です。