Open3
プログラミング言語の変遷
プログラミング言語は時代によって主流となるものが変わっており、言語ごとに色々な考え方がある。しかし、その変遷の法則性として、「開発者の自由度を(適切に)減らす」というのがあると感じる。
例えば、メモリ管理でいうと以下のような変遷がある。
- C言語など: 何もしない
- Javaなど: GCによるランタイムでの管理
- Rustなど: 所有権などの考え方によるコンパイル時の管理 ※詳しい内容はよくわかっていない
「開発者の自由度」という意味でいうと、好きにメモリを操作できる時代から、メモリ管理を言語のプラットフォームに移譲した時代に変わり、自由度が減っている。ただそれによって、メモリリーク等のメモリ起因の問題が発生することを防ぎ、開発者の生産性に貢献している。
また、プログラミングパラダイムの観点からも以下のような変遷がある。
- 手続き型
- オブジェクト指向型(Smalltalk, Javaなど)
- 関数型(Haskell, Scalaなど)
プログラムを単なる手続き(procedure)の集合として考えた手続き型に対して、オブジェクト指向型は、状態やそれに付随する処理をオブジェクトとしてまとめ、隠蔽する事によって外からのアクセスに制限をつけた。また、関数型はオブジェクト指向型と異なり、プログラムを関数(ここで言う「関数」は数学的な定義をもとにしており、I/Oが1対1で紐づくなどの性質がある)の集合として考え、関数の定義や状態変数の保持について制約を設けた。
※プログラミングパラダイムにはいろんな考えがあり、特に関数型は厳密なものと、オブジェクト指向型とのハイブリッドなど様々なものがあるが、上記は厳密な関数型を意識している
※プログラミングパラダイムの説明については、自分も理解が浅いところがあるかも