Hatena::ブログ(Diary)

新言語 Xtalを作る日記

2009-12-17 1.0.1.0

また音沙汰無い期間を作ってしまった…。

忙しいからと、一度離れてしまうと、自分の場合放置してしまう悪い癖があるようです。

忙しくても毎日日記を更新していくようにします。

--

バージョン1.0.1.0をリリースします。

このバージョンからXtalMIT licence、zlib/png licenceのどちらかでOKにいたします。

本当はzlib/png licenceだけでいいんですけど、zlib/pnggoogle codeが対応してないようです。


変更点

トップレベルで定義されたクラスや関数は自動的にfilelocalにも登録されるように変更

トップレベルの最後では自動的にreturn filelocal;が挿入される仕様に変更

一部コンパイラコンパイルエラーとなるため、バインダの仕組みを変更。使用方法に変更なし。

デバッガのためのコード追加

ネイティブ関数の呼び出し時に、仮想マシンスタックが拡張することによる、不正なポインタの参照が発生するバグを修正

debugger作成中に必要を感じて実装したメソッドなどを追加

その他バグ修正

デバッガ製作中 07:46  デバッガ製作中を含むブックマーク

f:id:xtalco:20091217074203p:image

現在、QtGUIデバッガを手作りしてます。

・式評価

ブレークポイント設置

・ステップイン、ステップアウト、ステップオーバー

・簡単なソース編集機能

・コールスタックの表示

を実装しました。

できれば近いうちにリリースしたいと思います。

あと 07:46  あとを含むブックマーク

今勤めている会社でも、Xtalを採用してもらえるようになるかもしれないという動きが。

そうなれば、もっとXtalに時間を割けるようになるかもしれません。

anonymousanonymous 2009/12/18 10:18 バージョンアップありがとうございます。
しかし、zipに固めたものが22バイトになってます。

xtalcoxtalco 2009/12/18 10:39 すいません、ご報告ありがとうございます。
zipのソースを差し替えました。

monaemonae 2009/12/24 13:52 更新ありがとうございます。お疲れ様です。
macでは動かせませんでしたが、windowsで試してみて
いくつかバグと思しき挙動を見つけましたので
ここで報告させていただきます。

1. 配列リテラルだけの文で強制終了する。
ソース中に
[1,2,3];

["a":1];
といった配列、連想配列リテラルのみの文があるとxtal.exeが強制終了します。
なお空の配列や連想配列では何も起きませんでした。

2. 浮動小数点数のパース
4294967296.0
という数値リテラルがあると、これが 0.0 と解釈されてしまいます。
32ビット整数のオーバーフローが原因ではないかと思います。

3. 代入演算子の再定義について(バグではありませんが)
現在の仕様では、
"a += b;" と "a = a.op_add_assign(b);"
が等価とされています。
op_add_assign を自分で実装する際は、
A. 新しいオブジェクトを作って返す
B. 自らの値を変化させてthisを返す
のどちらかの選択肢があると思われますが、
A、Bのどちらが実装としてふさわしいのでしょうか?

Aではop_addとやることが変わらないので、
二つ別のメソッドを用意する意義が薄いように思います。
Bでは最後の return this; を忘れると変数にundefinedが入ってしまい
思わぬバグを誘発する恐れがあります。

xtalcoxtalco 2009/12/25 08:58 ご報告ありがとうございます。バグは修正してコミットいたしました。

3の件ですが、
op_add_assignを定義したいオブジェクトが、mutableならば自らの値を変化させてthisを返し、
immutableならば、新しいオブジェクトを作って返してください。

選択肢が二つある理由を説明します。

もし「A」の選択肢しかないとします。
v: Vector3(0, 0, 0); // 3次元ベクトル型
a: Vector3(1, 2, 3);
100.times{
v += a;
}
と記述した際、もしop_add_assignがop_addと分かれていなければ、
100のテンポラリオブジェクトが必ず生成されてしまいます。
しかし、Vector3が変更可能オブジェクトであるならば、無駄です。

次にもし「B」の選択肢しかないとします。
そうした場合、変更不能オブジェクトは、そもそも実装が不可能です。