知識マップ: Ada言語の魅力 ── 型で設計を語り、数十年動き続けるソフトウェアを支える言語
記事「Ada言語の魅力 ── 型で設計を語り、数十年動き続けるソフトウェアを支える言語」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Adaは強い型付け、範囲制約、仕様と本体を分離するパッケージ、ジェネリック、Ada 2012で導入された契約による設計(Pre/Post)、そして言語仕様に組み込まれたタスクと保護オブジェクトを備えた汎用プログラミング言語である。強い型付けは単位の取り違えによる事故を防ぐ設計思想の動機になっており、範囲制約は配列の境界チェックと組み合わさってバッファオーバーランのような未定義動作を防ぐ。SPARKはこの契約をそのまま数学的証明の対象にするAdaのサブセットであり、GNATとAlireがあれば無償で試せる。一方で、Ariane 5初号機の事故は、言語の実行時チェックが問題を検出しても、前提を見直すプロセスや例外後のフェイルセーフ設計の代わりにはならないことを示している。
flowchart LR
accTitle: Ada言語の魅力の知識マップ
accDescr: Adaが強い型付け・範囲制約・パッケージ・ジェネリック・契約による設計・タスクと保護オブジェクトをどう言語機能として実装し、SPARKによる証明やC言語との相互運用へつながるか、Mars Climate OrbiterやAriane 5の事故がその設計思想とどう関わるかを示す図。
ada["Ada(プログラミング言語)"]
ada_strong_typing["Adaの強い型付け"]
ada_range_constraint["範囲制約(range constraint)"]
ada_package["Adaのパッケージ(仕様部/本体分離)"]
ada_generics["Adaのジェネリック(総称単位)"]
ada_design_by_contract["契約による設計(Pre/Post条件)"]
ada_task["Adaのタスク(並行処理)"]
protected_object["保護オブジェクト(protected object)"]
ada_c_interop["AdaとC/C++の相互運用(Annex B)"]
spark["SPARK"]
gnat["GNAT"]
alire["Alire"]
ada_generic_contract_model["Adaジェネリックのcontract model"]
mars_climate_orbiter_loss["Mars Climate Orbiterの喪失"]
ariane_5_flight_501_failure["Ariane 5初号機(Flight 501)の打ち上げ失敗"]
ravenscar_profile["Ravenscarプロファイル"]
buffer_overrun["バッファオーバーラン"]
late_instantiation_error["インスタンス化時にしか分からないテンプレートエラー"]
ada -->|"実装を担う"| ada_strong_typing
ada -->|"実装を担う"| ada_range_constraint
ada -->|"実装を担う"| ada_package
ada -->|"実装を担う"| ada_generics
ada -->|"実装を担う"| ada_design_by_contract
ada -->|"実装を担う"| ada_task
ada_task -->|"利用する"| protected_object
ada -->|"実装を担う"| ada_c_interop
spark -->|"前提とする"| ada
spark -.->|"前提とする"| ada_design_by_contract
gnat -.->|"で構成できる"| alire
ada_generics -->|"実装を担う"| ada_generic_contract_model
ada_strong_typing -.->|"防止する"| mars_climate_orbiter_loss
ada_range_constraint -.->|"原因になり得る"| ariane_5_flight_501_failure
ravenscar_profile -->|"前提とする"| ada_task
ada_range_constraint -.->|"防止する"| buffer_overrun
ada_generic_contract_model -->|"防止する"| late_instantiation_error
gnat -->|"実装を担う"| ada
概念間の関係(全18件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Ada(プログラミング言語)はAdaの強い型付けの実装を担います。
- Ada(プログラミング言語)は範囲制約(range constraint)の実装を担います。
- Ada(プログラミング言語)はAdaのパッケージ(仕様部/本体分離)の実装を担います。
- Ada(プログラミング言語)はAdaのジェネリック(総称単位)の実装を担います。
- Ada(プログラミング言語)は契約による設計(Pre/Post条件)の実装を担います。
- Ada(プログラミング言語)はAdaのタスク(並行処理)の実装を担います。
- Adaのタスク(並行処理)は保護オブジェクト(protected object)を利用します。
- Ada(プログラミング言語)はAdaとC/C++の相互運用(Annex B)の実装を担います。
- SPARKはAda(プログラミング言語)を前提とします。
- SPARKは契約による設計(Pre/Post条件)を前提とします。
- GNATはAlireで構成できます。
- Adaのジェネリック(総称単位)はAdaジェネリックのcontract modelの実装を担います。
- Adaの強い型付けはMars Climate Orbiterの喪失を防ぎます。
- 範囲制約(range constraint)はAriane 5初号機(Flight 501)の打ち上げ失敗の原因になることがあります。
- RavenscarプロファイルはAdaのタスク(並行処理)を前提とします。
- 範囲制約(range constraint)はバッファオーバーランを防ぎます。
- Adaジェネリックのcontract modelはインスタンス化時にしか分からないテンプレートエラーを防ぎます。
- GNATはAda(プログラミング言語)の実装を担います。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。