言語の進化

よく勘違いされるが、進化と進歩はまったく違う。進化によって、必ずしも環境に適応していくとは限らない。


たとえば、ラマルクが唱えた用不用説を考えてみよう。「よく使う器官が世代を重ねるごとに発達し、反対に使用しなくなった器官は次第に退化する」という例のやつだ。キリンの首が長くなった理由をこの用不用説で考えるとうまく説明がつくのだが、この進化論は獲得形質の遺伝に基礎をおくものであって、その後の遺伝学の発達によって獲得形質の遺伝は完全に否定されている。*1


生物がなぜこのような遺伝システムになっているのか?それは、環境に適応していくような進化の仕方は、危ういというのはあると思う。高いところの食べ物をとるために集団のすべての個体が首を長く進化したとしたら、ある日環境の変化によって高いところの食べ物が無くなったときに、その集団の個体すべてが死滅してしまう。つまり、進化においては集団の変化に対するrobustness(強健さ)がある程度保たれていなければならない。決して、環境に対する局所解に収束することが進化の役割ではないのだ。


プログラミング言語にしてもそうだと思う。一から言語を設計するなら、「もう、いまどき必要ないよね」って発想で使わなくなった機能を切り捨てれば、ある程度エレガントな言語が出来る。JavaとかC#とかがそうだ。それは確かに進歩はしているのだけど、それは上に書いた意味での“進化”ではないと思う。状況が少し変わっただけでJavaC#が何の役にも立たないことはいまだにあるからだ。


C++の設計と進化』C++の設計と進化

上記の本文とはあまり関係ないが、久々の良書なのでついでに紹介しておく。
(岩谷さんの翻訳文章はかなり不評だけど、この本は、まだ許せる範疇だと思う。)

*1:このへんどうしてもドグマティックにならざるを得ないので、これ以上突っ込んだ話はしないことにする。