Cの最適化のはなし

ふと思い出した。
そーいえば、Cはポインタが絡むと最適化できないのだった。


ポインタを使うと、参照先のメモリの中身が変わっている可能性があるから、同じメモリを参照しているといってまとめることはできない。
ポインタを2つつかうと、それらが同じメモリを参照する可能性もある。
引数で渡されたポインタが複数あった場合、それぞれが違う場所を指している保証は無い。
メモリをコピーする関数を作っても、範囲が重なっていたら昇順コピー、降順コピーを意識しないといけなくなる。
これはCのポインタの特性だから、どうがんばってもどうにもならない。


いまだに局所的にFORTRANが生き残っていたりするのは、最適化に関してはFORTRANという言語の特性が強力に作用するからで、FORTRANコンパイラの最適化は恐ろしい効率を叩き出す。
同じように古いCOBOLもまだ生き残っていたりするが、こっちは最適化ではなく、小数点以下の10進数をまるめることなく扱えることと、原始的なデータ構造を扱うことに関しては非常に簡潔でわかりやすいからだ。
さらに古いLISPがいまだに普通に使われているのはまた別の話で、S式レベルでのプログラミングが究極的な柔軟性を提供しているからだ。


色んな言語があって、どれがいいとか、悪いとか、いろいろ言われているが、結局のところそれぞれ特性があるわけで、自分が使う言語がどういうものなのかをきちんと理解しておかないと、いいところも活かせないということだ。