昔の癖
- 2008/03/13 16:42
- カテゴリー:ぱそこん
最近、私の作ったプログラムやマクロ、PLC回路やエクセルシートなんかの改造とかメンテナンスがあり、若い人達から質問が良く来ます。
その半分以上が、昔の癖の所だったりします。
その昔CPUが8Bitでクロックが1MHzとかの頃、メモリーも大容量3KByteとか、外部記憶装置がテープしか無いとかそんな時代だったんです。(私より以前の方はもっとすごかったんですが)
1バイトでも小さく、1クロックでも早くってのが当たり前でした、今のように1クロックで演算を終了出来る命令ってNOP(何もしない命令)位でしたからね。(実際には1クロックでは終わらないんですが)
ループなんかして計算すると、その1クロックってずいぶん結果が出るまでの時間に違いがありました。
最近は気をつけているんで、こんな書き方はしないんですが、昔のソースなんか見ると幾つか残ってたりします。
簡単な例ですが、変数bを2で割って変数aに格納する場合なんですが、通常なら
a = b / 2 ;
となるんですが、そこを
a = b >> 1 ;
って書くんです。
昔のCPUだと整数の割り算でもかなりのクロック数を費やします(8Bit時代には除算命令自体が無いものもあったんで、さらに演算時間は増えます)
それをシフト命令で高速化してしまおうってのが一般的でした。
これは簡単な例なんですが、こいうった高速化テクニックって様々なものがありました。
その殆どが、高速化と引き換えに、ソースの読みにくさに繋がっていったように思います。
例えば、40個の箱の12番目から数えて、bの変数の倍の場所からさらに6個後ろの箱の番号を求めなさい、といった計算をするとします。(普通はこんなことはしないですが、あくまで例です)
すると、書いてある通りだと
a = 12 + b * 2 + 6 ;
になるんですが
a = b << 1 + 18 ;
って書くんです、そうすると上の文章が無くなって、この計算式だけ見ると、18って何じゃ?ってことになります。
今は、コンパイラーが勝手にこういったことを暗黙的にやってくれたり、乗算や除算が早くなったりしていますので、判りやすく書けるようになりました。
なんだか、おじいちゃんが孫に「昔はな~」って言ってるみたいです。( -o-)=3