Posted at 2006/08/04 23:32
in Programming
謎現象のデバッグ時や、挙動のよくわからないソースをおいかけている時など、どういう順番で関数が呼ばれているのがを可視化(ログ化)できればなーと思うことがよくあるのですが、ちょっとした方法を思いついたので試してみようかな……とおもったら、gccなら
-finstrument-functionsというオプションでそういう仕組みが実装可能
らしいです。流石gcc。
VCでもBoundCheckerを使えば可能らしいですけど。……そんなもん個人で買えるかっ。
ちなみに上で書いた「ちょっとした方法」というのは、「.o(.obj)のFixUp情報を書き換えて、関数コールの前後で指定関数を呼ぶproxyコードを呼ぶようにしてから、リンクする」という激しく力業な方法。gccやBoundCheckerも多分似たようなことをしているのでしょうけど(勘)、libbfdが使える環境なら自前でも楽勝で書けそう?
Posted at 2006/08/04 23:32
in Programming
一部で話題の
長文コメント
のあたりで触れられてる「
Javaの理論と実践: パフォーマンスに関する都市伝説を再検証する
」の記事。以前ブックマークしたまますっかり忘れてたので、いい機会なので読んでみました。
字義通りに受け取りすぎてしまう人いるみたいですけど、結論から言えば、速いケースは十分あるでしょうね。
記事ではメモリアロケーション処理について論じていますが、「malloc()でヒープメモリ確保」と「(最適化された結果)レジスタやスタックに割付け」を比較すれば、後者のほうが速いのは当然です。こういった差を積み重ねられれば、Cなどでべた書きするよりも、JavaなどのVM系環境の方が速くなる……というのが、動的最適化による高速化の思想でしょうか。
もちろん、最適化ゲインが動的最適化のための統計・分析コストを上回る範囲内にあることが前提です。逆に言えば、全コスト内で占める動的処理コストの割合が、ソフトウェアの巨大化と計算機パワーの増大によって相対的に低下したことで可能になった高速化手法であるとも言えるでしょう(機能ではなく、高速化のための動的化ってのは今まで考えたことなかったな……)。
もちろん、目的に比べて過剰な動的処理を行えば、当然最適化ゲインを食いつぶすだけで高速化にはなりませんし、とりうる挙動が限定されるシチュエーションでは、一般的・汎用的シチュエーション向けにチューニングされた最適化よりも、そのシチュエーションに特化した手作業の静的なコードの方がより効率的に動作するでしょう(静的処理の最後の砦?)。
初期のJavaなどは後者の悪い部分が目立っていたわけですが、計算機パワーの増大と最適化手法の進歩の相乗効果で、最近では前者に転んできたといったところでしょうか。
一方、現在でも後者のシチュエーションを積極的に利用してるのが、いわゆる「組み込み系」ですね。シチュエーションを限定すれば、現在の半導体技術の成果でより小型に、より広範囲にコンピューティングを提供することができるという「
イノベーション
」の一典型です。
この分野でも、ICチップと無線の融合という形で次のイノベーションが登場しつつありますけど。
Posted at 2006/08/04 23:32
in Programming
higeponさんが
作られてた
ので、なんとなく
参加してみました
。16進ダンプと逆アセンブラをこよなく愛する(やや誇張)身としては、web2.0とかよりこちらの方が面白そうなので:)
でも週末まで身動きできなさげ(しくしく)。
Posted at 2006/08/04 23:32
in Programming
このへん
の話。やりかた思いついたので、VCでやってみました。ソースは
こちら
。VC6のコンソール環境で確認。
オリジナルとの違いは、define()の第4引数以降をまとめて括弧で囲む必要があること。これは、VC6は(あたりまえですが)C99対応しておらず可変長関数マクロが使えないので、第4引数以降を1つの引数として扱っているためです。これを関数本体の文字列にしているのが asprintf_like() ですが、別段言及するほど特別なことはしていません。
オリジナル同様、単なる力業ですねえ。
Posted at 2006/08/04 23:32
in Programming|WebDev
某#techでPerl話をしていたところ微妙にPerlが書きたくなったので、久しぶりにごそごそ書いてみました。右上にある「Recent bookmarks」がその成果。
やってることはというと、単に「はてなブックマーク」のatom feed拾ってきて、XML::Parserで抜き出して成形しているだけです。ソースはこちら。blosxom 2.0用です。
……そういえばblosxom3.0ってどうなったんだろう。
2005.9.25 追記:
負荷軽減のため、Atomそのままではなく、パースしてHTMLにしたものキャッシュするようにした。毎回XML::Parserしていたのが、Atom取得時だけになったので、大分軽くなったはず。