鍋あり谷あり

テーマを決めずに適当に書いています。

flash player 8

flash player 8 を入れてみた。
折角なので、早速ベンチマークflash player 関連

  • 2922ミリ秒 : Firefox+Flash Player 8,0,15,0
  • 4157ミリ秒 : IE6+Flash Player 7,0,19,0
  • 4266ミリ秒 : Firefox+Flash Player 7,0,19,0
  • 5438ミリ秒 : IE6+Flash Player 6,0,79,0

びっくり。実行時間が3割減っている。
コンパイルしているのにインタープリタで動いているはずの各種ブラウザより遅いのはどうかと思うが、それはそれ。
速くなっているのは喜ばしい。

Boost::Wave の話かと

http://d.hatena.ne.jp/Nabetani/20050818/p1
http://d.hatena.ne.jp/Nabetani/20050823/p1
の続きで、
http://d.hatena.ne.jp/Nabetani/20050818/c#c1124649895
http://d.hatena.ne.jp/Nabetani/20050823/c#c1124987740
の返信。
コメントにアンカーがついているのは便利だね。

で。文体が変わって。

Boost.Preprocessor の話でしたか。Boost.Wave の話だと思ってました。
すいません。最初からそう書いてありますね。とほほ。

それと。

template だけで可変長引数を使用する template は作れる

というのは何でしょうか?
C++ の道具で C99 の可変長引数マクロを受ける方法は

ぐらいしか思いつきません。Boost.MPL で、っていうのはどういう手法なんでしょう??

で。(また文体が変わり)折角なので、Boost.Preprocessor で書いてみた。
ターゲットは、先日書いた、加重平均関数。
まずは Boost.Preprocessor。

#define ARG_GEN(z, n, text) BOOST_PP_COMMA_IF(n) double w##n, double v##n
#define SUM_GEN(z, n, text) BOOST_PP_IF(n,+,) w##n*v##n
#define WEI_GEN(z, n, text) BOOST_PP_IF(n,+,) w##n
#define TEMPLATE(z, n, _) \
double wave( BOOST_PP_REPEAT_ ## z( n, ARG_GEN, nil ) ){\
	double d = BOOST_PP_REPEAT_ ## z( n, WEI_GEN, nil );\
	return ( BOOST_PP_REPEAT_ ## z( n, SUM_GEN, nil ) ) / w;\
}

BOOST_PP_REPEAT_FROM_TO( 1,10, TEMPLATE, nil ) // この行に全部展開される
#undef ARG_GEN
#undef SUM_GEN
#undef WEI_GEN
#undef TEMPLATE

思ったより簡単だった。思ったより簡単だっただけで、見ての通りちっとも簡単ではない。
これを見て何をする関数なのか理解するのには相当時間がかかると思うが、どうだろう。慣れれば簡単なのか?
理解しにくかったり保守しにくかったりすることも重大な難点だが、デバッグしにくいのも困る。
ソースレベルデバッグを行うと、wave 関数内は全部「この行に全部展開される」とコメントしたところに入ってしまう。関数が長くなったらかなり悲惨な状況に陥る。

一方、ruby で書いたら

def gen(i,jo)
  (0..i).map{ |n| yield n }.join( jo )
end

puts (1..10).map{ |i| 
<<"FUNC"
double wave( #{gen(i, ', ' ){|n| "double w#{n}, double v#{n}"}} )
{
  double w = #{gen(i, '+'){|n| "w#{n}"}};
  return #{gen(i, '+'){|n| "w#{n}*v#{n}"}}/w;
}
FUNC
}.join("\n")

こんな感じ。もうちょっと簡単になるような気もするが、まあこんなところで。
比べるのも申し訳ないぐらい、理解しやすく保守しやすいように思うが、慣れの問題の可能性もゼロではない。
ruby がわからないとどうしようもないっていうのは難点だが、Boost.Preprocessor よりは知っていて得することが多いと思うので、勉強してくれと言いたい。
実行して作られたソースがデバッグの対象になるので、ソースレベルデバッグは楽ちん。

首藤君に聞いてみた

今日。街を歩いていたら民主党首藤信彦*1が演説していた。
周囲でなんか配っている手下に「民主党としては、政治改革財政改革と景気回復、どっちが大切?」と聞いたら、まったく要領を得ない。
で、手下が首藤君本人に聞いてみろとすすめるので、勧められるがままに演説を中断させて聞いてみた。
すると。景気回復が大事だという。福祉方面の支出を増やして雇用を増やすんだそうだ。
他の党の人にも聞いてみようと思う。

で。演説を中断させてしまい申し訳なかったし、きちんと答えてくれてとてもありがたかったが、握手を求められたのはちょっぴり閉口した。素直に握手に応じつつ、政治家ってのはこういう仕事なんだろうなと思った。

#みんな、地元の立候補者に、政策について質問して、こういうような場所に書くといいと思う。

*1:このページでは、政治家の敬称は「君」で統一しているつもり