本当は怖いHPC

HPC屋の趣味&実益ブログ

(Joel on Softwareより) ハンガリアン記法の本当の意味

Making Wrong Code Look Wrong
(日本語訳:「間違ったコードは間違って見えるようにする」
より。世間に出回っている「ハンガリアン記法」は本来のものではない、という話。
忘れちゃったけど、どこかでどなたかが書かれていたのでパクリネタ。

へぇ、そうだったったんだ。

ハンガリアン記法Microsoftプログラマ、チャールズ・シモニイにより考案された。シモニイがMicrosoftで手がけた大きなプロジェクトの1つにWordがある。実際彼はXerox PARCで、Bravoと呼ばれる世界最初のWYSIWYGワードプロセッサを構築するプロジェクトの指揮をしていたのだ。

WYSIWYGワープロにはスクロールする画面があり、すべての座標はウィンドウに対する相対座標なのかページに対する相対座標なのか解釈する必要があり、どちらであるかによって話は大きく違うので、取り違えないようにすることが重要だ。


(……中略……)


シモニイのハンガリアン記法のオリジナルのアイデアは、Microsoft内部ではアプリケーションハンガリアンと呼ばれ、それはアプリケーション部門で、すなわちWordとExcelで使われていたためだ。Excelソースコードにはrwとcolというのがたくさん出てくるが、これは行(row)とカラム(column)を表している。どちらも整数だが、これらの一方を他方に代入するのは意味がない。


(……中略……)


しかしその後まずいことが起きた。

ハンガリアン記法の暗黒面が支配権を得たのだ。

それがなぜなのか、どういう経緯でそうなったのか誰も知らないのだが、どうやらWindowsチームのドキュメントライターたちが、不用意にシステムハンガリアンとして知られるようになるものを作り出したということらしい。

誰かが、どこかでシモニイの論文を読み、「タイプ」という言葉が使われていたため、それがクラスのような、タイプシステムや、コンパイラのタイプチェックというときのタイプ(型)を意味するのだと考えた。これはシモニイの意図していたことではない。シモニイは「タイプ」が正確に何を意味するのか注意深く説明しているが、それも救いにはならなかった。ダメージは為されてしまった。

なるほど。オリジナルの「ハンガリアン記法」は、(「変数の型」ではなく)「変数の意味」をプレフィックスとしてつける、というものだったんですね。それを、ドキュメンティングチームが何かの拍子に間違った解釈を与えてしまった、と。

世の中(一部で)関数型言語がはやってますが、変数の「型」ではなくて、変数の「意味」について自動推論やコンパイル時チェックをしてくれるほうがいいのかも知れません。「水平座標」と「垂直座標」みたいな。そして、それぞれが「交換可能である」や「乗算は無意味である」といったような属性を定義していくことができるような言語があったら便利かもしれません。

オレオレLispに組み込んでみようかと思いました。

【広告】