僕のノート、見てってください

エンジニアリングや英語、趣味について徒然なるままに

なぜコンピュータ言語は1つの言語へと集約されないのか?

最近、とある人から「なぜコンピュータ言語は1つの言語へと集約・淘汰されないか?なぜたくさん存在するのか?」を考えさせられる場面がありました。それについて、せっかく考えたのでメモとして残しておきます。

結論、以下のメリットよりもデメリット / 課題が優っているので、集約する方向にはなっておらず、
きっと、これからも各言語が学び合い、進化することや、よほど不人気な言語が廃れることはあっても、
集約されることはないと、個人的には考えます。

集約のメリット

  • エンジニアの流動性やシステムの保守性の向上。
  • その言語自体の議論が活発化することで、共有知の蓄積が進み、また、洗練されたものへと変化する可能性が高まる。

集約のデメリット / 課題

言語毎の得意/不得意

  • 言語によって特性が異なるため、現状、必要な要件(TPO)に合わせて、適切なものを用いることで最適化が図れている。
  • たとえば、エンジニアが記述するコード量を少なくすることをテーマにした言語はコーディングが容易である反面、1を聞いて10を知ってもらうような内部処理がなされやすいため、最終的に機械語となった際のコード量が肥大化しやすく処理速度が劣化しやすい。その逆も然りで一長一短。

美学/思想

  • 言語には、その処理に関する考え方について、大きな枠組みがあり、それぞれなりに一長一短があるため。
  • 有名なところでオブジェクト指向という概念のもとでは、人間が物体を認識する際に感知する、構成要素(パーツ)や状態・動作単位をコードにあてはめることで直感的な構造ルールを担保しているが、同じ命令を出してもその物体の状態によって実行結果が異なるという処理上のリスクを残している。 他方、関数型プログラミングという概念のもとでは、ある処理にAという値を与えたら、常にBという結果が返され、その過程で副作用としてCやDといった要素が変化することを許さない、という数学的な世界で堅牢かつ、再利用性の高い処理を書くことを目的としている。(個人的な解釈)

費用対効果が悪い/現実問題

  • 古い言語で書かれたコードを新たな言語に書き直す作業は、動作検証も含めると当初の工数と同等かそれ以上のものとなる。稼働中のシステムに対しては不具合が生じた場合のビジネスリスクが大きすぎて普通はこの作業は認められない。
  • エンジニアの確保についても複数言語に精通している人材を集めることは多少難度が高まり、費用も相当にかかる。

競争鈍化による進化の低速化

  • 現状、複数言語がしのぎを削ることで、より優れたものが生まれやすい環境ができているものの、言語が一本化された日には、現状よりも進化の速度は遅くなると思われる。そもそも、その状況を許さない開発者が、すぐにも新たな言語を生もうとするだろう。

言語による囲い込み(おまけ)

  • 例えば、iOS開発用言語のSwiftは、それ自体が優れているかもしれないものの、Appleは独自の言語を提供することで、開発者(信者)の囲い込みをより強めることに成功しているかもしれない。