知識マップ: ピクセルとミリメートルを型で分ける ── Adaで寸法検査の単位の取り違えを防ぐ
記事「ピクセルとミリメートルを型で分ける ── Adaで寸法検査の単位の取り違えを防ぐ」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
AdaではLong_Floatから派生した型どうしは別の型になり、ピクセルの長さをミリメートルの変数にそのまま入れるとコンパイルエラーになる。ただし派生型は親の型の基本演算を受け継ぐので、ピクセルの長さどうしの掛け算がピクセルの長さを返す。型を宣言したパッケージの仕様部で意味のない演算子をis abstractと宣言し直すと呼べなくなり、意味のある演算子だけを定義できる。座標・長さ・校正係数の型を総称パッケージにまとめてx用とy用にインスタンス化すると、軸ごとに別の型になり、x方向の係数をy方向の長さに掛ける式がコンパイルエラーになる。公差の判定は浮動小数点数のまま比べると上限ちょうどの値が不合格になることがあり、10進固定小数点型に丸めてから比べる。GNATは独自のアスペクトで次元解析を行えるが、座標と長さは区別できない。固定小数点型で書いた換算の範囲検査が失敗しないことは、GNATproveで証明できる。
flowchart LR
accTitle: ピクセルとミリメートルを型で分ける記事の知識マップ
accDescr: Adaの強い型付けが派生型で単位の混用を防ぎ、派生型が受け継いだ意味のない演算子を抽象サブプログラムで消すこと、総称パッケージで軸ごとの型を作ること、固定小数点型の範囲検査をGNATproveで証明すること、GNATが独自の次元解析を実装することを示す図。
ada_strong_typing["Adaの強い型付け"]
ada_derived_type["派生型(derived type)"]
gnat["GNAT"]
ada["Ada(プログラミング言語)"]
ada_abstract_subprogram["抽象サブプログラム(abstract subprogram)"]
ada_generic_package["総称パッケージ(Generic Package)"]
ada_fixed_point_type["固定小数点型(fixed point type)"]
ada_range_constraint["範囲制約(range constraint)"]
gnatprove["GNATprove"]
spark["SPARK"]
gnat_dimensionality_checking["GNATの次元解析(Dimension_System)"]
gnat -->|"実装を担う"| ada
ada -->|"実装を担う"| ada_strong_typing
ada_strong_typing -->|"利用する"| ada_derived_type
ada_strong_typing -.->|"利用する"| ada_abstract_subprogram
ada_generic_package -.->|"利用する"| ada_derived_type
ada -->|"実装を担う"| ada_fixed_point_type
ada_fixed_point_type -->|"利用する"| ada_range_constraint
ada_range_constraint -.->|"で確認できる"| gnatprove
spark -->|"利用する"| gnatprove
gnat -->|"実装を担う"| gnat_dimensionality_checking
概念間の関係(全10件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- GNATはAda(プログラミング言語)の実装を担います。
- Ada(プログラミング言語)はAdaの強い型付けの実装を担います。
- Adaの強い型付けは派生型(derived type)を利用します。
- Adaの強い型付けは抽象サブプログラム(abstract subprogram)を利用します。
- 総称パッケージ(Generic Package)は派生型(derived type)を利用します。
- Ada(プログラミング言語)は固定小数点型(fixed point type)の実装を担います。
- 固定小数点型(fixed point type)は範囲制約(range constraint)を利用します。
- 範囲制約(range constraint)はGNATproveで確認できます。
- SPARKはGNATproveを利用します。
- GNATはGNATの次元解析(Dimension_System)の実装を担います。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。