バインダ改修中

結構何度も書き直してしまう関数のバインダ周りなんですが、また書き直してます。 これまでの記述方法でも書けるのですが、次のような新記法も追加することになりました。 XTAL_BIND(Vector){ Xdef_method(normalize); // このような、もっと簡単な記述方法…

標準ライブラリのバインド

たとえばluaでは、数学系の関数をluaから使いたいという場合、 lua_State *L = lua_open(); luaopen_math(L); というように、luaopen_math()を呼ぶ必要があります。これはsquirrelでもそうだったはずです。 使わないライブラリでメモリを圧迫しないようにで…

eval関数追加

デバッガの実装のために「ブレークポイントにて停止中に式を評価する機能」が必要だったので実装していたのですが、ついでにbuiltin::eval関数として追加することにしました。 foo: 100; eval("foo + 10").p; //=> 110; また、永らく使用不可能となっていたi…

16byteアライメントを持つメンバを持つオブジェクトに対応

これまでxnewで生成されたオブジェクトは16byteアライメントを持っていてもいなくても、関係なくmallocで取得したメモリに配置していました。 普通のnewも同様に、関係なく配置します。なのでアライメントの問題はどうしようもないだろう、と思っていたので…

メモリアロケータ書いた

ええ、車輪の再発明だということは承知しておる! Xtal全体がまぁ再発明ともいえるんですけど。 Xtalはユーザーが自由にmalloc, free関数を登録できるようになってるんですが、 「メモリ確保関数を用意して登録するのめんどくさい。単純にメモリのここからこ…

Rubyでバイナリデータを読み書きする

Rubyでバイナリデータを読み書きするのには、pack, unpack使うじゃないですか。 僕もねぇ、Ruby使い始めてもう何年も経つんですけど、pack, unpackっていつまでたっても覚えられないし、 使うとなんか汚い煩雑なコードになっていくんですね。そんなことって…

文字列リテラルを渡されて生成されたStringオブジェクトは、メモリ確保が起こらないようにした

もともと文字列の長さがsizeof(int)-1のものは、即値になるようにしてメモリ確保が起きないよう工夫していましたが、 今回、文字列リテラルを渡されて生成されたStringオブジェクトも即値になるようにしました。 void foo(){ StringPtr str = xnew<String>(XTAL_STRI</string>…

文字列リテラルのmurmurhashを即値にする

http://murmurhash.googlepages.com/ enum{ hash_m = 0x5bd1e995, hash_seed = 0xdeadbeef, hash_r = 24 }; template <int N> inline uint_t hashv(const char (&data)[N], uint_t h){ uint_t k = data[0]; k |= data[1] << 8; k |= data[2] << 16; k |= data[3] <<</int>…

Xidを効率よくしたい

Xidというマクロは、簡単に書くと次のようになっています。 #define Xid(ident) intern(#ident, sizeof(#ident)) IDPtr intern(const char* str, int size){ strのハッシュを計算して、インターン済み文字列が格納されているハッシュテーブルを引いて、 存在…

ツイッター

作法とか勉強中。 Xtalのここが使いにくい!とか、更新が無いぞ!とか、なんでも気軽にツイッターで@dofixxつけてツイートしてください。

1.0.1.1

uninitialize時に、StringSpaceが持っている配列の開放時に停止する不具合を修正しました。

google group

なんか返信しても反映されない…。なんでだろう? - 再定義の件は、以前修正いたしました。スレッドの件ですが、 現在スレッド切り替えは、 Xtalの仮想命令の無条件ジャンプのときに検討するようになっているのですが、 示されたコードだと、無条件ジャンプが…

バインドの仕様変更

C++のクラスをバインドした場合、自動的にcppという名前空間に登録される仕様にしました。 C++のクラスを楽に参照することができます。 // main.cpp struct Vector{ float x, y; }; XTAL_PREBIND(Foo){ it->def_ctor0<Foo>(); } XTAL_BIND(Foo){ it->def_var("x",</foo>…

トップレベルの仕様変更

関数定義とクラス定義だけは、filelocalをつけなくとも、自動的にfilelocalにも同時に定義されるように、 そして、トップレベルの最後では自動的にfilelocalがリターンされる仕様にしました。 よって、次のように記述することができるようになります。 // aa…

twitter

http://twitter.com/dofixx/iPhoneにもクライアント入れました。

あと

今勤めている会社でも、Xtalを採用してもらえるようになるかもしれないという動きが。 そうなれば、もっとXtalに時間を割けるようになるかもしれません。

デバッガ製作中

現在、QtでGUIデバッガを手作りしてます。 ・式評価 ・ブレークポイント設置 ・ステップイン、ステップアウト、ステップオーバー ・簡単なソース編集機能 ・コールスタックの表示 を実装しました。 できれば近いうちにリリースしたいと思います。

1.0.1.0

また音沙汰無い期間を作ってしまった…。 忙しいからと、一度離れてしまうと、自分の場合放置してしまう悪い癖があるようです。 忙しくても毎日日記を更新していくようにします。 - バージョン1.0.1.0をリリースします。 このバージョンからXtalはMIT licence…

仮想マシンの書き換え

Xtalの仮想マシンをスタックマシーンから、Luaと同じようなレジスタマシーンに書き換えました。 使い方、挙動に変更はありません。 ちょっと実装に時間をかけすぎてしまいました。

実行速度が…

最近ベンチで比較してなかったため気づかなかったんですが、Xtalの実行速度がLuaやSquirrelより結構遅くなってました。 これではまずいので、いろいろと処理を見直しています。

0.9.9.9

とりあえず0.9.9.9をリリースします。http://code.google.com/p/xtal-language/downloads/listxtal-0.9.9.9.zip がソースです。 html.zip がHTMLとして生成したドキュメントです。解凍してindex.htmlを開いてください。 ドキュメントの整備が完了して、それ…

1.0に向けて

マニュアルを書き直すために、ヘルプ作成ソフトを色々調べていました。SpeedHelpPad, HelpMaker, HelpNDoc, ヘルプましん…と、色々試しました。最終的に、Doxygenで書くことにしました。 自動生成じゃない普通のドキュメントも書ける、とのことだったので試…

NativeClient

今頃NativeClientかよっ、って感じもしますが、XtalもちゃんとNativeClientで動かせるのか気になったので試してみました。 C++ソース test.cpp #include "../src/xtal/xtal_all_src.h" #include <nacl/nacl_srpc.h> int doxtal(NaClSrpcChannel *channel, NaClSrpcArg **in_arg</nacl/nacl_srpc.h>…

未定義の変数ルックアップをもっとはやくエラーに

Xtalは未定義の変数に遭遇した場合、filelocalから同名のメンバを探し、あったらそれを使い、なかったらエラーとする仕様です。 fun foo(){ // filelocal::boo.p;と同じ // しかし、filelocal::booは存在しない boo.p; } foo(); // 未定義の変数参照エラーが…

文字列リテラルをintern済み文字列に変換

C++からXtalで定義されたメソッドを呼びたいというとき、 objectptr->send("this_is_a_pen"); という風に呼び出すことができます。 ここで、sendが本当に必要なのはintern済み文字列なので、自動的に文字列リテラルがintern済み文字列に変換されています。C+…

やっと複数の環境を持てるようになりました

XtalはひとつのプロセスにひとつのXtalの実行環境だけしか以前は持てませんでした。 この数ヶ月、こつこつと修正していき、ようやく複数の環境を持てるようになりました。別スレッド上でxtal::initializeを呼び出すと、*1 それぞれのスレッド上で、独立したX…

参照カウント

Xtalでは参照カウント方式を採用しています。 そのためアチコチで参照カウントが上げ下げされているのですが、ちょっと問題に思っていることがあります。今回の説明に必要な部分だけを、説明にいいように変形して抜き出したコードが次になります。 enum{ TYP…

AO bench

http://lucille.atso-net.jp/aobench/噂のAO benchをやってみようと、JavaScript版をXtalに移植してみました。 Luaのソースを落としてきて実行してみたところ、 私の実行環境では、Luaの実行時間259秒に対し、Xtalでは498秒かかりました。 およそ2倍遅いとい…

[新しい構文を考える] e4x相当

ゲームにおいてもXMLは当たり前のように使用するようになっています。*1 XtalもXMLリテラルとか、XMLノードを簡単に扱える機構を取り入れるべきなのかもしれません。 これは、かなり前、取り入れる方向で考えていました。 しかし、XMLの仕様をちゃんと実装し…

構文糖衣

javascriptやsquirrelの関数定義は次のように書きます。 function foobar(){ return 0; } これは、次の構文のシンタックスシュガーです。 // javascript var foobar = function(){ return 0; } // squirrel loacal foobar = function(){ return 0; } Xtalも…