2010-07-27

近況

iPad も iPhone4 も新 mac mini も買わない私の信仰心に疑念の目を向ける心無い言葉を何度か耳にした. i5 が載ったら買うっていってるじゃん, といっても聞きやしない. ここは宣教プログラマとして信徒の鏡たれねば. 決意の末に LLDB のスライドを作り 説教に望んだ. I visited the mothership!

LLDB 所感

宣教の一環としてこの日記でもコードをウォークスルーしようと 1/3 くらい書いたんだけれど, 途中でやる気がなくなってしまった.

デバッガの面白さを大きく二手にわけると, 一つは他所のプロセスに横槍を入れる OS 密着部分のスリルがある. もう一つはプログラミングツールとしての強力さや柔軟性に挑むデザインへの興味. LLDB は, スリルの部分を "プラグイン" と呼ばれる サブクラスとしてうまく切り出している一方, デザインの部分はなんというか, 普通だった. だからスリルなプラグインをまとめて楽しんだあとは大して面白いところが残らない. スリルの部分にしても, 興味深いのは OS の機能だったりする. デザインも, 野心的な機能がないせいかあまり面白くない. 昔読んだ デバッガの理論と実装 (なぜか絶版. 捨てちゃったよ...) を超える発見はなかった気がする.

とはいえ見所はある. 個人的には Clang を使った式の評価が現段階でのハイライトだと思う. Clang 経由で LLVM からネイティブコードを出力し, それをターゲットプロセスに書きこんで呼び出すパス. DWARF Expression にコンパイルしてホスト側のインタプリタで実行するパス. 実行の主体がターゲットとホストにまたがるデバッガらしさを象徴している.

けれど残念なことに, これもちゃんと動いていない. たとえばローカル変数を評価してプリントするとエラーになるし, ターゲット側の関数を呼び出してもエラーになる. 構造体のプリントもなぜかエラー. 色々動いていないし, しょっちゅうクラッシュする. こんなに動かないと, ホスト/ターゲットハイブリッドの式評価というアイデアが ほんとに上手くいくのかいまいち信じることができない. デザインじゃなくて実装の問題だと言うかもしれないけれど, 外野には動いていないデザインの善し悪しなんてわからないでしょう.

もっとも 1-2 年前はぜんぜん動いてなかった Clang が 最近は色々ビルドできるようになっているらしいので, LLDB も 1 年後にはちゃんと動いてるのかもしれない... というか XCode4 に載せる以上, ちゃんと動くなるようにすると思う. そういえばコードのコメントに 2008 年頃の日付があった. 2 年くらいは歴史がある様子.

個人的には 21 世紀なのに単体テストがないとか(非公開なところにあるんだろうけどね) C++ のコードが生理的に受け付けないスタイルで書かれているといった理由から 熱心に追いかける気はない. でも小さいぶんデバッガの仕組みを眺めるには向いているし, 日曜に祈りのパッチを捧げても良いと思う. 信仰の形は人それぞれなのです.