2007-01-09

最近みた TechTalks: Debugging Backwards in Time

巻き戻しのできる Java 用デバッガ "Ominiscient Debugger" の話. ほとんどずっとこのデバッガをデモしている. 講演者の大袈裟な喋りとあいまって見応えあり.

デモが全てなので, 細かい話はいいですね (英語の勉強になってねー).

時を駆けるコード

さて, "巻き戻しのできるデバッガ" の夢想は彼だけのものではないらしい. Mozilla hacker である Robert O'Callahan の日記でも似たような話があり, いくつかの実装や研究が紹介されていた. "Here's a deeper and less widely understood truth: all debuggers suck." と ぼやく O'Callahan. 最近までは彼自身も Amber というプロジェクトでその手の研究をしていたという. 今は彼の Novell 退職とセットで中断している様子. 悲しい. どんな仕組みなのかと公開されているを資料を読んでみた. 詳しい話はわからなかったけれど, 既に Firefox をデバッグできるらしい. 大したものだ. 実行速度は 1/300, ウェブぺージを一つ表示するだけで 3GB 以上のログができるとある. まさに富豪的. O'Callahan おそるべし. 実装の詳細はさておき, Valgrind の instrumentation と DWARF2 を 組合せて使うアイデアには他の(もう少し野心的でない)使い道はありそうに見える.

Edit (, Step back a little) and Continue

この "戻れるデバッガ" の話を友達にしたら, "それ VisualStudio 2005 でできるよ" という. "みんなふつうに使ってるよ. Edit and Continue ってやつ." ほんとに?

私の記憶によれば, Edit and Continue とは デバッグ中にコードを書き換えたあとプログラムの再起動なしに変更を反映する機能だった. but wait, there's more なのが最近の VisualStudio. 続行だけでなくちょっと戻ることもできるらしい.

さっそく試してみよう. VisualC# Express を拾ってきてインストール. 適当にコードを書いてデバッグ実行する. ブレークポイントで動作を止めたら, 赤丸のそばの矢印をぐっと上にひっぱる. と, 戻る. ほんとだ. すごい...

とはいえこのタイムマシンも万能ではない. 戻れるのは同じメソッド内までのようだ. だからクラッシュの原因を二分探索で絞っていくような使い方はできない. 熟達した C# プログラマはデバッグ中よりも開発中にこれを活用するという. メソッドの雛形を書いたらそこにブレークポイントを貼り, そのあとはインテリセンスを頼りながら <動かす, 止める, 戻す, 直す> の繰り返しで インクリメンタルにコードを書くんだとか.

探索的プログラミング

友達の話す C# プログラマは, かつて私の空想した Smalltalker の姿にだぶる. 生きたオブジェクトをつつきながら対話的にプログラムを作っていく.

Smalltalk のように環境の中でプログラムを作っていく近未来なありさまを, 一般に exploratory programming という. Self や Smalltalk ような伝統的オブジェクト指向環境の話題で見かける言葉だ. このパラダイムに憧れのある私は, Eclipse の強力な入力補完でなんとなくその気分になっていた. でも Smalltalk から Java に転向したあるプログラマは, Eclipse への不満として "I dearly miss the image and the fact that a Smalltalk system is just always “there”, alive and waiting for your next command" と 書いている. やはり何か足りないらしい. C# と VisualStudio ならこの喪失感を補うことができるのだろうか. そういえば rails の console も割と動的に色々できたっけ. コンソールだといまいち未来っぽさはないけど, 生きているアプリを inspect できるのはいいね.

こうして見ると, ソフトウェアの技術は確実に進歩しているなあ. どれもあと一歩だ. もうしばらく (10 年くらい) 待てば, 時を超えてオブジェクトと共に生きる世界はやってくる. なんとなく希望に満ちた気持ちになり, もうしばらく (10 年くらい) はプログラマをやろうと思ったのでした.

10 年後も C++ だったらどうしよ...