2007-07-01から1ヶ月間の記事一覧

VMの命令を整理

Javaに倣って 「0をpushする命令」 「1をpushする命令」「2をpushする命令」「3を・・・」と、小さい整数用に特化した命令を用意してましたが、ばっさり消しました。 「1-byte整数をpushする命令」があれば、処理速度の低下は、これら小さいリテラルを多用する…

廃止予定の機能

need_result変数 やっぱり使い道が微妙 継続 使い道が微妙 ファイナライザ C++レベルのオブジェクトはデストラクタが呼ばれリソースを閉じられるんで、Xtalレベルでファイナライザが必要な場面は少ない、それなのにファイナライザのためにGCが複雑になり、遅…

委譲

通りすがり 『メンバ変数の初期化も面倒ですが、委譲も面倒だと思いません? そのまま委譲対象のメソッドを呼ぶだけなことも多いので、シンタックスシュガーがあると便利だと思うのですが。』 確かに面倒ではあります。 でもコレ、よい記法が思いつかないん…

セレクターネームスペース草案

メンバの定義は 識別子@名前空間オブジェクトを返す式: method{} というように書く。 名前空間オブジェクトは namespace関数 で生成する。 呼び出すときは インスタンス.識別子@名前空間オブジェクトを返す式() というように書く。 use文を使うことで呼び出…

セレクターネームスペースを追加するか?

やはりセレクターネームスペースは欲しいと考えてます。 ecmascript4の名前空間のような。 http://www.google.co.jp/search?q=ecmascript4+%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_jaJP228JP229コレがあると、例…

gcc向け最適化をしてみた

gccで使えるテクニックの、スレッデッドコードというのが仮想マシンループにとても有効ということで、実装してみたのですが、 普通にswitch caseの方が早いんですが、これは…? ↓こんな感じで実装してます。 #ifdef __GNUC__ # define XTAL_VM_OPT #endif #i…

gccでコンパイルすると、異様に遅い

_Unwind_SjLj_Register _Unwind_SjLj_Unregister がプロファイル上位に来るような場合に、VCの10倍くらい遅い。困った。

SjLj? Dwarf2-EH? とは

gccとかぜんぜん使わないんで、あんまりよく知らないんですが、 SjLjの例外は「例外の送出は早いけど、try..catchや、デストラクタを持つオブジェクトのフレームを通るたびにコストがかかる」方式 Dwarf2-EHは「例外の送出は遅いけど、try..catchなどでのコ…

gccでコンパイルすると、異様に遅い件の追記

GCCを入れ替えて、例外がSjLjではなく、Dwarf2-EHで処理されるモノを使ったところ、VCと同じような速度が出ました。↓ここから落としました。MinGW GCC with Dwarf2-EH http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=82725&release…

続 最適化

そもそもインスタンス変数へのアクセスが遅すぎるような気がしてきました。 いろいろ調べた結果、VC2005付属のSTLのvector::operatorが遅いんじゃないかという結論に達しました。vector::operatorは次のようになっています。 reference operator[](size_type…

実行効率の最適化を試みた

これまで、Xtalの仮想マシンはバイトコードで動いていました。 マシンがもっとも早く読み書きできるサイズの整数を使うワードコードとどっちにしようか迷ったのですが、メモリの節約とエンディアンの違いを考慮しなくてもいいという理由から、バイトコードで…