2006-10-03から1日間の記事一覧

バイトコード採用

Xtalは独自のバイトコードを独自の仮想マシンが解釈して駆動します。XtalのバイトコードはJavaのバイトコードの仕様を参考にして作られました。 当初はバイト単位ではなく、マシンが一番早く計算できるword単位にしていました。何故変えたかというと、ある日…

パース

XtalはLexerやParser部分にyacc等を使用しておらず、完全に手書き再帰下降型となっています。 当初はBoost.Spiritを使用していましたが、全構文の3分の1を入れた時点でコンパイル時間がめちゃくちゃ長いわ、メモリが足りないからコンパイルオプションで指定…

ポータビリティについて

Xtalは今のところwindowsでの動作しか確認していませんが、C++標準の関数以外は使用していないため、Linuxでも動作する(はずです)。例えばfiberはその機能名から、Win32APIのFiberを使用しているのでは、と想像する人が多いかもしれませんが、使用してはいま…

末尾再帰

Xtalはある理由のため、末尾再帰、末尾関数呼び出しを必ず最適化し、その関数フレームを再利用します。 そのため次の例はスタックオーバーフローになったり、メモリを使い果たしたりすることなく、永遠に実行されます。 f : fun(i){ println(i); return f(i+…