知識マップ: Adaのジェネリックプログラミング ── 型で契約を書き、再利用をゼロコストで実現する
記事「Adaのジェネリックプログラミング ── 型で契約を書き、再利用をゼロコストで実現する」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Adaのジェネリックは、型・値・サブプログラム・パッケージを仮パラメータとして受け取り、newによるインスタンス化の時点で静的に型チェックされる再利用の仕組みである。総称サブプログラムと総称パッケージはこの仕組みの2本柱で、仮型パラメータはprivateやrange<>、digits<>などのカテゴリで本体が使える操作の契約を明示し、仮サブプログラムパラメータで比較や述語といった振る舞いを注入し、仮パッケージパラメータで既にインスタンス化された総称パッケージを部品として受け取る。この契約を仮パラメータの範囲だけで本体単独チェックするcontract modelにより、C++テンプレートが歴史的に抱えていたインスタンス化して初めてエラーが分かる問題は、Adaでは構造的に起きない。GNATとAlireがあれば、この仕組みを無償の環境で試せる。
flowchart LR
accTitle: Adaのジェネリックプログラミングの知識マップ
accDescr: 総称サブプログラムと総称パッケージが型・値・サブプログラム・パッケージという仮パラメータの契約(contract model)の上に成り立ち、newによるインスタンス化でその契約が検査されること、C++テンプレートが歴史的に抱えていたインスタンス化時エラー問題との違いを示す図。
ada_generics["Adaのジェネリック(総称単位)"]
ada_generic_contract_model["Adaジェネリックのcontract model"]
ada["Ada(プログラミング言語)"]
ada_generic_subprogram["総称サブプログラム(Generic Subprogram)"]
ada_generic_package["総称パッケージ(Generic Package)"]
ada_generic_formal_type["仮型パラメータ(Formal Type)"]
ada_generic_formal_subprogram["仮サブプログラムパラメータ(Formal Subprogram)"]
ada_generic_formal_package["正式パッケージパラメータ(Formal Package)"]
ada_generic_instantiation["インスタンス化(instantiation)"]
ada_generic_formal_object["仮オブジェクト(値)パラメータ(Formal Object)"]
late_instantiation_error["インスタンス化時にしか分からないテンプレートエラー"]
cpp_templates["C++テンプレート"]
gnat["GNAT"]
alire["Alire"]
ada -->|"実装を担う"| ada_generics
ada_generics -->|"利用する"| ada_generic_subprogram
ada_generics -->|"利用する"| ada_generic_package
ada_generic_subprogram -.->|"前提とする"| ada_generic_formal_type
ada_generics -->|"利用する"| ada_generic_formal_subprogram
ada_generics -->|"利用する"| ada_generic_formal_package
ada_generics -->|"前提とする"| ada_generic_instantiation
ada_generic_formal_type -->|"で構成できる"| ada_generic_instantiation
ada_generic_package -.->|"前提とする"| ada_generic_formal_type
ada_generic_package -.->|"前提とする"| ada_generic_formal_object
ada_generic_formal_subprogram -->|"実装を担う"| ada_generic_contract_model
ada_generic_formal_type -->|"実装を担う"| ada_generic_contract_model
ada_generic_contract_model -->|"防止する"| late_instantiation_error
cpp_templates -.->|"原因になり得る"| late_instantiation_error
ada_generic_formal_package -->|"前提とする"| ada_generic_instantiation
gnat -->|"実装を担う"| ada
gnat -.->|"で構成できる"| alire
ada_generic_subprogram -.->|"利用する"| ada_generic_formal_subprogram
ada_generic_package -.->|"利用する"| ada_generic_formal_subprogram
ada_generic_instantiation -.->|"前提とする"| ada_generic_formal_object
ada_generic_formal_object -->|"実装を担う"| ada_generic_contract_model
概念間の関係(全21件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Ada(プログラミング言語)はAdaのジェネリック(総称単位)の実装を担います。
- Adaのジェネリック(総称単位)は総称サブプログラム(Generic Subprogram)を利用します。
- Adaのジェネリック(総称単位)は総称パッケージ(Generic Package)を利用します。
- 総称サブプログラム(Generic Subprogram)は仮型パラメータ(Formal Type)を前提とします。
- Adaのジェネリック(総称単位)は仮サブプログラムパラメータ(Formal Subprogram)を利用します。
- Adaのジェネリック(総称単位)は正式パッケージパラメータ(Formal Package)を利用します。
- Adaのジェネリック(総称単位)はインスタンス化(instantiation)を前提とします。
- 仮型パラメータ(Formal Type)はインスタンス化(instantiation)で構成できます。
- 総称パッケージ(Generic Package)は仮型パラメータ(Formal Type)を前提とします。
- 総称パッケージ(Generic Package)は仮オブジェクト(値)パラメータ(Formal Object)を前提とします。
- 仮サブプログラムパラメータ(Formal Subprogram)はAdaジェネリックのcontract modelの実装を担います。
- 仮型パラメータ(Formal Type)はAdaジェネリックのcontract modelの実装を担います。
- Adaジェネリックのcontract modelはインスタンス化時にしか分からないテンプレートエラーを防ぎます。
- C++テンプレートはインスタンス化時にしか分からないテンプレートエラーの原因になることがあります。
- 正式パッケージパラメータ(Formal Package)はインスタンス化(instantiation)を前提とします。
- GNATはAda(プログラミング言語)の実装を担います。
- GNATはAlireで構成できます。
- 総称サブプログラム(Generic Subprogram)は仮サブプログラムパラメータ(Formal Subprogram)を利用します。
- 総称パッケージ(Generic Package)は仮サブプログラムパラメータ(Formal Subprogram)を利用します。
- インスタンス化(instantiation)は仮オブジェクト(値)パラメータ(Formal Object)を前提とします。
- 仮オブジェクト(値)パラメータ(Formal Object)はAdaジェネリックのcontract modelの実装を担います。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。