アダ、デザイン、そして言語を築いた言語
10時間前原文(www.iqiipi.com)
概要
- Adaは、DoD(アメリカ国防総省)が設計し、現代の多くの言語が追随した特徴を持つシステム言語。
- パッケージ構造や型安全性、並行処理など、後発言語が模倣する設計を先取り。
- 業界からは冗長・時代遅れと評されるが、その安全性や堅牢性が今再評価されている。
- DoDの調達危機を背景に、400以上のバラバラな言語運用を統合するために誕生。
- インターフェースと実装の分離、厳密な型検査などを仕様レベルで強制。
Ada:静かな巨人 ― DoDが生んだ言語、その真価と現代への影響
- Adaは、ジェネリクスを標準機能として搭載した初の広範囲システム言語。
- パッケージ(仕様と本体の分離)、並行処理、厳密な型安全性を言語仕様で義務付け。
- インターフェースと実装の強制的な分離により、設計の明確化と保守性向上を実現。
- 範囲制約型、判別共用体、タスク通信モデルなど、現代言語が後追いする機能を数十年前に実装。
- Rust、Python、C#などの進化は、Adaの設計思想に収束している現象。
- 業界からは冗長・難解・時代遅れと評されがちだが、実は現代言語が求める安全性・堅牢性を最初から実現。
- 航空機やアビオニクスの主要ソフトウェアで今も現役、1983年以来4回の標準改訂。
- コンパイラが厳密な合法性・可視性・型・安全性検査を強制、曖昧さを許さない設計。
- **「ノーと言う言語」**としての評判、しかし今やその設計思想が再評価。
Ada誕生の背景 ― DoDの調達危機と要件定義
- 1970年代初頭、DoDは武器・物流・指揮系統で450以上の異なる言語・方言を運用。
- 各言語は特定のベンダーや時代に紐付き、相互運用性・保守性が壊滅的。
- 既存言語(COBOL、Fortran、PL/1)は要件を満たせず、新言語策定へ。
- 5年かけて要求仕様文書(Strawman~Steelman)を段階的に精緻化。
- Steelman(1978年)は、現場の失敗を踏まえた必須要件を列挙。
- 明示的なインターフェース・実装分離
- 強力な静的型付け
- 組み込みの並行タスク管理
- 一貫した例外処理
- マシン非依存性
- 他者が読める可読性
- プログラム検証容易性
- 要件は理想論でなく、実際の失敗事例から導出された現実的要求。
Adaの設計とパッケージシステム ― 他言語との違い
- Adaの中心は「パッケージ」:仕様(インターフェース)と本体(実装)の物理的分離。
- 仕様は契約であり、公開する型・手続き・定数などを宣言。
- 本体は実装であり、仕様に基づきコードを提供。
- クライアントコードは仕様のみ参照可能、本体は不可視。
- この分離はスタイル推奨でなく、言語仕様で強制される構造的特性。
- JavaのパッケージやPythonのモジュール、Cのヘッダファイル、GoやRustの可視性修飾子もAdaの完全な分離には及ばない。
- Adaの「private型」:名前だけ可視で、実装は完全に不透明。
- クライアントは型名で変数宣言や関数呼び出し可能だが、内部構造は一切見えない。
- 実装の詳細(レコードか配列か整数か等)は全く分からない。
- パッケージ設計者のみが操作メソッドを仕様に公開できる。
- JavaやC#のアクセス修飾子との違い:実装の「存在」自体がクライアントから見えない。
- C#やJavaも長い年月をかけて真のカプセル化(record型など)へ進化中。
- オブジェクト指向言語の進化は、Adaのパッケージシステムへの回帰の歴史。
Adaの型システム ― 意味を型で表現する設計
- Adaの型システムは、型(Type)とサブ型(Subtype)の数学的概念を採用。
- オブジェクト指向の継承型でなく、値集合の制約としてのサブ型。
- 例:「type Age is range 0 .. 150」――年齢型を範囲指定で定義。
- この型は0~150の値のみ許容し、他の整数型とは別物。
- 計算時は範囲外を自動でランタイムチェック(明示的に外せる)。
- 意味の異なる整数型(年齢と西暦など)を型で区別、誤用をコンパイル時に防止。
- CやFortran、Pascalなど従来言語では意味を型で表現できず、コメントや運用頼み。
- Adaの範囲型、列挙型、固定小数点型は、意味を型システムに直接埋め込める。
- Rustのu8やi32なども型安全性を高めるが、Adaの意味的制約には及ばない。
Adaの現代的意義 ― 静かに進化し続ける安全性
- Adaは業界の流行やコミュニティ文化とは無縁だが、航空宇宙・防衛分野で今も現役。
- 設計思想や安全性は、現代のプログラミング言語設計の「静かな基準」。
- 「安全性」「明確な契約」「厳密な型」「実装の隠蔽」――これらを最初から持つ言語。
- 現代の多くの言語が、Adaが示した道を数十年遅れて追いかけている現状。