理論的なコンピューターサイエンスのバックグラウンドはありませんが、C ++の概念がどのような理論的なオブジェクトに対応するのかを理解したいと思います。基本的に、C ++の概念では、制約のリストを満たす型のセットを定義できます。それで、理論的な観点から、どのC ++の概念が対応する、またはおおまかに対応する(そしてその場合、違いは何である)のでしょうか。
理論的なコンピューターサイエンスのバックグラウンドはありませんが、C ++の概念がどのような理論的なオブジェクトに対応するのかを理解したいと思います。基本的に、C ++の概念では、制約のリストを満たす型のセットを定義できます。それで、理論的な観点から、どのC ++の概念が対応する、またはおおまかに対応する(そしてその場合、違いは何である)のでしょうか。
回答:
プログラミング言語理論の観点から、他の回答やコメントが提供した計算可能性の観点とは対照的に、C ++テンプレートは、概念と組み合わせて、制限付きの多態性または制約付きの総称に対応します。概念自体は、型に設定された制約または境界に対応します。
テンプレートはタイプレベルの関数であり、タイプによってパラメーター化され、特定のインターフェースを実装するための概念によって制約されます。テンプレートがその概念を満たす型に適用されると、新しい型になります。
テンプレートとコンセプトは、Java、Scala、またはEiffelのジェネリックに類似しています。これらは、型パラメーターの制約を指定およびチェックできるため、以前のC ++のテンプレートとは異なりますが、C ++テンプレートではそれができませんでした。利点は、テンプレートを適用した後のプログラムが適切に入力されるという静的チェックの改善です。
適切な参照は、Pierce、Benjamin C.(2002)です。型とプログラミング言語。MIT Press、Chapter 26:Bounded quantification。
C ++の概念は、再帰的に列挙可能な言語にマッピングされます。C ++型システムはチューリング完全であるため、テンプレートのインスタンス化中に問い合わせ可能な型のプロパティ(サイズ、パラメーターなど)は、型システムでシミュレートされた任意のプログラムを介して実行できます。