言語パラダイム
プログラミングパラダイムとは、命令型ステートミューテーションから関数型、論理型、宣言型モデルに至るまで、計算の表現方法を組織化する基礎的なスタイルを指します。
Definition
プログラミングパラダイムとは、言語内で計算を組織化するための一貫した概念と構造化原則の集合であり、プログラムの基本的な単位(ステートメント、式、オブジェクト、関係)が何であるか、そしてそれらがどのように構成されるかを定義するものです。
Scope
この分野では、プログラミング言語の主要なパラダイムと、それらを支える計算モデルについて扱います。具体的には、可変状態とメッセージパッシングに基づいて構築される命令型プログラミングとオブジェクト指向プログラミング、式評価と高階関数に基づいて構築される関数型プログラミング、関係と探索に基づいて構築される論理プログラミングと制約プログラミング、そしてプログラムがプログラムを操作するメタプログラミングが含まれます。パラダイムが言語設計をどのように形成するか、それらが内包するトレードオフ、そして現代のマルチパラダイム言語がそれらをどのように組み合わせるかについて考察します。
Sub-topics
Core questions
- あるパラダイムと別のパラダイムを区別するものは何か、そしてこれらの区別は明確なものなのか、それとも重点の置き方の問題なのか?
- パラダイムはプログラムの正当性、モジュール性、推論にどのように影響するか?
- 命令型スタイルと宣言型スタイルは統合できるのか、そしてそれらを混在させることで何が得られ、何が失われるのか?
- 基盤となる計算モデル(フォン・ノイマン・マシン、ラムダ計算、分解)はパラダイムにどのように影響するか?
Key theories
- プログラムの代数としての関数型プログラミング
- バッカスは、関数型でコンビネータベースのプログラミングが、推論と変換のための等式法則の代数をプログラムに与えることで、フォン・ノイマン・ボトルネックから言語を解放すると主張しました。
- アルゴリズム = 論理 + 制御
- コワルスキーによる問題の論理的仕様とそれを解決するために使用される制御戦略の分離は、宣言型/論理パラダイムの基礎を築き、手続き型コードとの違いを明確にしました。
- マルチパラダイム・カーネル言語フレームワーク
- ヴァン・ロイとハリディは、パラダイムを小さなカーネル言語の漸進的な拡張として提示し、状態、並行性、遅延評価といった概念をどのように追加または削除することで各パラダイムを再現できるかを示しています。
Clinical relevance
パラダイムの選択はソフトウェア工学において実用的な影響を及ぼします。関数型および宣言型スタイルは、等式推論、テスト容易性、並列化を助け、一方、オブジェクト指向分解は大規模なモジュール性をサポートします。現代の言語はパラダイムをますます融合させているため、それらのトレードオフを理解することは、言語選択とイディオム的な設計に役立ちます。
History
命令型プログラミングは、ストアードプログラム方式のフォン・ノイマン・アーキテクチャと、FortranやAlgolのような初期の言語に由来します。Lisp(1958年)は、ラムダ計算に根ざした関数型の概念を導入しました。1970年代には、論理プログラミング(Prolog)と、構造化プログラミング、そしてオブジェクト指向プログラミング(Simula、Smalltalk)が台頭しました。バッカスによる1977年のチューリング賞受賞講演は、命令型スタイルに対する関数型の批判を明確にし、その後の数十年でますますマルチパラダイムな言語が生まれました。
Debates
- 主要な組織化原則としての命令型と宣言型
- 命令型コードの直接性とパフォーマンス制御と、宣言型および関数型スタイルの推論および構成可能性の利点との間で長年にわたる議論が続いていますが、ほとんどの現代言語は両方をサポートすることでこの問題を解決しています。
Key figures
- John Backus
- Robert Kowalski
- Peter Van Roy
- Harold Abelson
- Gerald Jay Sussman
Related topics
Seminal works
- backus1978
- kowalski1979
- vanroy2004
- abelson1996
Frequently asked questions
- オブジェクト指向プログラミングは命令型プログラミングとは別のパラダイムですか?
- オブジェクト指向プログラミングは通常、命令型パラダイムの上に階層化された構造化の規律として扱われます。それは可変状態をカプセル化された振る舞いを持つオブジェクトに組織化しますが、依然として状態変化と順序付けに依存しています。
- パラダイムは相互に排他的ですか?
- いいえ。多くの広く使用されている言語はマルチパラダイムであり、関数型、オブジェクト指向、命令型の機能を組み合わせており、プログラマはタスクごとに最も適切なスタイルを選択できます。