23.5KB(0.0003倍)論点:gccは確かに速い。生成しているアセンブラを見ていると本当にすごく努力している。ess03fだってそんなに悪くない。そのgccに1.2倍のところまで迫っている。gccのサイズについては、不要なものもたくさん含んでいるだろうから、実際に必要なのは数MB程度かもしれない。それでもess03fのサイズの小ささはかなりのものと言える。ess03fはC言語をそのまま入力できるわけではないので、不公平感はある。以下に示しているようにそれほどかけ離れているわけではない。ess03fの内部情報:JustInTimeコンパイラを内蔵したインタプリタ。動的型付き言語で、変数宣言などはいらない。現状ではグローバル変数しかサポートしてない。関数宣言すらできない。現状で使える型は、整数型と実数型しかない。配列も構造体もまだ使えない。if文もelse節をまだ実装していない。動的型付き言語では、型推論を行わないとスピードが出ないと言われているが、このess03fでもそれなりに型推論を行っている。23.5KBの中で!ess03fは、プログラムの実行にあたってCコンパイラやアセンブラやリンカなどが必要になるということはない。23.5KBの中に必要なものはすべて入っている。ピュアなWindowsさえあればOK。演算は、整数演算についてはすべてEAXのみを使う形でコンパイル。実数演算については、ST(0)を使う形でコンパイル。言ってタコなコードである(というか23.5KB程度のJITコンパイラに多くを期待されても困る)。やって生成したコードから不要な命令を削除する。...命令の並べ替えはしない。並べ替えを検討するとすごく難しそうだから。この方針だとレジスタが余るので、プログラマはいくつかの変数を直接レジスタに割り当てることができる。それはgccとは異なり手動で行う。それでもこれだけの速度は出る!・・・CPUがレジスタリネーミングなどで相当に頑張っているのだと思われる。-O3にここまで迫った速度が出せるということ。esmandel.txtで実行できる。ess03fのソースコードは今回は公開しません。