「ジェネリックプログラミング」の版間の差分

削除された内容 追加された内容
Sycgln (会話 | 投稿記録)
Poshnegev (会話 | 投稿記録)
編集の要約なし
(他の1人の利用者による、間の1版が非表示)
1行目:
{{著作権問題調査依頼|date=2021-02}}
{{プログラミング・パラダイム}}
'''ジェネリックプログラミング'''({{lang-en-short|genericGeneric programming}})は、特定の[[具体的なデータ型]]直接依存しない[[アルゴリズム]]を、抽象的かつ汎用的なコード記述を可能にするための[[プログラミング]]スタイルである。データ型の詳細化を後回しにする方針によって、アルゴリズムが扱うデータ型の詳細は、その[[イ (コスタンス化]]の時に与えられる型パラメピュータで決定される。このスタイルは[[アルゴリズム]]と[[データ構造]]を柔軟に分離して、双方の機能的な[[ソフトウェアコンポーネント)|コンピュタプログラミ]]化を促進す手法である。
 
== 概要 ==
360 ⟶ 361行目:
[[C++/CLI]]は.NETのジェネリクスとC++のテンプレート両方をサポートする。ただしこれらの間に互換性はない。
 
==Haskellのジェネリッラス==
[[Haskell]]には、{{仮リンク|パラメトリック多相|en|Parametric polymorphism}}と[[テンプレートメタプログラミング]]の特徴を合わせたような[[型クラス]] (type class) がある。ただしHaskellの型クラスの本質は、データ型に付与する{{仮リンク|制約(mathematics)|en|Constraint (mathematics)|label=制約}}としての{{仮リンク|アドホック多相|en|Ad hoc polymorphism}}である。
 
402 ⟶ 403行目:
決まり文句を捨てるアプローチ (Scrap your boilerplate approach) は簡易的なジェネリックプログラミングのHaskellに対するアプローチである (Lämmel and Peyton Jones, 2003)。このアプローチはHaskellのGHC>=6.0の実装でサポートされる。このアプローチを使うことで、ジェネリックな読み込み、ジェネリックな明示、ジェネリックな比較(つまりgread、gshow、geq)と同様に、横断スキーム(例えばいつでもどこでも)のようなジェネリック関数をプログラマーは記述できる。このアプローチはタイプセーフなキャストとコンストラクタアプリケーションの実行のための一部の基本要素に基づいている。
 
=== PolyPの多相型 ===
PolyPはHaskellに対する最初のジェネリックプログラミング言語拡張であった。PolyPではジェネリック関数は''polytypic''と呼ばれた。通常データ型のパターン[[ファンクタ]]の構造によって構造的な導出を通じて定義できるpolytypic関数のような特別な構文を言語に導入した。PolyPでの通常データ型はHaskellのデータ型のサブセットである。通常データ型tは''* → *''の種類でなければならず、もし''a''が定義における表面的な型の引数である場合は、''t''に対する全ての再帰呼び出しは''t a''形式でなければならない。これらの制約は、異なる形式の再帰呼び出しである入れ子のデータタイプと同様に、上位に種類付けされたデータ型を規定する。