知識マップ: Adaのジェネリックプログラミング ── 型で契約を書き、再利用をゼロコストで実現する

記事「Adaのジェネリックプログラミング ── 型で契約を書き、再利用をゼロコストで実現する」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

Adaのジェネリックは、型・値・サブプログラム・パッケージを仮パラメータとして受け取り、newによるインスタンス化の時点で静的に型チェックされる再利用の仕組みである。総称サブプログラムと総称パッケージはこの仕組みの2本柱で、仮型パラメータはprivateやrange<>、digits<>などのカテゴリで本体が使える操作の契約を明示し、仮サブプログラムパラメータで比較や述語といった振る舞いを注入し、仮パッケージパラメータで既にインスタンス化された総称パッケージを部品として受け取る。この契約を仮パラメータの範囲だけで本体単独チェックするcontract modelにより、C++テンプレートが歴史的に抱えていたインスタンス化して初めてエラーが分かる問題は、Adaでは構造的に起きない。GNATとAlireがあれば、この仕組みを無償の環境で試せる。

Adaのジェネリックプログラミングの知識マップ総称サブプログラムと総称パッケージが型・値・サブプログラム・パッケージという仮パラメータの契約(contract model)の上に成り立ち、newによるインスタンス化でその契約が検査されること、C++テンプレートが歴史的に抱えていたインスタンス化時エラー問題との違いを示す図。実装を担う利用する利用する前提とする利用する利用する前提とするで構成できる前提とする前提とする実装を担う実装を担う防止する原因になり得る前提とする実装を担うで構成できる利用する利用する前提とする実装を担うAdaのジェネリック(総称単位)Adaジェネリックのcontract modelAda(プログラミング言語)総称サブプログラム(Generic Subprogram)総称パッケージ(Generic Package)仮型パラメータ(Formal Type)仮サブプログラムパラメータ(Formal Subprogram)正式パッケージパラメータ(Formal Package)インスタンス化(instantiation)仮オブジェクト(値)パラメータ(Formal Object)インスタンス化時にしか分からないテンプレートエラーC++テンプレートGNATAlire

概念間の関係(全21件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

Adaのジェネリック(総称単位)
型・値・サブプログラム・パッケージを仮パラメータとして受け取り、newによるインスタンス化の時点で静的に型チェックされるAdaの再利用機構。
Adaジェネリックのcontract model
ジェネリック本体を仮パラメータが約束した操作だけで書かせ、本体単独で型チェックするAdaジェネリックの設計方式。
Ada(プログラミング言語)
1970年代後半にアメリカ国防総省の主導で標準化された、強い型付けと高信頼性を重視する汎用プログラミング言語。最新標準はAda 2022。
総称サブプログラム(Generic Subprogram)
generic宣言に続けて書くサブプログラムの雛形。具体的な型・値・サブプログラムを渡してインスタンス化するまでは呼び出せない。
仮型パラメータ(Formal Type)
generic部分で宣言する型の仮パラメータ。private、limited private、range<>、mod<>、digits<>、delta<>、(<>)などのカテゴリで、本体が使ってよい操作の範囲を指定する。
総称パッケージ(Generic Package)
複数の操作と内部状態をまとめて再利用するための、generic宣言に続けて書くパッケージの雛形。インスタンスごとに内部状態は独立する。
仮サブプログラムパラメータ(Formal Subprogram)
比較関数や述語などの振る舞いを注入するために、generic部分に書くサブプログラムの仮パラメータ。is<>を付けると可視な標準演算子で省略できる。
C++テンプレート
C++のジェネリックプログラミング機構。歴史的にはインスタンス化して初めてエラーが出る性質があり、C++20のconceptsで制約を明示できるようになった。
正式パッケージパラメータ(Formal Package)
既にインスタンス化された総称パッケージそのものを、別のジェネリックの仮パラメータとして受け取る仕組み。ジェネリック部品同士の組み合わせに使う。
GNAT
GCCに含まれる無償のAdaコンパイラで、Adaの代表的な処理系。
インスタンス化(instantiation)
newを使って総称単位に具体的な型・値・サブプログラム・パッケージを渡し、通常のサブプログラムやパッケージを作ること。
仮オブジェクト(値)パラメータ(Formal Object)
サイズや閾値のように、インスタンスごとに固定したい値を渡すためのgeneric部分の仮パラメータ。型による制約(Positiveなど)を持たせられる。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。