ビューティフルコード (THEORY/IN/PRACTICE)
- 作者: Brian Kernighan,Jon Bentley,まつもとゆきひろ,Andy Oram,Greg Wilson,久野禎子,久野靖
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/23
- メディア: 大型本
- 購入: 30人 クリック: 617回
- この商品を含むブログ (173件) を見る
ビューティフルコードを読む → 直後に自分のソースを見る → かつて無いほどの絶望感 → めげずにコードを組もうとする → 更なる絶望感 → ビューティフルコードを読む(逃避) → (以下、ループ)
どうやら、私のような貧相なダメグラマには刺激が強すぎたようです。こんなダメダメな私は穴掘って埋まっておきます。
冗談抜きで、本当にコードが書けなくなってしまいましたorz ゴールデンウィーク無視で働いてるのにまったく仕事が進んでない‥‥。
読み進めると自分への絶望感が拡がるだけだとわかっているのに! くやしい! でも読んじゃう!! むしろ早く読み終わらないと、スランプが長引くだけのような気がする。
以下、思ったことを垂れ流し。
まだ 1〜10章+まつもとさん関連(29章+対談)しか読んでない。
6章で話題に上がっていた Framework for Integrated Test (FIT) はちょっと見てから考えてみたいと思った。Java使わなくなって久しいので、実際に使うことは無いんだけど、思想的な意味で。
二分探索が4章、7章と話題に上がってたので、自分のコードで二分探索してたところを右シフトを使う形に書き直しといた。そんなデカイ配列扱わないけど、気持ちの問題。
- Research Blog: Extra, Extra - Read All About It: Nearly All Binary Searches and Mergesorts are Broken
- 404 Blog Not Found:(a+a)/2 == -a /* 半世紀もののバグ */
微妙に関係ないけど、C/C++ も論理シフトの演算子があってもいいのにと、たまに思う。ホントにたまにだけど。たまに思う場面は、最初から unsigned 使ってない事が最大のミスのような気はする。
8章コード生成。文中ではJITで解決しているんだけど、この手の switch での処理分岐が必要、且つ、速度も必要なとこは、C++でやってるといつも迷うんだよなぁ。関数ポインタにするのがベターだとは思ってるんだけど‥‥。関数の種類がどうしようもなく多いときは、マクロ乱用して、似たような関数をいっぱいつくったりとかするよ!
以下、美しいとは程遠いマクロの使い方。
#include <stdio.h> #include <stdlib.h> #define DEFFUNC_PRINT_STR(func_name, str, sub) \ void func_name() {\ printf("%s\n", str);\ sub\ } DEFFUNC_PRINT_STR(funcA, "funcA", ;) DEFFUNC_PRINT_STR(funcEnvPath, getenv("PATH"), do{funcA();funcA();}while(0);) int main() { funcA(); funcEnvPath(); return 0; }
実行時の出力。
funcA
/usr/local/bin:/usr/bin:/bin
funcA
funcA
C言語のマクロは強力すぎて不安になるよね! ‥‥私みたいなバカ野郎のせいですね。ごめんなさい。‥‥いつもこんな事してるわけじゃないんだからね! 本当に速度と手間に困ったときだけなんだからね! ‥‥こんな時、どうしたらいいのか、わからないの*1。
読み進めたら追記するかも?
*1:笑えばいいと思うよ