知識マップ: Ada言語の魅力 ── 型で設計を語り、数十年動き続けるソフトウェアを支える言語

記事「Ada言語の魅力 ── 型で設計を語り、数十年動き続けるソフトウェアを支える言語」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

Adaは強い型付け、範囲制約、仕様と本体を分離するパッケージ、ジェネリック、Ada 2012で導入された契約による設計(Pre/Post)、そして言語仕様に組み込まれたタスクと保護オブジェクトを備えた汎用プログラミング言語である。強い型付けは単位の取り違えによる事故を防ぐ設計思想の動機になっており、範囲制約は配列の境界チェックと組み合わさってバッファオーバーランのような未定義動作を防ぐ。SPARKはこの契約をそのまま数学的証明の対象にするAdaのサブセットであり、GNATとAlireがあれば無償で試せる。一方で、Ariane 5初号機の事故は、言語の実行時チェックが問題を検出しても、前提を見直すプロセスや例外後のフェイルセーフ設計の代わりにはならないことを示している。

Ada言語の魅力の知識マップAdaが強い型付け・範囲制約・パッケージ・ジェネリック・契約による設計・タスクと保護オブジェクトをどう言語機能として実装し、SPARKによる証明やC言語との相互運用へつながるか、Mars Climate OrbiterやAriane 5の事故がその設計思想とどう関わるかを示す図。実装を担う実装を担う実装を担う実装を担う実装を担う実装を担う利用する実装を担う前提とする前提とするで構成できる実装を担う防止する原因になり得る前提とする防止する防止する実装を担うAda(プログラミング言語)Adaの強い型付け範囲制約(range constraint)Adaのパッケージ(仕様部/本体分離)Adaのジェネリック(総称単位)契約による設計(Pre/Post条件)Adaのタスク(並行処理)保護オブジェクト(protected object)AdaとC/C++の相互運用(Annex B)SPARKGNATAlireAdaジェネリックのcontract modelMars Climate Orbiterの喪失Ariane 5初号機(Flight 501)の打ち上げ失敗Ravenscarプロファイルバッファオーバーランインスタンス化時にしか分からないテンプレートエラー

概念間の関係(全18件)

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

主要概念の定義

Ada(プログラミング言語)
1970年代後半にアメリカ国防総省の主導で標準化された、強い型付けと高信頼性を重視する汎用プログラミング言語。最新標準はAda 2022。
Adaのタスク(並行処理)
スレッドをOSのAPIやライブラリに頼らず、言語仕様に組み込む形で提供するAdaの並行実行単位。
SPARK
プログラムの性質を数学的に証明できるように設計された、Adaのサブセット(部分言語)とそのツール群。
GNAT
GCCに含まれる無償のAdaコンパイラで、Adaの代表的な処理系。
Adaのジェネリック(総称単位)
型・値・サブプログラム・パッケージを仮パラメータとして受け取り、newによるインスタンス化の時点で静的に型チェックされるAdaの再利用機構。
Adaの強い型付け
構造が同じでも別名で宣言した型を別の型として扱い、暗黙の混用をコンパイルエラーにするAdaの型システムの性質。
範囲制約(range constraint)
型に値の範囲を持たせ、違反を実行時にConstraint_Error例外として検出するAdaの仕組み。配列アクセスの境界チェックにも使われる。
Ravenscarプロファイル
動的タスク生成やselect文などを禁止し、Adaのタスク機能を静的解析可能で決定論的なサブセットに制限するプロファイル。
Adaジェネリックのcontract model
ジェネリック本体を仮パラメータが約束した操作だけで書かせ、本体単独で型チェックするAdaジェネリックの設計方式。

機械可読データ

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