* コード体系について -(by [[K]], 2014.09.01) ** (1) フロントエンドバイトコード -現状のフロントエンドバイトコードは、[[page0103]]のとおり、圧倒的に小さいという特徴があるけれど、しかしこれは限界ではない。なぜならエンコードはhh4をベースにしていて、各命令のより精密な出現頻度を反映できていないし、文字列定数も単純な8ビット形式と7ビット形式くらいしかないので、やはり各文字の精密な出現頻度を反映できていない。 -もしレンジコーダなどを利用してこれらについても最適化できたとしたら、おそらくさらに1割くらいの改善が見込めるのではないかと思う。つまりhelloは13バイトになり、hexdumpは94バイトになるのではないかと思っている。 -そういう研究をやりやすくするためにも、(2)のコード体系の拡充は重要だと思う(いろんな実験がやりやすくなる)。 ** (2) さまざまなバイトコード体系 -フロントエンドコード(fr):hh4 -バックエンドコード(bk):hh4 -バックエンドコードb32形式(b32):hh4 -bs32形式(bs32):バックエンドコードをSInt32でエンコードしたもの -fs16形式(fs16):バックエンドコードをSInt16でエンコードしたもの -fr32形式(fr32):フロントエンドコードをSInt32でエンコードしたもの -fs32形式(fs32):簡易フロントエンドコードをSInt32でエンコードしたもの --fs32形式にはリピートレジスタや型推論がない。 -fs16形式(fs16):fs32のSInt16版 -なぜコード体系を増やすのか? --コンパイラやVMを作ってもらうときに、いきなりbkかfrを使わせるのは、少々大変だなと感じたから。bs32がもっとも単純。 --bs32→fs32→fr32→frの順で変換する。 --ASKA→bs32→fs32→fr32→frの順で変換する。 --ASKA→bs32→bkの順で変換する。 * こめんと欄 #comment