Ada

提供: miniwiki
2018/7/12/ (木) 02:14時点におけるja>Momiji-Penguinによる版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索
Ada
パラダイム マルチパラダイム
登場時期 1983年
設計者 ジャン・イシュビアEnglish版
1995年拡張はS. Tucker Taft主導
最新リリース ISO/IEC 8652:2012(Ada 2012)
型付け nominative, 安全な強い静的型付け
主な処理系 GNAT (GCC) 他
方言 Ada 83, Ada 95, Ada 2005
規格 ISO/IEC 8652
影響を受けた言語 ALGOL, Pascal,
C++ (Ada 95),
Java (Ada 2005)
影響を与えた言語 C++, PL/SQL, VHDL, Java,
C言語 (C99)
プラットフォーム 多数
ウェブサイト http://www.adaic.org
テンプレートを表示

Ada(エイダ)は、強力な言語機能を豊富に持ち、高度な型の体系をもつ、プログラミング言語の一つである。構文はAlgol系である。

史上初のプログラマとされるエイダ・ラブレスの名前にちなんでAdaと命名されているため、ADAと表記するのは誤り。

フリーのコンパイラとしては、GNATなどがある。

特徴

ファイル:Ada types.png
Adaのデータ型の階層構造

1979年、米国国防総省が信頼性・保守性に優れた、主として組み込みシステム向けの言語を作りたいという意図のもと、国際競争入札を行い4社に発注、各設計仕様書の表紙が赤、青、黄、緑だったことから、そのままそれぞれの言語名称としてRED、BLUE、YELLOW、GREENと呼ばれた。この入札で優勝したのはフランス人チームで、公平を期すため選定時にはGREENと名付けられた。そのような理由から、イメージカラーは緑である。特徴的な要件としては、大規模開発や長期保守性の観点から、

  • コーディング効率よりも可読性を重視すること
  • マクロを有しないこと

などがあった。

プログラム言語としての機能としては、

  • 強い型検査(コンパイル時および実行時)。属性によって型に関する情報が取得できる。
  • 複雑な型を持つ定数。
  • 手続き・関数・演算子の多重定義。
  • プラグマを使った処理系依存の機能の指定。
  • パッケージ(後にC++namespaceとして追従)
  • 汎用プログラミング(後にC++がテンプレートとして追従)
  • 並行プログラミング(タスク、entry/accept/select文など)
  • 例外

など、当時としては先進的な機能[1]を意欲的に取り入れたため、米国国防総省は大きなものとなってしまった言語仕様をまとめるのに、初版のStrawman(わら男、案山子の意味もある)からWoodenman(木男)、Tinman(ブリキ男、前述の案山子とともに『オズの魔法使い』に出てくる)、Ironman(鉄男)、最終版のSteelman(鋼鉄男)に至るまで5つのバージョンに分けて策定を行った(近年では廃れたが、当時、既に歴史あるCobolやFortranなどにおいて時代に対応するためなどの相次ぐ機能追加で大きくなった仕様のレベル分けなどはよく行われていたことであり、Adaに限った話ではない)。

言語仕様の大きさや厳密さ(ここでは、たとえばC言語の標準規格には豊富にある「未定義」や「未規定」がわずかだ、という意味である。C言語では、そういったケース(多くはコーナーケース)への対処が必須ではないので、省略しても標準規格には反さないわけだが、「厳密」な仕様の下では省略できない)のため、当時のコンピュータが持っていた資源では、処理系の実装にミニコンワークステーション程度を必要とし、16ビットパソコンには市場性といった事情もあり実装はほとんどない(もっとも、intが32ビット等、Unixと十分な互換性があるようなC言語の処理系も16ビットパソコンにはたいして無かったのだから、そう違わない)。実際にはAdaは、大企業において、主として信頼性や保守性を要求されるシステムの開発でのみ普及した。というよりも、実際にどの程度徹底されたかは不明だが、策定の主体であった米国国防総省が発注するようなもの、即ち兵器の開発において条件とされたと言われる。

この時期としては先進的であった、その他の特徴としては、

コンパイラの認定制度
仕様準拠か否かの検証プログラムキットが規定され、合格しない処理系は「Adaコンパイラ」と称することができない。
自動ビルド
複数モジュールの依存性から、再コンパイルの要否を自動判定する(いわゆるMakefileの記述が不要)

などがあげられる。

策定作業中に仕様が大きくなっていった際には、仕様が高度に巨大化した言語が、兵器のように高度な信頼性を要求される分野に、国防総省の「お墨付き」として使用されることを危ぶむ向きもあった。たとえばアントニー・ホーアは1980年度のチューリング賞受賞者だが[2]、その受賞記念講演(Turing Award Lecture)The Emperor's Old Clothesにおいて、自身のALGOL 68(en:ALGOL 68、やはり仕様の巨大化で知られる)に関する経験などに触れたうえで、Adaへの憂慮で締めくくっている(この講演は、二通りのソフトウェアの設計構築法について述べた One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.・「ひとつめの方法はあきらかに欠陥が無いようにso simpleにするというもので、もうひとつの方法はあきらかな欠陥が無いようにso complicatedにするというものである」という文章でも知られる)。

標準

言語仕様は、最初に1983年にMIL規格として規格化され、エイダ・ラブレスの生年である1815年に因んで、MIL-STD-1815と採番された。この規格はANSI標準、1987年にISO標準 ISO/IEC 8652:1987 として標準化された。

1990年より、主としてタスキング仕様の改善およびオブジェクト指向の導入を目的として、ISO標準 (ISO/IEC 8652:1987) の改訂作業が開始された。1995年2月15日にISO標準として改訂が承認され、オブジェクト指向言語のうち、史上初の国際標準となった。1995年の規格は、オブジェクト指向の他、下記のような仕様も標準化されている。

  • 他言語とのインタフェース方法 C/FORTRAN/COBOL
    この時点でC++とのインタフェース方法が標準化できなかったのは、C++の標準化がまだだったからである(C++の標準は、紛糾を経て約3年半後の1998年9月1日に承認された)
  • 分散処理 (RPC)

2000年にTechnical Amendmentが発行された(ISO/IEC 8652:1995/COR1:2000)。同改訂版は、JISでは2002年版 (JIS X 3009:2002) に対応する。JIS X 3009は本文の翻訳はしていない「要約JIS」であった。2012年1月20日を以って「国際規格周知を目的として要約JISを発行したが,周知としての目的は終了したため。」として廃止されている。

Ada の ISO 規格は、その後、2005年と2012年にも改訂されている。

利用例

最近の利用例としてはF-22戦闘機97式魚雷などがある。ただしこの分野でもAdaの陳腐化が進んでおり、F-35戦闘機以降はC++へ移行している。

民生品ではあまり利用されていないが、信頼性を重視する航空機の制御ソフトウェアに利用されることがある。例としてはボーイング777など。

脚注

  1. 先進的ということは、言い換えれば「こなれていない」ということであり、兵器のようなシステムでは冒険的過ぎると言えなくもない。
  2. http://amturing.acm.org/award_winners/hoare_4622167.cfm

外部リンク

関連項目