with文

Xtalはwith文の導入を考えていた時期がありました。 結論として、with文は動的型言語が持つべき機能ではない、ということになりました。 with文は確かに便利な場合もあるのですが、 時にとてもわかりにくいバグを誘発してしまいます。withがあるjavascriptで…

複雑な実装をシンプルに

一部無駄に複雑になっていた実装をシンプルに書き直しています。 シンプルに書くと、コードサイズもバグも少なくなるので定期的にコードを見直しています。 最初からシンプルに書ければいいんですけどね。

C++の例外を排除へ

C++の例外を完全に使わない方向で修正することにしました。 これまでもC++例外をoffにすることができるようにはしていたのですが、RTTIと同じようにデフォルトをオフとします。 理由は主に次の二点です。 コードサイズが膨張しすぎ たとえばVCでは、例外をof…

Iterator::ip

イテレータに便利なデバックメソッドを追加しました。ipという名前で、イテレートする内容を指定した個数分デバックプリントできる機能です。 10.times.ip(5); // <[0,1,2,3,4 ...]> と表示される // 引数を省略すると3個指定したことになる 10.times.ip; // …

Rubyの本

プログラミング言語Ruby http://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E-Ruby-%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8-%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D/dp/4873113946 を昨日購入しまし…

fiber

fib: fiber{ try{ "begin".p; yield; } finally{ "end".p; } } fib(); // 一回しかファイバーを起動しない というように、finallyがついているtryの途中でファイバーが死んだ場合でも、 ちゃんとfinally節が実行されるつもりでしたが、試したら実行されませ…

xpeg api

文字列オブジェクト 同じ部分文字列とマッチする要素。 文字列を要素とする範囲オブジェクト ("a".."z") 範囲内の文字とマッチする要素。 並び: e1 >> e2 選択: e1 | e2 ゼロ個以上の繰り返し: e*0 1個以上の繰り返し: e*1 1個以内の省略可能: e*-1 否定 ~e …

xpeg

xtalにxpegという名前でPEGが入ります。svn上では一応実装されています。 PEGとは http://ja.wikipedia.org/wiki/%E8%A7%A3%E6%9E%90%E8%A1%A8%E7%8F%BE%E6%96%87%E6%B3%95xtalで対応する演算子は次のようになります。 並び: e1 >> e2 選択: e1 | e2 ゼロ個…

Xtalに型チェック

型チェックの導入を考えています。Array var = 10;と書くと、 temp: 10; if(!Array.op_check(temp)) throw TypeError(); var: temp;というコードとほぼ等価になる機能です。普通の型だと、単純に遅くなるだけですが、int と floatの時だけは最適化で速くなる…

xtalはなぜ参照カウンタ?

xtalのGCは参照カウンタとマークアンドスイープの併用です。最初の方の実装では、Rubyのように、Cスタックをスキャンする保守的GCな頃もありました。しかし、ゲーム機などで使われることを想定して、移植性の低い実装は避けることにしました。 そのため移植…

Xtalの文字

Xtalは文字型が存在しません。 文字を表す場合、一文字の文字列を使います。文字を扱う場合に一見遅くなりそうに思えるかもしれませんが、 intサイズ以内に収まる文字列は、intやfloat同様変数に埋め込まれるため、 メモリアロケーション無しに文字が扱えま…

スマートポインタ

xtalとのやり取りに、ユーザーがC++で定義していたクラスを使うことは以前から可能ではあったのですが、xnew関数で生成したインスタンスじゃないと、SmartPtrで保持することはできませんでした。 この制限をもう少しゆるくすることにしました。 // 普通のnew…

空白と演算子と優先順位と

空白による優先順位のコントロール、ブックマークコメントで残念だという声が早速あったので、再考してみました。空白による優先順位は、「思っていた優先順位と違ってた!」というユーザーの意図したのと違う動作を食い止めるためでした。しかし、空白によ…

sig-gt12

1/17にsig-gt12のイベントに参加させていただきました。 色々な方と、色々なことが話せてとても勉強になりました。 ありがとうございました。xtalの「空白による優先順位のコントロール」はやはり疑問視してる方が多かったため、削除の方向で修正中です。

小さくしたい

現在、xtalの言語コアをコンパイルすると、luaのコアの二倍以上の大きさになってしまいます。 これを1.5倍程度に収めたいと思って肥大化してそうなところを触ってみているのですが、なかなか小さくなりません。関数やクラスのバインド部分で大きく膨らんでい…

アロケータをなんとかしたい

Xtalは、好きなメモリ確保、開放関数をユーザーが指定できるようになっています。 またオプションとして、 メモリ領域を渡して、そこを独自メモリ管理でやりくりする機構も備えていたのですが、 その機構をすごい簡易的に作っていたため、 確保が多くなると…

ブレークポイント

ブレークポイント機能を実装しました。 IDEが無いので、今のところあまり存在価値は無いです。 using namespace xtal; void debug_break_point(const debug::InfoPtr& info){ puts("break point"); } int main(){ try{ initialize(); debug::enable(); debug…

バグ修正

今日は家に居ます。 C++側からから、存在しないメソッドを呼ぶと落ちてしまうバグを修正しました。 AnyPtr a = xnew(); a->send("resizeee")(10); // スペル間違い とすると、UnsuportedErrorを送出するのが正しいのですが、 これまでは、まったく関係ないと…

classの上書き

ゲームでスクリプト言語を使うという際、 「ゲーム実行中にクラスをリロードしたい」 という欲求があると思いますが、Xtalではメンバの再定義などができないため、 それがしづらいという問題があると思いました。ということで、Xtalで定義されたクラスを上書…

バグ修正したものをsvnにコミットしました

バグ修正したものをsvnにコミットしました。 長い間触っていなかったため、ソースが他人の書いたもの状態になってないかと不安でしたが、すんなり思い出すことができてよかったです。 setterがコンパイルエラーとなるバグ修正 singletonがヘルプ通り動か…

1年間休んでて本当に申し訳ありません

一年間、完全に休んでしまいました。 本当に申し訳ありません。昨年は東京に移動し、仕事が増え、結婚の準備など、いろいろ重なり、 xtalの更新やここを見ることを放棄してしまいました。長い期間見ることができない日々が続いてしまい、 更新してないという…

すいません

ちょっと事情があり、webに繋げられませんでした。 今日からまた更新を再開いたします。 svnに最新のコードをコミットしました。 バグ修正 swichにdefaultがあるとおかしくなるバグを修正 連想配列リテラルを記述するとコンパイルできなくなるバグ修正 機能…

wchar_t に対応予定。

wchar_tに対応することにしました。 手元のソースではなんとか動いているようです。

変わったところ

K, M, Gの数字リテラルサフィックスが廃止 EnumeratorはIterableに名前変更 each_keyなどのeach_*系はkeysという風の名前に変更 配列化後置演算子 [], 連想配列化後置演算子 [:] 追加 export文廃止、トップレベルでreturnすると同じ意味となる

xtal_expr.cppを追加し忘れていました。

すでにソースをダウンロードされた方、大変申し訳ありません。

mingw

うーん、mingwでコンパイルすると、コンソールからの標準入力がvcでコンパイルしたのと挙動が激しく違うみたいで、vcだとおかしくありませんでした。

0.9.9.0 停止中

すいません、xgの方が動いていたので、ixなども動くものと思ってたのですが、ちょっと挙動がおかしいのでDL停止します。

Xtal 0.9.9.0 公開

http://code.google.com/p/xtal-language/downloads/listサンプルゲームの修正にちょっと時間かけすぎました。下のサンプルゲーム集は、C++で書かれた基本的な描画機能やマウス入力機能を持つ2Dゲーム作成用ライブラリ"xg"をXtalから呼び出せるようにして、…

GC

Xtalは参照カウンタとマークアンドスイープGCの併用となっており、GCを実行しなければメモリ使用量が閾値を超えない限りは、オブジェクトは一切回収されません。 そのため、毎ループxtal::gc関数を呼び出すことをお勧めします。gc関数はほとんど実行時間がか…

メモリ

Xtalはゲーム用途に使われることを想定しています。 ゲーム開発者の方々が気にすることの一つに「メモリはどこから確保されるのか」というのがあると思います。 昨今はメモリが増えたといっても、やはり断片化等で足りなくなる状況はありますので、気にする…