2006-10-01から1ヶ月間の記事一覧

パース

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

ポータビリティについて

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

末尾再帰

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

メソッドの追加

classやmoduleの定義後にメソッドを追加することも可能です。 // Carクラスにstopメソッドを追加定義 Car::stop : method(){ this.velocity = 0; } car : Car(); car.step_on_accelerator(100); car.stop(); println(car.velocity); // 0これには注意しない…

module

Rubyのmoduleとほぼ同じモノがXtalにも存在します。 moduleはmix-inのため、または名前空間のように使うために存在します。例: JetEngine : module{ @power : 100; burst : method(){ this.step_on_accelerator(@power); @power = 0; } }ジェットエンジンモ…