C++とアセンブラをやる意味

先日のエントリで、C++アセンブラを毎日やることに何かしらの意味があるんだろうといろいろ考えた。その結果、たぶん自分が普段考えているレイヤーの上位と下位で物事を考えるという訓練だという結論に達した。人間の思考回路はだいたいべたで書くようなCだと、一番考えやすいらしい。その上と下という意味で、上はC++であり、下がアセンブラなのだろう。

上位の代表格はC++である。C++アルゴリズムそのものを記述するのも得意である。その一方で、アルゴリズムを隠蔽することにより、もう少し大きな視点で物事を考えることができる。例えば線形サーチだったら、Cの場合どうしてもforでループを回さないと行けない。でも、C++の場合STLという標準化されたテンプレートでいろいろな実装方法があるので、単なるサーチだとしても、listテンプレートを使う場合だってあるだろうし、dequeテンプレートを使う事もできる。CとC++の両方の視点を持つと、どうしてもCの冗長さが欠点に思えてくる。業務アプリにおいて、Cが絶滅したのも、単純な処理をするためだけに長々と行数だけ消費してしまうという欠点が致命的になったためである。人間の集中力というのは、有限なリソースである。行数はなるべく少ないに越したことはない。行数が多いということはそれだけ集中力を要するということでもある。業務アプリでCが廃れたのは必然の流れだった。

一方、下位の代表格であるアセンブラはCの直下レイヤーである。Cが高級アセンブラという言い方もあるほど、アセンブラとCの共通点は多い。Cはコンパイラの作成者が楽をするために作られたという。記述レベルに関しては、ほとんど一対一で対応できる。一例を挙げると、i++とかj--はアセンブラのインクリメントの命令そのものである。