海外Q&Aサイトの「ソースコードのコメントで今までに見た最高傑作は?」という質問から、回答をご紹介。


5a35cba0e55d2c1651341711b3bf569e_s

■回答者
デジペン工科大学(※ワシントン州レドモンドにある、ゲーム制作に特化した学校)で適当な学生が書いたゲームのソースコードに目を通していたら、突然こんなのが出てきた:

/* このコメントを削除しないこと */

当然、このコメントを削除したらどうなるのか見てみなければならない。削除して、再コンパイルしようとした。動かなかった。コメントを戻すと、魔法のようにコンパイルされた。

エラーはLNK1000で、リンカのエラードキュメントにはまんま「原因不明のエラーです。テクニカル サポート オプションのドキュメントを参照してください。」と書かれていた。

なぜあのコメントが必要だったのかは永久に謎だろう。


↑コメント1
これは僕も見たことがある。妙なものが出力されるのでデバッグ用の行をコードに入れてprintするようにすると、不思議なことにそのデバッグ用のコードの1つが問題を直してしまうんだ。癪に障るよな!


↑コメント2
printの呼び出しはI/Oシステムのロックを取得することが多くて、これがある種の競合状態のバグをフィックスしたように見えることがある。

これはつまり、print行を入れることでバグが「フィックス」した場合は、(「フィックス」した後でも)隠れた競合状態がないかもっとよく調べる必要があるということだ。


↑コメント3
でもコメント(の有無)がLNKエラーを引き起こすか?


↑コメント2
上のコメントは「printするデバッグ行」についてのレスとして書いた。

コメントでリンクエラーが直る場合、私ならコンパイラかリンカのバグを疑う。


↑コメント4
分かるわ。VB 5でプログラミングしてて、いつもこういう問題に当たった。


↑コメント5
VBなら、UnicodeとANSIでのスペースの扱いの違いが原因だと思う。例示はできないけど。
他に考えられる原因としてはvbcrlfとcrlfだ。


↑コメント6
これにはハイゼンバグという名前もついている。

参考:
「ハイゼンバグは、それを調査しようとすると変貌したり消えたりするバグである。」
「この名前は不確定性原理を提唱したハイゼンベルクのもじり。ここでの不確定性原理とは量子力学用語で「観測すること自体が対象に影響を与えるため正確な観測ができないこと」を指す」
特異なバグ - Wikipedia


↑コメント7
これはめっちゃ何度もある! 僕はJavaScriptでプログラミングしてるんだけど、console.log();を入れると直るみたいだ!


↑コメント8
この種の問題は見たことがある。いつもコンパイラのバグで、コメントが終わりのところでシンボルの再同期を起こしているんだ。

これはCPUに起こるともっと悪いことになる。NOOP命令を入れると直る ― 最終的に分かったのは、整数演算と浮動小数点演算の間の同期のタイミングでエラーが起こっているということだった。正しい位置にNOOPを入れると遅延が生じてこのバグは発生しなくなる。


↑コメント9
修士号の勉強をしていた時に似たことが起こったことがある。グラフの置換を解析するC++のコードを書いていたら、なぜか動かなくなった。僕も指導教師も何が悪いか分からなくて、でも僕は論文に使う結果が必要だった。

ある時、プログラムの先頭近くにあるコメントを幾つか削除したら、完璧に動くようになった。


↑コメント10
2人でも見落とすようなタイポがあったっぽいな。そういうことはある。


↑コメント11
コメントの中のタイポでプログラムが動かなくなるか?


↑コメント12
例えば、シンタックスハイライトがない場合に見落としがちなものとして、コメントの文字シーケンス(*/等)がある。人間の目はこの種のエラーを見つけるのに余り向いていないし(特に意識して探すのでなければ)、何度見直したか分からないコードに目を通している時なんかは特にそうだ。

他に考えられる原因としては、コンパイラが文の終わり(EOS)の文字(;等)を期待しているところで、コメントをうまい具合にEOSと解釈してしまうことだ。あるいはコンパイラは、行末と空白文字を無視してコメントを含む複数行を結合してしまうことがある。こういうのはバグか設計の問題だ。

それから、どこかでも指摘されているが、目に見えない文字やバックプリントされた文字、あるいは通常の範囲を超えた文字というのも、コンパイラにとっては頭痛の種になることがある。



翻訳元:Quora



真相は闇の中。



関連記事:
外国人「暇な学生だけどゲームばっかやっててダメだと思うのでプログラミングの勉強をしたい」
外国人「日本はなぜディープラーニングに投資しないの?」




デバッグの理論と実践 ―なぜプログラムはうまく動かないのか



スポンサーリンク