programming

libpcl and c++ exceptions

てきとーなテストコード書いて問題なかった。somari(Gentoo Linux / Linux 2.6 x86_64)でテスト。あとでpersianのwin32環境でもテストすること。

PCLとGNU Pth

5分で両方のAPIリファレンスを流し読みしただけなので、あんまり参考にしないように。Pthはpthread互換APIを目指してるようなかんじ。APIがみょーに多い。システムコールがスレッドの中で呼ばれることを気にしている様子。(あの悪しきスレッドキャンセルへ…

C++で継続・コルーチン

タスク定義をどうするかが問題。なんとかcontinuation(継続)をC++でかけないものか。必要なのは、いわゆるプログラムカウンタ(+レジスタ群)の保存と、スタック上のローカル変数データの保持。FSMモデルならなんとかかけます。(参考:d:id:yaneurao:200…

std::vectorでイテレータループ内でのerase

std::vector<int> test; test.push_back(0); test.push_back(1); test.push_back(2); std::vector<int>::iterator i; for(i = test.begin(); i != test.end();) { if(*i == atoi(argv[1])) i = test.erase(i); else ++ i; } で正常に動作する。2007/04/22追記:eraseの</int></int>…

std::numeric_limits

今まで普通にfloat.hとか使ってたよ…

UDP: listening to multiple network interfaces

ワイルドカードでやる方法ないのかな。すべてのNICのIPアドレスでlistenが必要?ローカルホストでテストしていたところ、INADDR_ANYでlisten発行したはずが、192.168.0.5でlistenされるらしく、localhost(127.0.0.1)向けにパケット送っても全く受け取ってく…

boost::remove_pointer

すげぇ。 template<typename T> inline T FNTNetPacket_safecast(FNTNetPacket* p) { if(p->getType() != boost::remove_pointer<T>::type::msgtype) FECTI_THROWEX(FEX_SOCKET, FEXS_SOCKET_FECTIP, "invalid cast"); return reinterpret_cast<T>(p); } メンバ関数テンプレー</t></t></typename>…

boost::threadにはZThread::Thread::cancelled()の代替がない

ZThreadから移植中。詰まった。追記:boost::thread_specific_ptrで無理やり解決。

memcpyとbcopy

void bcopy(const void* src, void* dest, size_t bytes); void* memcpy(void* dest, const void* src, size_t nbytes); 違いまとめ: 引数src, destの順番が逆 bcopyは領域が重なっていても正常動作、memcpyはダメ(memmoveはOK) memcpyはdestを返す

clone/dupの挙動

あくまでshallow copyなので、a.aryもb.aryも同じ配列オブジェクトを参照する。 class TestClass attr_accessor :ary def initialize @ary = Array.new end end A = TestClass.new A.ary << "a" B = A.clone p A p B B.ary << "b" p A p B%ruby clonetest.rb…

likely/unlikelyマクロ

http://kratcode.wordpress.com/2006/02/09/likelyunlikely-gcc-extensions/GCCの__builtin_expect拡張のラッパーマクロ。分岐の起きやすさを記述してやることによって効率的なコードを生成する。Linuxカーネルのコードを読んでると良く出てくるこのマクロ。…

コンテナ実装

std::vectorとstd::vectorどっちがいいんだろう。 * std::vector std::vector 派生クラスの扱い × ○ 要素追加 ×(普通に書くと一時オブジェクト発生) △(小さいnew) 読み込み速度 ○*1 ×(ポインタ参照一回余計に発生) ソート × ◎ デストラクタ 記述なしで大丈…

Eclipse安定化

ぐぐってみてわかったこと QtとCode Completion(Code Assist?)は相性が悪い。 Qtの複雑なマクロにIndexerがついていけないらしい 作業メモリを多めにとってやったほうが良い オプション:-vmargs -vmargs –Xms128M –Xmx1Gとしてみた

久しぶりのQt

久しぶりのQt。といっても今まで触ってたのはQtopiaだが。いろいろQt4になって変更があるみたい。

Qt/Windows opensource + MingW + Eclipse/CDT環境構築メモ

長いので分割。試行錯誤しながらで所要時間1時間半。 下の手順だとアウト。ハメラレタ。MSYSとMinGW同じディレクトリにインストールするとダメなんて知らないよ。 やり直さねば。 修正しました。動くようにはなった。でもMSYSとMinGWを同じディレクトリにイ…

早いThread Local Storage

をMSVCでも使えないだろうか。GCC拡張でスレッドローカルにしてやると一般的なアーキテクチャ(x86とか)ではAPIコールなしで爆速で動くらしいとBinary Hacksで読んだ気がする。吐いたアセンブリまだ見てないので本当かどうかは自身ないが。

DebugビルドとReleaseビルド

でEIHDRIの近似結果が異なる。リリースビルドでもデバッガを介す場合と介さない場合で結果が異なる。未初期化メモリや範囲外アクセスが原因として考えられるけど果たしてどこだろうか。

Just In Timeコンパイル用ライブラリ

libjit GNU lightning 両方ともSIMDサポートは無し。ただ最適化機構がなかったり非常にシンプルな構成なので自分で拡張するのも楽かな。Binary HacksよりBinary Hacks ―ハッカー秘伝のテクニック100選作者: 高林哲,鵜飼文敏,佐藤祐介,浜地慎一郎,首藤一幸出…

OmniCppComplete

やっと動いた。原因はC++ではなくC言語用のパースが行われていた為。やったこと: tar.gz展開してvimのruntimeフォルダに上書き。(これは違う気がする)runtime\ftplugin\cpp.vimで call omni#cpp#complete#Init() " Behaves just like C " runtime! ftplug…

VIM Intellisense

Intellisense for VIM http://sourceforge.net/projects/insenvimを試してみるも、うまくいかず。Vim7でOmni completeを使おうとするも、OmniCppCompleteが大量のエラーを吐く。(ctagsパースエラー?)うーむ、どうしたものか。

エディタを変えよう

Visual Studio標準のエディタだとやはり不便。EmacsキーバインドをXKeyMacsで設定して使っているけど、細かいコマンド類のサポートがないのはきつい。とはいえ、Emacsも最低限のキーバインド+αぐらいしか知らないので、慣れれば早いVimも検討してみる。とり…

FXGUISignal

バグ情報はみつからず。ソース読んでます。unstableの1.7だとFXMessageHandlerっていう新しい仕組みに変わったみたい。 移行するべきかも。追記: はいはいメモリリークメモリリーク。newしたまま開放してなかった。他のGUIWidgetクラスみたいに自己消滅する…

LLVMはSIMD対応していた

http://lucille.atso-net.jp/blog/?p=256LLVMがSIMDに対応していないというのは完全に誤解だったみたいです。すみません。

GPGPUにも対応したSIMDなJITコンパイラ

があったら便利そう。nytrがひと段落したら作るかも。

goto文

いや、Evilなのはわかっているんですけど多重ループを抜け出すのに使う(一昨日のエントリ参照)とかあるじゃないですか。そのときスコープの外にgotoするとそのスコープのローカル変数とかはどうなるんでしょう。ちゃんとデストラクタとか呼ばれるのかな。

unused variable warnings

仮想関数とかで引数は決まっているけれども関数本体では必要ない、という場合がある。そういうときは引数に名前をつけなければ警告なしになるということを最近知った。nytrの古いコードだとvoidにキャストして逃れてたりするけど、見つけ次第直してる。 bool…

Visual Studio 2005のタスク管理機能

こんなのが存在したのね。でも相変わらず日記をTODO&ChangeLog代わりにしそう。表示→その他のウインドウ→タスク一覧。

LLVM

http://lucille.atso-net.jp/blog/?p=251仮想命令セットを追加する、というのは盲点でした。なんで気づかなかったんだろう。でもJITコンパイル時まで対応させるのは相当骨が折れそうだ。

補足:Rubyでの多段break(多重ループの抜け方)

http://www.ruby-lang.org/ja/man/?cmd=view;name=trap%3A%3A%A5%B9%A5%B3%A1%BC%A5%D7%A1%A2%C0%A9%B8%E6%B9%BD%C2%A4なるほど。throwしちゃうのか。C++でやるとやばげ。

C/C++での多段break

するにはやっぱりgoto文しかないのね。http://www.kmonos.net/alang/d/ctod.html#labelledbreakとか読んでるとD言語やりたくなるなぁ。C++の不満点はほとんど解消されてるみたいだし。でもネイティブ言語なのに(まともに使える)コンパイラが本家のみってい…