2008-01-01から1年間の記事一覧

DirectInput8対応

久々にDirectX SDKを更新したところ、dinput.libがなくなっていたのでDirectInput8に対応しました。 差分 CygwinとMinGWはlibdinput8.aだけあってヘッダがないので、SDL用の古いバージョンのままです。 Jamfileでは、gccだけDIRECTINPUT_VERSION=0x0500を定…

Boost 1.38 devel対応

ようやく遅い夏休みです。 昨日は一日中ぼーとしてましたが、今日は少しコーディングできました。 サボってる間にBoost 1.37も出てしまったので、SVN trunkの1.38系に対応しました。 差分 cs-win32.html というか、Boost.Date_Time内のインクルードが足りて…

tar_replace_test

フォーラムで質問があったtarファイルの部分書き換えのテストを追加しました。 libs/archivers/test/tar_replace_test.cpp lzh_replace_test.cppを書き換えただけなので、実質作業時間は2〜3分程度です。 なかなか作業時間がとれない、、、。

回線速度

USENのヤツで調べて52.263Mbps。これ、下りでしょうね。 実家より少し遅いけど、まぁこんなもんでしょう。

Compiler Status 更新

ネットが復活したところで、Win32だけRegression Testsを走らせてみました。 http://hamigaki.sourceforge.jp/status/ BoostのSVN trunkは既に1.37に移行していて、 一部コンパイルが通らなくなっていたのでついでに修正しました。 <boost/strong_typedef.hpp>を<boost/serialization/strong_typedef.hpp>に変更 gcc 3.4.5でL"\u</boost/serialization/strong_typedef.hpp></boost/strong_typedef.hpp>…

光開通

やっとつながったー! 時間がないので速度のチェックはまた後で。

Boost 1.36.0対応

光開通は来週末になりそうですが、 ここ1週間ほどはD4の通信が安定しているので、Boost 1.36.0対応差分をコミットしました。 差分 Boost.Filesystemで関数名が変更された箇所の対応が主なので、 http://svn.boost.org/trac/boost/wiki/ReleasePractices/Hot…

光開通延期

えー、今日回線引き込み工事があったんですが、繋がりませんでした。 途中のインフラの設定ミスっぽいです。 Bフレッツ申し込んだのにいつのまにかフレッツ光ネクストになってたり、 OCN側とNTT側の申し込みが重複していたりで、 嫌な予感はしていたんですが…

光もうすぐ開通

月末にマンションの工事が決まり、光開通予定になりました。 ネットから離れている間にBoost1.36がリリースされちゃってますし、 1.36対応辺りから開発再開しようかなと思っています。 BoostはMLも止めていたので、全く知らないうちのリリースでした。 現在…

マックでCygwinインストール

D4

えー、紛らわしいタイトルですが、ファーストフードの方のマックです。 PHSでの通信が遅すぎなので、近所のマックに行ってホットスポット借りてCygwinをインストールしてきました。 電池が1時間しか持たない上に、本体の無線LANオフになっていることに気付…

とりあえずネット復帰

光ファイバーがなかなか開通しないので、WILLCOM D4を買ってしまいました。 まぁ、これまでも近所のネットカフェからメールチェックとWebの巡回はしていたわけですが、、、。さすがに通信速度は遅く、WindowsUpdateで6時間ぐらいかかりました。 ちと作業は…

お休み

再び東京に戻ることになりました。 明日荷物を送ってしまうのでしばらく作業できません。 こっちにいる間はネットを使えますが、引越し先で使えるようになるまで少し時間がかかるので、しばらくネットなし生活になりそうです。 まぁ、携帯から更新できなくも…

optional_iteratorの除去

逆アセンブルリストを比較しているとインライン化の妨げになっているようだったので、optional_iteratorを使わないようにしました。 差分 COWベースのstring_list(注:名前はlistだけど実体はvector)で、リストが空でvectorが作成されていない状態のbegin()/e…

BOOST_SPIRIT_USE_LIST_FOR_TREES

マクロBOOST_SPIRIT_USE_LIST_FOR_TREESを定義した場合にコンパイルできない問題だけ修正しました。 差分 通常、Boost.Spiritの構文木は、 template<class T> struct tree_node { typedef std::vector<tree_node<T> > children_t; T value; children_t children; }; のような構造体</tree_node<t></class>…

続々 ドキュメントのビルド方法

FOPの説明を追加しました。 http://hamigaki.sourceforge.jp/doc/html/installation/documents.html ついでにindex.htmlにWeb上の「ドキュメントのビルド方法」へリンクを張っておきました。 これでビルド方法を調べるためにビルドしなければいけない問題も…

続 ドキュメントのビルド方法

ツールセットのオプションについての説明を追加しました。 http://hamigaki.sourceforge.jp/doc/html/installation/documents.html あとFOPの説明が抜けてます。

ドキュメントのビルド方法

ドキュメントのビルド方法について、必要最低限のことだけドキュメントに追加しました。 http://hamigaki.sourceforge.jp/doc/html/installation/documents.html あー、これを読むためにはドキュメントのビルドが必要でした、、、。 TODO: 設定の詳細追加 re…

パースエラー

今日は全然縮まなかったので、以前デバッグ中に見つけたクラッシュするパターンを調査しました。 原因はデバッガで覗くとすぐに判明。include文で読み込んだjamファイルのパースが成功したかどうかチェックしていないだけでした。 とりあえず適当な例外を投…

Re: bjam高速化 その5

string_listの要素アクセスで、 const std::string& string_list::operator[](size_type n) const { if (n < size()) return (*pimpl_)[n]; else return dummy; } みたいなことをしていると勘違いして、ループ内部でアクセスする場合にサイズチェックが無駄…

bjam高速化 その8

今日も測定に時間がかかってあまり進んでません。 ローカル変数は「値の設定時に古い値を取っておいて、後で元に戻す」ことで実装しているのですが、元に戻す際にmapを探索するのが無駄なのでポインタを覚えて置くようにしました。 差分 実行時間はこうなり…

bjam高速化 その7

TICKを仕込む範囲を狭めていって、コードを調べていたところ、変数の展開処理に明らかな無駄があったので修正しました。 差分 jam言語の変数展開では修飾子によって変数の値を加工できるため、変数展開の度に文字列リストを生成していたのですが、 X = $(HOG…

bjam高速化 その6

Hamigaki.Bjamでは組み込みルールを自分で追加できるので、これを使ってjamファイルの計測をしてみました。 namespace bjam = hamigaki::bjam2; bjam::string_list tick(bjam::context& ctx) { std::cout << ::GetTickCount() << std::endl; return bjam::st…

bjam高速化 その5

今日は単純なループの手抜きを直しました。 差分 for (std::size_t i = 0; i < vec.size(); ++i) ... を for (std::size_t i = 0, size = vec.size(); i < size; ++i) ... に変えただけです。 「STLアルゴリズムを使え!」という感じですが、途中で抜ける条…

bjam高速化 その4

文字列キャッシュを作ろうと思ったんですけど、bjamのソースを見るとBoost.Flyweight同様に一旦文字列をコピーしているようで、あまり効果がないかもしれず取りやめました。 結局、今日はほんの少ししか改善できませんでした。 差分 う〜ん、後は片っ端から…

Boost SVN r45117 対応

Boost.Flyweightビルド時にコンパイルが通らず、久々にsvn updateしたらexec.jamが動かなくなっていたので直しておきました。 差分 importを追加しただけです。 ルールを別モジュールにIMPORTした場合、そのルールはIMPORT先のモジュール内で動作するため、…

bjam高速化 その3

文字列をキャッシュしてどれくらい速くなるかのテストとして、文字列リスト(hamigaki::bjam2::string_list)の要素をBoost.Flyweightに差し替えてみました。(参考: wikipedia:Flyweight パターン) まだSVN trunkにコミットされていない キャッシュは静的変数…

bjam高速化 その2

今日もいくつか変更を加えたんですが、実行時間は誤差程度しか変化ありませんでした。 プロファイリングの上位にある関数に手を加えてもあまり変わらないということは、ボトルネックの部分がインライン化されて多くの関数に分散しているということかもしれま…

timeもどき

なんかCygwin bashのtimeコマンドがまともな結果を返さないので、自分で作りました。 エラーチェックがテキトーとか、分の表示が0固定とか、やっつけコードですが、貼っときます。 #include <stdio.h> #include <stdlib.h> #include <windows.h> FILETIME diff_time(const FILETIME* lhs, c</windows.h></stdlib.h></stdio.h>…

bjam高速化 その1

Windows版もSolaris版の速度に近づいてきたので、今日はSolarisでのプロファイリング結果を参考にしながら高速化していました。 skip_parserをruleを使わない独自実装に置き換えた expand_variable()で直積を作る必要がない場合に関数を中断するように変更 t…

_SECURE_SCL

VC++用のまともなプロファイラが手元にないので、結果に影響ない範囲で同じ関数を二度呼ぶ手法で所要時間の概算を調査しています。 例えばnew/deleteの時間を測るには、 #include <new> #include <cstdlib> void* operator new(std::size_t size) throw(std::bad_alloc) { </cstdlib></new>…