Mosh のビルド時間の短縮
Mosh のビルドで compiler.cpp と match.cpp のコンパイルに時間がかかる。
これらの C++ ソースコードは
と変換されたファイルでファイルサイズが数100KB 〜数MBのファイル。
g++ に優しいソースコードを出力するようにしたところ
コンパイル時間:180秒 => 130秒
と大きく改善された。
改善ポイント
改善のポイントはなるべく即値をうめこむこと。
以前は以下のように必ず Object のコンストラクタを挟んでたのを
#define SA(s) Symbol::add(UC(s)) #define SI(s) Symbol::intern(UC(s)) #define MI(i) Object::makeInt(i) #define MIS(i) Object::makeInstruction(i) #define MCI(i) Object::makeCompilerInstruction(i) static Object array1[] = { builtinSymbols[573], MIS(14), MI(60), MI(1), Object::True, MI(0), MI(20), list0, MIS(27), MIS(23), MI(9), MIS(50), builtinSymbols[1025],
以下のように即値で埋め込む。
static word array1[] = { builtinSymbols[573].val /* parameterize */, 462, 241, 5, 70, 1, 81, list0.val, 878, 750, 37, 1614, builtinSymbols[1026].val /* top level :$:first */,
即値にすると速くなるのは考えれば当たり前だが、いくつか実験して速くなることを発見したときはうれしかった。
もしかしたら gcc 3.x 系でもビルドできるようになったかも。(試していない)
これで psyntax もプリコンパイルできるようになると良いのだが。