Ada (プログラミング言語)
![]() | |
パラダイム | マルチパラダイム:構造化、命令型、オブジェクト指向、アスペクト指向、[1] 並行、配列、分散、汎用、手続き型、メタ |
---|---|
家族 | パスカル |
デザイン: |
|
初登場 | 1980年2月 |
安定版リリース | エイダ 2022 / 2023年5月 |
タイピングの規律 | 静的、強い、安全、名目上の |
OS | マルチプラットフォームまたはクロスプラットフォーム |
ファイル名拡張子 | .adb、.ads |
Webサイト | 詳しくはこちら |
主な実装 | |
AdaCore GNAT、[2] Green Hills Software Optimising Ada 95コンパイラ、 PTC ApexAdaおよびObjectAda、[3] MapuSoft Ada-C/C++チェンジャー、[4]旧称「AdaMagic with C Intermediate」、[5] DDC-Iスコア | |
方言 | |
SPARK、レイヴンズカーのプロフィール | |
影響を受けた | |
ALGOL 68、Pascal、Simula 67、[6] C++ (Ada 95)、Smalltalk (Ada 95)、Modula-2 (Ada 95) Java (Ada 2005)、Eiffel (Ada 2012) | |
影響を受けた | |
C++、Chapel、[7] Drago、[8] D、Eiffel、Griffin、[9] Java、Nim、ParaSail、PL/SQL、PL/pgSQL、Python、Ruby、Seed7、SPARforte、[10] Sparkel、SQL/PSM、VHDL | |
Adaは、 Pascalやその他の言語に触発された、構造化、静的型付け、命令型、オブジェクト指向の 高水準プログラミング言語です。契約による設計(DbC)、非常に強い型付け、明示的な並行性、タスク、同期メッセージパッシング、保護されたオブジェクト、非決定性に対する言語サポートが組み込まれています。Adaは、実行時エラーではなくコンパイラを使用してエラーを検出することにより、コードの安全性と保守性を向上させます。Adaは、国際標準化機構(ISO)と国際電気標準会議(IEC)によって共同で定義された国際技術標準です。2023年5月現在、非公式にAda 2022と呼ばれるこの標準は、ISO / IEC 8652:2023です。[11] [アップデート]
Adaはもともと、 1977年から1983年にかけて米国国防総省(DoD)との契約に基づき、ハネウェルのフランス人コンピュータ科学者 ジャン・イクビア率いるチームによって、当時DoDが使用していた450以上のプログラミング言語に取って代わるものとして設計された。[12] Adaは、最初のコンピュータプログラマーとされるエイダ・ラブレス(1815-1852)にちなんで名付けられた。 [13]
特徴
Ada はもともと組み込みシステムとリアルタイムシステム向けに設計されました。1992年から 1995 年にかけてIntermetricsの S. Tucker Taft によって設計された Ada 95 リビジョンでは、システム、数値、財務、およびオブジェクト指向プログラミング(OOP) のサポートが改善されました。
Ada の機能には、強力な型付け、モジュール プログラミングメカニズム (パッケージ)、実行時チェック、並列処理(タスク、同期メッセージ パッシング、保護されたオブジェクト、非決定論的選択ステートメント)、例外処理、ジェネリックなどがあります。Ada 95 では、動的ディスパッチを含むオブジェクト指向プログラミングのサポートが追加されました。
Ada の構文では、基本的な操作を実行する方法の選択肢が最小限に抑えられており、記号 (「||」や「&&」など) よりも英語のキーワード (「or else」や「and then」など) が優先されます。Ada では、基本的な算術演算子「+」、「-」、「*」、「/」が使用されますが、他の記号は使用されません。コード ブロックは、「declare」、「begin」、「end」などの単語で区切られます。「end」の後には (ほとんどの場合)、それが閉じるブロックの識別子が続きます (例: if ... end if、loop ... end loop )。条件付きブロックの場合、これにより、C や Java などの他の言語で間違ったネストされた if 式とペアになる可能性のある、 ぶら下がった else が回避されます。
Ada は、非常に大規模なソフトウェア システムの開発用に設計されています。Ada パッケージは個別にコンパイルできます。Ada パッケージ仕様 (パッケージ インターフェイス) も、実装なしで個別にコンパイルして一貫性をチェックできます。これにより、実装を開始する前の設計段階で早期に問題を検出できます。
他の言語では実行時まで検出できなかったり、ソースコードに明示的なチェックを追加する必要があるバグを回避するために、多数のコンパイル時チェックがサポートされている。たとえば、構文では、不一致の終了トークンによるエラーを防ぐために、明示的に名前の付いたブロックの閉じが必要である。強い型付けに準拠することで、コンパイル時または実行時に多くの一般的なソフトウェアエラー(間違ったパラメータ、範囲違反、無効な参照、不一致の型など)を検出できます。並行性は言語仕様の一部であるため、コンパイラは場合によっては潜在的なデッドロックを検出できます。[14]コンパイラは、スペルミスのある識別子、パッケージの可視性、冗長な宣言なども一般的にチェックし、警告やエラーを修正するための有用な提案を提供できます。
Ada は、割り当てられていないメモリへのアクセス、バッファオーバーフローエラー、範囲違反、off-by-one エラー、配列アクセスエラー、およびその他の検出可能なバグから保護するための実行時チェックもサポートしています。これらのチェックは実行時の効率性を考慮して無効にできますが、多くの場合は効率的にコンパイルできます。また、プログラム検証を支援する機能も含まれています。これらの理由から、Ada は、異常が事故による死亡、負傷、または深刻な経済的損失など、非常に深刻な結果につながる可能性がある重要なシステムで使用されることがあります。Ada が使用されているシステムの例としては、航空電子工学、航空管制、鉄道、銀行、軍事、宇宙技術などがあります。[15] [16]
Ada の動的メモリ管理は高レベルで型安全です。Ada には汎用または型なしのポインタはなく、暗黙的にポインタ型を宣言することもありません。代わりに、すべての動的メモリの割り当てと解放は、明示的に宣言されたアクセス型を介して行う必要があります。各アクセス型には、メモリ管理の低レベルの詳細を処理する関連するストレージプールがあります。プログラマは、デフォルトのストレージプールを使用することも、新しいストレージプールを定義することもできます (これは、非均一メモリアクセスに特に関連しています)。すべて同じ型を指定するが、異なるストレージプールを使用する複数の異なるアクセス型を宣言することもできます。また、この言語は、コンパイル時と実行時の両方でアクセシビリティチェックを提供し、アクセス値がそれが指すオブジェクトの型よりも長く存続できないようにします。[17]
言語のセマンティクスではアクセスできないオブジェクトの自動ガベージ コレクションが可能ですが、ほとんどの実装では、リアルタイム システムで予期しない動作を引き起こす可能性があるため、デフォルトではサポートされていません。Ada は、限定された形式の領域ベースのメモリ管理をサポートしています。また、ストレージ プールを創造的に使用することで、限定された形式の自動ガベージ コレクションを実現できます。これは、ストレージ プールを破棄すると、プール内のすべてのオブジェクトも破棄されるためです。
二重ダッシュ("--") は、エムダッシュに似ており、コメント テキストを表します。コメントは行末で終了します。閉じられていないコメントによってソース コードの全セクションが誤って無効になるのを防ぐため、コメントを複数行にまたがる方法は意図的に用意されていません。したがって、コード ブロック全体を無効にするには、各行 (または列) の前に "--" を個別に付ける必要があります。これにより、ページ全体に "--" の列が繰り返し作成され、無効なコードが明確に示されますが、ブロック コメントをサポートしていないエディターでは、大きなブロックの実験的な無効化/再有効化がさらに長引くプロセスになります。
セミコロン (";") は文の終了文字であり、ヌルまたは無操作文は です。終了する文のない
null;
単一の文は許可されません。;
ほとんどのISO標準とは異なり、Ada 言語定義 ( Ada リファレンス マニュアルまたはARM、または言語リファレンス マニュアルまたはLRMと呼ばれることもあります) はフリー コンテンツです。したがって、これは Ada コンパイラを実装するプログラマだけでなく、Ada プログラマにとって共通のリファレンスです。リファレンス マニュアルとは別に、言語設計とさまざまな言語構成要素の使用法を説明する詳細な理論的根拠ドキュメントもあります。このドキュメントもプログラマによって広く使用されています。言語が改訂されたときに、新しい理論的根拠ドキュメントが作成されました。
多くの Ada プログラマーが Ada ソース コードの作成を支援するために使用する注目すべき無料ソフトウェアツールの1 つが、GNAT Programming Studio です。これは、 GNU Compiler Collectionの一部です。
歴史
1970年代、米国国防総省(DoD)は、組み込みコンピュータシステムプロジェクトで使用されているさまざまなプログラミング言語の数に懸念を抱きました。その多くは時代遅れであったり、ハードウェアに依存していたり、安全なモジュールプログラミングをサポートしていなかったりしました。1975年に、高階言語ワーキンググループ(HOLWG)というワーキンググループが結成され、省と英国国防省の要件に一般的に適したプログラミング言語を見つけるか作成することで、この数を減らすことを目指しました。最初の仮の提案[18]から始まった多くの反復の後、最終的なプログラミング言語はAdaと名付けられました。そのようなプロジェクトで使用されていた高水準プログラミング言語の総数は、1983年の450以上から1996年には37に減少しました。
HOLWG は、プログラミング言語が満たすべき要件を述べた一連の文書であるSteelman 言語要件を作成しました。多くの既存の言語が正式に検討されましたが、チームは 1977 年に、既存の言語で仕様を満たすものはないと結論付けました。

新しいプログラミング言語の提案依頼が出され、4つの請負業者がRed(ベンジャミン・ブロスゴール率いるインターメトリクス)、Green(ジャン・イクビア率いるハネウェル)、Blue(ジョン・グッドイナフ率いるソフテック) [19]、Yellow(ジェイ・スピッツェン率いるSRIインターナショナル)の名前で提案を開発するために雇われました。1978年4月、公開の精査の後、RedとGreenの提案は次の段階に進みました。1979年5月、ハネウェルのジャン・イクビアによって設計されたグリーンの提案が選ばれ、通常エイダ・ラブレスとして知られるオーガスタ・エイダ・キング、ラブレース伯爵夫人にちなんでAdaと名付けられました。この提案は、イクビアと彼のグループが1970年代に開発した言語LISの影響を受けていました。予備的な Ada リファレンス マニュアルは、1979 年 6 月に ACM SIGPLAN Notices で公開されました。Military Standard リファレンス マニュアルは、1980 年 12 月 10 日 (Ada Lovelace の誕生日) に承認され、Ada Lovelace の誕生年にちなんで MIL-STD-1815 という番号が付けられました。1981 年、Tony Hoare はチューリング賞のスピーチでAda が複雑すぎて信頼性が低いと批判しましたが、[20]その後、Ada の教科書に書いた序文でその批判を撤回したようです。[21]
Ada は初期の頃、プログラミング コミュニティ全体から大きな注目を集めました。その支持者やその他の人々は、Ada が防衛関連の仕事だけでなく、汎用プログラミングの主要な言語になる可能性があると予測しました。[22] Ichbiah は、10 年以内にプログラミング言語は Ada とLisp の2 つだけ残るだろうと公に述べました。[23] 初期の Ada コンパイラは、大きく複雑な言語を実装するのに苦労し、コンパイル時と実行時のパフォーマンスはどちらも遅く、ツールは原始的である傾向がありました。[22] コンパイラ ベンダーは、Ada 言語の取り組みのもう 1 つの新しい機能として要求された、大規模な言語適合性テストを行う、政府が義務付けたAda コンパイラ検証機能(ACVC) 検証スイートに合格することにほとんどの労力を費やしました。[23] 1975年から1983年に発祥したコンピュータハッカーのスラング辞典である The Jargon Fileは、Adaに関する項目で「それはまさに、そのような命令による承認を考えると予想されることです。委員会によって設計され、使いにくく、全体として悲惨な数十億ドルの無駄遣いです。Ada Lovelaceは、彼女の名前が最近使われたことにほぼ間違いなく青ざめることと思います。それについて言われた最も親切なことは、その巨大で巨大な塊の中から、おそらく抜け出そうと叫んでいる小さな良い言語があるということです。」と述べています。[24]
最初の検証済みAda実装はNYU Ada/Edトランスレータで、[25] 1983年4月11日に認定された。NYU Ada/Edは高級セット言語SETLで実装されている。[26] Alsys、TeleSoft、DDC-I、Advanced Computer Techniques、Tartan Laboratories、Irvine Compiler、TLD Systems、Verdixなど、いくつかの民間企業がAdaコンパイラと関連開発ツールの提供を開始した。[27]防衛、航空宇宙、または関連産業で重要なビジネスを展開しているコンピュータメーカーも、自社のプラットフォーム上でAdaコンパイラとツールを提供していた。これらには、Concurrent Computer Corporation、Cray Research、Inc.、Digital Equipment Corporation、Harris Computer Systems、Siemens Nixdorf Informationssysteme AGなどがある。[27]
1991年、米国国防総省はすべてのソフトウェアにAdaの使用を義務付け始めました(Ada義務)[28]が、この規則にはしばしば例外が認められました。[22] 国防総省のAda義務は、国防総省が市販の(COTS)技術を採用し始めたため、1997年に事実上廃止されました。[22]同様の要件は他のNATO諸国にも存在しました。Adaは指揮統制やその他の機能を含むNATOシステムに必須であり、スウェーデン、ドイツ、カナダなどの国では防衛関連のアプリケーションにAdaが義務付けられているか推奨されている言語でした。[29]
1980年代後半から1990年代初頭にかけて、Adaコンパイラのパフォーマンスは向上しましたが、ほとんどのリアルタイムプログラマが慣れ親しんだものとは異なるタスクモデルなど、Adaの能力を十分に活用するための障壁がまだありました。[23]
Ada の安全性重視のサポート機能により、Ada は軍事用途だけでなく、ソフトウェアのバグが深刻な結果をもたらす可能性がある商用プロジェクトにも使用されています。たとえば、航空電子工学や航空管制、アリアネ 4 や 5 などの商用ロケット、衛星やその他の宇宙システム、鉄道輸送、銀行などです。[16]たとえば、ボーイング 777のフライ・バイ・ワイヤシステム ソフトウェアである プライマリ フライト コントロール システムは、Ada で記述されています。また、空気力学的に不安定なユーロファイター タイフーン、[30]サーブ グリペン、[31]ロッキード マーティン F-22 ラプターのフライ・バイ・ワイヤ システムや、グラマン F-14 トムキャットの DFCS 代替フライト コントロール システムもAda で記述されています。カナダの自動航空交通システムは、 100 万行 ( SLOCカウント)の Ada で記述されています。 Adaは他の航空交通システムでも使用されており、例えば英国の次世代航空交通管制システムであるiFACTS(Interim Future Area Control Tools Support)はSPARK Adaを使用して設計・実装されている。[32] また、フランスのTGV高速鉄道システムのTVM車内信号システムや、パリ、ロンドン、香港、ニューヨークの地下鉄郊外電車でも使用されている。[16] [33]
標準化
年 | 通称 | ANSI規格 | ISO/IEC規格 |
---|---|---|---|
1980 | エイダ | ミリタリー標準1815 | — |
1983 | エイダ 83/87 | ミリタリースタンダード1815A | 8652:1987 |
1995 | エイダ95 | — | 8652:1995 |
2007 | エイダ 2005 | — | 8652:1995/改正1:2007 |
2012 | エイダ 2012 | — | 8652:2012 |
2023 | エイダ2022 | — | 8652:2023 |
予備的なAdaはACM Sigplan Notices Vol 14, No 6, June 1979に掲載されている[34]。
Ada は 1980 年にANSI規格 ANSI/ MIL-STD 1815として初めて発行されました。この最初のバージョンには多くの誤りや矛盾があったため[a]、改訂版は 1983 年に ANSI/MIL-STD 1815A として発行されました。それ以上の変更はなく、1987 年に ISO 規格となりました。[36]このバージョンの言語は、ANSI による採用日にちなんでAda 83としてよく知られていますが、 ISO による採用日にちなんでAda 87と呼ばれることもあります。 [37]フランス語訳もあり、DIN は 1988 年にこれを DIN 66268 としてドイツ語に翻訳しました。
Ada 95、ISO/IEC/ANSI共同標準ISO/IEC 8652:1995 [38] [39]は1995年2月に発行され、最初のISO標準オブジェクト指向プログラミング言語となりました。標準の改訂と将来の承認を支援するために、米国空軍はGNAT コンパイラの開発に資金を提供しました。現在、GNATコンパイラはGNUコンパイラコレクションの一部です。
Ada言語の技術的内容の改善と更新の作業は継続されている。Ada 95の技術的正誤表は2001年10月に発行され[40] [41]、主要な改正であるISO/IEC 8652:1995/Amd 1:2007 [42] [43]は2007年3月9日に発行され、新しい標準の作業がその年に終了したため 、一般にAda 2005と呼ばれている。
ストックホルムで開催された Ada-Europe 2012 会議で、Ada Resource Association (ARA) と Ada-Europe は、Ada 言語の最新バージョンの設計が完了し、リファレンス マニュアルが国際標準化機構(ISO)のISO/IEC JTC 1/SC 22 /WG 9と国際電気標準会議(IEC) に承認のために提出されたことを発表しました。ISO/IEC 8652:2012 [44] (Ada 2012 RM を参照) は 2012 年 12 月に発行され、Ada 2012として知られています。技術的な正誤表である ISO/IEC 8652:2012/COR 1:2016 が発行されました[45] (TC 1 の RM 2012 を参照)
2023年5月2日、Adaコミュニティはプログラミング言語標準のAda 2022版の発行が正式に承認されました。 [11]
Ada 83、95 などの名前にもかかわらず、法的には Ada 標準は 1 つだけ、つまり最後の ISO/IEC 標準の 1 つしかありません。新しい標準バージョンが承認されると、以前のバージョンは廃止されます。その他の名前は、特定のエディションを参照する非公式の名前にすぎません。
その他の関連規格には、ISO/IEC 8651 -3:1988情報処理システム - コンピュータ グラフィックス - グラフィカル カーネル システム (GKS) 言語バインディング - パート 3: Ada などがあります。
言語構成
Ada は、 if、then、else、while、forなどの予約語を使用した制御構造を特徴とするALGOLに似たプログラミング言語です。ただし、 Ada には、型定義、レコード、ポインタ、列挙など、元のALGOL 60には含まれていなかった多くのデータ構造化機能やその他の抽象化もあります。このような構造は、部分的に Pascal から継承されたか、 Pascalに触発されたものです。
Ada の「Hello, world!」
言語構文の一般的な例としては、Hello world プログラムがあります: (hello.adb)
Ada.Text_IOを使用;
手順 こんにちは
始める
Ada . Text_IO . Put_Line ( "Hello, world!" );
終わり こんにちは;
このプログラムは、無料で入手できるオープンソースコンパイラGNATを使用して、次のように実行することで コンパイルできます。
gnatmake hello.adb
データ型
Ada の型システムは、定義済みのプリミティブ型のセットに基づくものではなく、ユーザーが独自の型を宣言できるようになっています。この宣言は、型の内部表現に基づくものではなく、達成すべき目標の記述に基づいています。これにより、コンパイラは型に適したメモリ サイズを決定し、コンパイル時および実行時に型定義の違反 (範囲違反、バッファ オーバーラン、型の一貫性など) をチェックできます。Ada は、範囲で定義される数値型、モジュロ型、集約型 (レコードと配列)、および列挙型をサポートしています。アクセス型は、指定された型のインスタンスへの参照を定義します。型なしポインタは許可されません。言語によって提供される特別な型は、タスク型と保護型です。
たとえば、日付は次のように表されます。
タイプ Day_type の 範囲は1から31です 。
タイプ Month_type の 範囲は1から12です 。
タイプ Year_type の 範囲は1800から2100です 。
タイプ Hoursは mod 24です 。
曜日 のタイプは(月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日)です 。
日付 の種類は
記録
日 : Day_type ;
月 : Month_type ;
年 : Year_type ;
レコード終了;
重要な注意: Day_type、Month_type、Year_type、Hours は互換性のない型であるため、たとえば次の式は無効です。
今日: Day_type := 4 ;
現在の月: 月の種類 := 10 ;
... 今日 + 現在の月 ... -- 不正
定義済みのプラス演算子は同じ型の値のみを追加できるため、式は不正です。
サブタイプを宣言することで型を改良することができます。
サブタイプ Working_Hoursは 時間範囲0 .. 12です 。-- 1 日の労働時間は最大 12 時間です。
サブタイプ Working_Day は 、平日の範囲が月曜日から金曜日です 。-- 勤務日数
Work_Load : Working_Hoursの定数 配列( Working_Day ) -- 暗黙的な型宣言
:= (金曜日 => 6 、 月曜日 => 4 、 その他 => 10 ); -- 初期化された勤務時間の参照テーブル
型には、限定、抽象、プライベートなどの修飾子を付けることができます。プライベート型は内部構造を表示しません。制限型のオブジェクトはコピーできません。[46] Ada 95では、型のオブジェクト指向拡張のための機能がさらに追加されています。
制御構造
Ada は構造化プログラミング言語です。つまり、制御フローは標準ステートメントに構造化されています。すべての標準構造とディープレベルの早期終了がサポートされているため、サポートされている「go to」コマンドを使用する必要はほとんどありません。
-- a が b と等しくない間はループします。
while a /= b ループ
Ada . Text_IO . Put_Line ( "待機中" );
ループを終了します。
a > b の場合
Ada . Text_IO . Put_Line ( "条件が満たされました" );
それ以外
Ada . Text_IO . Put_Line ( "条件が満たされていません" );
終了の 場合;
for i in 1 .. 10 ループ
Ada.Text_IO.Put ( "反復: " ) ;
Ada.Text_IO.Put ( i ) ;
Ada . Text_IO . Put_Line ;
ループを終了します。
ループ
a := a + 1 ;
a = 10のときに 終了します。
ループを終了します。
ケース i は
0 の場合=> Ada.Text_IO.Put ( " zero " ) ;
1 の 場合= > Ada.Text_IO.Put ( " one " ) ;
2 の 場合= > Ada.Text_IO.Put ( " two " ) ;
-- case ステートメントは、考えられるすべてのケースをカバーする必要があります。
その他 => Ada.Text_IO.Put ( "上記のいずれでも ない" );
終了 ケース;
for aWeekday in Weekday '範囲 ループ -- 列挙をループします
Put_Line ( Weekday ' Image ( aWeekday ) ); -- 列挙体の文字列表現を出力します
aWeekday がWorking_Dayの 場合-- 列挙のサブタイプのチェック
Put_Line ( " を " に動作させる &
Working_Hours ' Image ( Work_Load ( aWeekday )) ); -- ルックアップ テーブルへのアクセス
終了の 場合;
ループを終了します。
パッケージ、プロシージャ、関数
Ada プログラムの各部分には、パッケージ、プロシージャ、関数があります。
関数は、値を返さなければならないという点で手続きとは異なります。関数呼び出しは「文として」使用することはできず、その結果は変数に割り当てられる必要があります。ただし、Ada 2012 以降、関数は純粋である必要はなく、適切に宣言されたパラメータやグローバル状態を変更することができます。[47]
例: パッケージ仕様 (example.ads)
パッケージの 例 は
数値 型の範囲は 1 から11です。
手順 Print_and_Increment ( j : in out Number );
例の終了;
パッケージ本体 (example.adb)
Ada.Text_IOを使用;
パッケージ 本体の 例 は
i : Number := Number '最初;
手順 Print_and_Increment ( j : in out Number ) は
関数 Next ( k : in Number ) 戻り 値 Number is
始める
k + 1を返します。
次へ終了;
始める
Ada . Text_IO . Put_Line ( "合計は: " & Number ' Image ( j ) );
j := 次へ ( j );
Print_and_Incrementを終了します。
-- パッケージが作成された時に実行されるパッケージ初期化
始める
while i < Number '最後の ループ
印刷と増分 ( i );
ループを終了します。
例の終了;
このプログラムは、例えば無料で入手できるオープンソースコンパイラGNATを使用して、次のように実行することで コンパイルできます。
gnatmake -z example.adb
パッケージ、プロシージャ、および関数は任意の深さにネストすることができ、それぞれが論理的に最も外側のブロックになることもできます。
各パッケージ、プロシージャ、または関数には、定数、型、変数、およびその他のプロシージャ、関数、パッケージの独自の宣言を含めることができ、これらは任意の順序で宣言できます。
プラグマ
プラグマはコンパイラに情報を伝達し、コンパイルされた出力の特定の操作を可能にするコンパイラディレクティブです。 [48] 一部のプラグマは言語に組み込まれていますが、[49]その他のプラグマは実装に固有です。
コンパイラ プラグマの一般的な使用例としては、実行時の型チェックや配列の添え字境界チェックなどの特定の機能を無効にしたり、関数呼び出しの代わりにオブジェクト コードを挿入するようにコンパイラに指示したりすることが挙げられます (C/C++ がインライン関数で行うように)。
ジェネリック
Ada は 1977 ~ 1980 年に初めて設計されて以来、ジェネリックを採用してきました。標準ライブラリは、ジェネリックを使用して多くのサービスを提供します。Ada 2005 では、C++ の標準テンプレート ライブラリにヒントを得た包括的なジェネリック コンテナ ライブラリが標準ライブラリに追加されています。
ジェネリックユニットとは、1つ以上のジェネリック形式パラメータを取るパッケージまたはサブプログラムである。[50]
ジェネリック形式パラメータは、値、変数、定数、型、サブプログラム、または別の指定されたジェネリック ユニットのインスタンスです。ジェネリック形式型の場合、構文は離散型、浮動小数点型、固定小数点型、アクセス (ポインタ) 型などを区別します。一部の形式パラメータには既定値を設定できます。
ジェネリック ユニットをインスタンス化する には、プログラマーは各形式ユニットの実際のパラメーターを渡します。ジェネリック インスタンスは、他のユニットと同じように動作します。たとえばループ内で、実行時にジェネリック ユニットをインスタンス化することができます。参照
- Ada コンパイラ
- APSE – Ada でのソフトウェア開発をサポートするプログラミング環境の仕様
- Ravenscar プロファイル– 安全性が重要なハードリアルタイムコンピューティング向けに設計された Ada タスク機能のサブセット
- SPARK – Ada の高度に制限されたサブセットで構成されるプログラミング言語で、望ましいコンポーネントの動作と個々のランタイム要件を記述するメタ情報が注釈として付けられています。
- VHDL、Adaベースのハードウェア記述言語
注記
- ^ Ada言語の変更の概要を参照[35]
- ^ 「Ada2012 Rationale」(PDF)adacore.com。2016年4月18日時点のオリジナルよりアーカイブ(PDF) 。 2018年5月5日閲覧。
- ^ 「Ada、C、C++ 向けの商用ソフトウェア ソリューション」。AdaCore。2023年4 月 4 日閲覧。
- ^ 「PTC ObjectAda」。PTC.com 。 2014年1月27日閲覧。
- ^ “MapuSoft Ada-C/C++ チェンジャー”. 2019年4月16日。
- ^ 「Ada 95 認定プロセッサ リスト – 詳細」。ada -auth.org。2023年4 月 4 日閲覧。
- ^ エイダの根拠、1986 年、23、70、110–114、137、165、236 ページ
- ^ 「Chapel spec (Acknowledgements)」(PDF)。Cray Inc. 2015-10-01。2022-10-09にオリジナルからアーカイブ(PDF) 。2016-01-14に取得。
- ^ “Drago”. 2020年9月14日時点のオリジナルよりアーカイブ。2018年8月6日閲覧。
- ^ 「The Griffin Project」. cs.nyu.edu . 2023年4月4日閲覧。
- ^ 「SparForte プログラミング言語」. www.sparforte.com 。2023 年4 月 4 日に取得。
- ^ ab Pinho, Luis Miguel (2023年6月). 「編集者のデスクから」. Ada Letters . XLIII (1). Association for Computing Machinery: 3. doi :10.1145/3631483 (非アクティブ 2024-09-11).
{{cite journal}}
: CS1 maint: DOIは2024年9月時点で非アクティブです(リンク) - ^ 「Adaプログラミング言語」ミシガン大学。2016年5月22日時点のオリジナルよりアーカイブ。2016年5月27日閲覧。
- ^ Fuegi, J; Francis, J (2003). 「ラブレースとバベッジと1843年の「ノート」の作成」「IEEEコンピューティング史年報. 25 (4): 16–26. doi :10.1109/MAHC.2003.1253887. S2CID 40077111.
- ^ 「並行性 – 第 6 章 – Ada 95 品質とスタイル ガイド」。adaic.org。2021年11 月 5 日閲覧。
- ^ Taft, S. Tucker; Olsen, Florence (1999-06-30). 「Ada はバグの少ないコードの作成に役立ちます」。Government Computer News。pp. 2–3。2015-08-31 時点のオリジナルからアーカイブ。2010-09-14に取得。
- ^ abc Feldman, Michael. 「Ada を使用しているのは誰ですか? Ada プログラミング言語で実現した実際のプロジェクト 2014 年 11 月」。SIGAda 教育ワーキング グループ。
- ^ ADA には安全な動的メモリ管理がない、Writing Linux Kernel Modules in Safe Rust – Geoffrey Thomas & Alex Gaynor、The Linux Foundation、2019-10-02
- ^ 「DoD – Strawman Requirements – April 1975」iment.com . 2023年4月4日閲覧。
- ^ 「John Goodenough | SEI スタッフプロフィール」 Sei.cmu.edu . 2014年1月27日閲覧。
- ^ CAR, Hoare (1981). 「The Emperor's Old Clothes」(PDF) . Communications of the ACM . 24(2). Association for Computing Machinery:75–83. doi:10.1145/358549.358561 . S2CID 97895. 2016年3月4日時点のオリジナルより アーカイブ(PDF) .
- ^ Watt, DA; Wichmann, BA; Findlay, W. (1987). Ada: 言語と方法論. Prentice-Hall.
- ^ abcd Sward, Ricky E. (2010 年 11 月)。「Ada の隆盛、衰退、そして持続」。SIGAda '10: ACM SIGAda 年次国際会議 SIGAda の議事録。pp. 71–74。doi : 10.1145 / 1879063.1879081。ISBN 978-1-4503-0027-8。
- ^ abc Rosen, JP. (2009年8月). 「Adaパラドックス」. Ada Letters . 24 (2). ACM SIGAda: 28–35. doi :10.1145/1620593.1620597. S2CID 608405.
- ^ 「これは JARGON FILE、バージョン 2.6.2 です」(TXT)。1991 年 2 月 14 日。2023 年 1 月 31 日閲覧。
- ^ SofTech Inc. (1983-04-11). 「Ada コンパイラ検証概要レポート: NYU Ada/ED、バージョン 19.7 V-001」。マサチューセッツ州ウォルサム。2012 年 3 月 12 日時点のオリジナルよりアーカイブ。2010年 12 月 16 日閲覧。
- ^ Dewar, Robert BK; Fisher, Gerald A. Jr.; Schonberg, Edmond; Froelich, Robert; Bryant, Stephen; Goss, Clinton F.; Burke, Michael (1980 年 11 月)。「NYU Ada トランスレータおよびインタープリタ」。Adaプログラミング言語に関する ACM-SIGPLAN シンポジウムの議事録 - SIGPLAN '80。第 15 巻。pp. 194–201。doi : 10.1145 /948632.948659。ISBN 0-89791-030-3. S2CID 10586359。
- ^ ab 「Ada 検証済みコンパイラ リスト」。Ada Information Clearinghouse。1992 年 7 月 1 日。pp. 1–36。
- ^ Ada Information Clearinghouse (1983-04-11). 「議会のAda義務」。2016年3月4日時点のオリジナルよりアーカイブ。2015年6月7日閲覧。
- ^ Babiak, Nicholas J. (1989). Ada、新しい国防総省兵器システムコンピュータ言語 – 万能薬か災難か(PDF)。Air University (米国空軍)。pp. 39–40。2019年12月15日時点のオリジナルよりアーカイブ(PDF)。
- ^ 「アジャイル思考」FlightGlobal 1999年6月16日。2021年4月15日時点のオリジナルよりアーカイブ。2024年2月13日閲覧。
- ^ Frisberg, Bo. 「グリペン飛行制御システムにおけるAdaの使用」(PDF)。Adaに関する特別利益団体。 2024年1月15日時点のオリジナルよりアーカイブ(PDF) 。 2024年2月13日閲覧。
- ^ AdaCore. 「GNAT Pro が英国の次世代 ATC システムに採用」。2010 年 12 月 24 日時点のオリジナルよりアーカイブ。2011 年 3 月 1 日閲覧。
- ^ AdaCore. 「Look Who's Using Ada」。2010 年 12 月 24 日時点のオリジナルよりアーカイブ。2011 年 3 月 1 日閲覧。
- ^ Ichbiah, JD (1979 年 6 月). 「ACM Sigplan Notices」. pp. 1–145. doi :10.1145/956650.956651.
- ^ Ada 言語の変更の概要
- ^ 「ISO 8652:1987」。ISO。2013年2月21日。 2024年1月19日閲覧。
- ^ 「Ada 83 LRM、フロントページ」。archive.adaic.com 。 2024年1月19日閲覧。
- ^ 「ISO/IEC 8652:1995」。ISO 。 2024年1月19日閲覧。
- ^ 「Ada 95 言語リファレンスマニュアル (オリジナル) – Ada Resource Association」。www.adaic.org。2024年 1 月 19 日閲覧。
- ^ ISO/IEC 8652:1995/Corr 1:2001
- ^ Ada 95 RM と TC 1
- ^ 「ISO/IEC 8652:1995/Amd 1:2007」。ISO 。 2024年1月19日閲覧。
- ^ 「Adaリファレンスマニュアル、ISO/IEC 8652:2007(E) Ed. 3」。www.adaic.org 。 2024年1月19日閲覧。
- ^ 「ISO/IEC 8652:2012」。ISO。2013年3月28日。 2024年1月19日閲覧。
- ^ 「ISO/IEC 8652:2012/Cor 1:2016」。ISO 。 2024年1月19日閲覧。
- ^ 「Ada Syntax Card」(PDF) 。 2011年7月6日時点のオリジナル(PDF)よりアーカイブ。 2011年2月28日閲覧。
- ^ 「サブプログラム」. learn.adacore.com . AdaCore . 2024年4月14日閲覧。
- ^ “Ada 83 LRM、セクション 2.8: プラグマ”.アーカイブ.adaic.com 。2014 年 1 月 27 日に取得。
- ^ 「Ada 83 LRM、付録/付録 B: 定義済み言語プラグマ」。Archive.adaic.com。2012 年 2 月 6 日時点のオリジナルよりアーカイブ。2014年 1 月 27 日閲覧。
- ^ 「Generic Units」. www.adaic.org . 2024年4月25日閲覧。
参考文献
国際基準
- ISO/IEC 8652 : 情報技術 - プログラミング言語 - Ada
- ISO/IEC 15291 : 情報技術 - プログラミング言語 - Ada セマンティック インターフェイス仕様 (ASIS)
- ISO/IEC 18009 : 情報技術 - プログラミング言語 - Ada: 言語プロセッサの適合性評価 (ACATS)
- IEEE 標準 1003.5b-1996、POSIX Ada バインディング
- Ada 言語マッピング仕様、CORBA インターフェース記述言語(IDL) から Ada へのマッピング
根拠
これらの文書は、印刷物を含むさまざまな形式で公開されています。
- Ichbiah, Jean D. ; Barnes, John GP; Firth, Robert J.; Woodger, Mike (1986)、「Ada プログラミング言語の設計の根拠」、2007 年 2 月 2 日にオリジナルからアーカイブapps.dtic.mil、pdfでも入手可能
- バーンズ、ジョン GP (1995)、Ada 95 の根拠: 言語: 標準ライブラリ
- ジョン・バーンズ (2006) [2005]、エイダ 2005 の理論的根拠
書籍
- Booch, Grady (1987)。Adaによるソフトウェア エンジニアリング。カリフォルニア州: The Benjamin/Cummings Publishing Company。ISBN 0-8053-0604-8。
- スカンスホルム、ヤン(1996)。Ada 95 From the Beginning。Addison -Wesley。ISBN 0-201-40376-5。
- ギルピン、ジェフ(1985年)。エイダ:ガイド付きツアーとチュートリアル。プレンティスホール。ISBN 978-0-13-004045-9。
- ジョン・バイドラー (1997)。データ構造とアルゴリズム: Ada を使用したオブジェクト指向アプローチ 95。スプリンガー・フェルラーク。ISBN 0-387-94834-1。
- ゴンザレス、ディーン W. (1991)。Adaプログラマーズ ハンドブック。ベンジャミン カミングス パブリッシング カンパニー。ISBN 0-8053-2529-8。
- Ben-Ari, M. (1998).ソフトウェアエンジニアのためのAda . John Wiley & Sons. ISBN 0-471-97912-0。
- コーエン、ノーマン (1996)。第二言語としての Ada。McGraw -Hill 科学/工学/数学。ISBN 0-07-011607-5。
- バーンズ、アラン、ウェリングス、アンディ(2001)。リアルタイムシステムとプログラミング言語。Ada 95 、リアルタイム Java、リアルタイム POSIX。Addison -Wesley。ISBN 0-201-72988-1。
- バーンズ、アラン、ウェリングス、アンディ(1995)。Adaの同時実行性。ケンブリッジ大学出版局。ISBN 0-521-62911-X。
- アトキンソン、コリン (1991)。オブジェクト指向の再利用、並行性、分散: Ada ベースのアプローチ。Addison- Wesley。ISBN 0-201-56527-7。
- Booch, Grady ; Bryan, Doug (1994). Ada によるソフトウェア エンジニアリング. Addison-Wesley. ISBN 0-8053-0608-0。
- Jones, Do -While (1989)。Ada in Action: 実践的なプログラミング例付き。John Wiley & Sons。ISBN 0-471-60708-8。
- Stubbs, Daniel; Webre, Neil W. (1993).抽象データ型と Ada によるデータ構造。Brooks Cole。ISBN 0-534-14448-9。
- Ledru, Pascal (1998 年 12 月)。保護されたオブジェクトを使用した Ada での分散プログラミング。Dissertation.com。ISBN 1-58112-034-6。
- カルウィン、フィンタン (1997)。エイダ、発達的アプローチ。プレンティス・ホール。ISBN 0-13-264680-3。
- English, John; Culwin, Fintan (1997 年 1 月)。Ada 95オブジェクト指向プログラミングの技法。Prentice Hall。ISBN 0-13-230350-7。
- Musser, David R.; Stepanov, Alexander (1989 年 10 月 24 日)。Ada汎用ライブラリ: 線形リスト処理パッケージ。Springer -Verlag。ISBN 0-387-97133-5。
- フェルドマン、マイケル B. (1997)。Ada 95 によるソフトウェア構築とデータ構造。Addison- Wesley。ISBN 0-201-88795-9。
- ジョンストン、サイモン (1997)。Ada 95 for C and C++ Programmers。Addison -Wesley。ISBN 0-201-40363-3。
- フェルドマン、マイケル B.、コフマン、エリオット B. ( 1992–1993 )。Ada : 問題解決とプログラム設計。Addison-Wesley。ISBN 0-201-52279-9。795ページ。
- フェルドマン、マイケル B. ; コフマン、エリオット B. (1999). Ada 95 . Addison-Wesley. ISBN 0-201-36123-X。
- Dale, Nell B. ; Weems, Chip; McCormick, John (1996 年 8 月)。Programming and Problem Solving with Ada 95。Jones & Bartlett Publishers。ISBN 0-7637-0293-5。
- Dale, Nell B. ; McCormick, John (2007)。Ada Plus データ構造: オブジェクト指向アプローチ、第 2 版。Jones & Bartlett Publishers。ISBN 978-0-7637-3794-8。
- Krell, Bruce C. (1992)。Adaによる開発:ライフサイクル メソッド。Bantam Dell Pub Group。ISBN 0-553-09102-6。
- ビショップ、ジュディ(1990 年 5 月 10 日)。Distributed Ada: 開発と経験。ケンブリッジ大学出版局。ISBN 0-521-39251-9。
- サンデン、ボー (1994)。Adaの例によるソフトウェア システム構築。プレンティス ホール。ISBN 0-13-030834-X。
- Hillam, Bruce (1994)。Adaを使用した抽象データ型入門。Prentice Hall。ISBN 0-13-045949-6。
- ラッド、デビッド (1994)。Adaによるソフトウェア設計と開発入門。ブルックス コール。ISBN 0-314-02829-3。
- Pyle, Ian C. (1991)。安全システムの開発: A Guide Using Ada。Prentice Hall。ISBN 0-13-204298-3。
- ベイカー、ルイス (1989)。『Ada による人工知能』。マグロウヒル。ISBN 0-07-003350-1。
- バーンズ、アラン、ウェリングス、アンディ(1995)。HRT -HOOD: ハードリアルタイム Ada システムの構造化設計法。ノースホランド。ISBN 0-444-82164-3。
- サヴィッチ、ウォルター、ピーターソン、チャールズ (1992)。Ada : プログラミングの芸術と科学への入門。ベンジャミン・カミングス出版。ISBN 0-8053-7070-6。
- ワイス、マーク・アレン(1993)。Adaにおけるデータ構造とアルゴリズム分析。ベンジャミン・カミングス出版。ISBN 0-8053-9055-3。
- レドガード、ヘンリー (1983)。Ada : 入門(第 2 版)。Springer- Verlag。ISBN 0-387-90814-5。
- ビョルナー、ダインズ。オエスト、オーレ N. 編(1980年)。エイダの正式な説明に向けて。ロンドン: Springer-Verlag。ISBN 3-540-10283-3。
さらに読む
- バーンズ、ジョン(2014)。Ada 2022 でのプログラミング。 ケンブリッジ大学出版局。ISBN 978-1-009-56477-9。
- バーンズ、ジョン(2014)。『Ada 2012 でのプログラミングと Ada 2022 のプレビュー』ケンブリッジ大学出版局。ISBN 978-1-009-18134-1。
- バーンズ、ジョン(2014)。『Ada 2012 でのプログラミング』ケンブリッジ大学出版局。ISBN 978-1-107-42481-4。
- バーンズ、ジョン(2006)。『Ada でのプログラミング 2005』。Addison- Wesley。ISBN 0-321-34078-7。
- バーンズ、ジョン(1991)。『Ada plus 言語リファレンス マニュアルによるプログラミング』。Addison-Wesley。ISBN 0-201-56539-0。
- バーンズ、ジョン(1998)。Ada 95 でのプログラミング。 Addison-Wesley。ISBN 0-201-34293-6。
- バーンズ、ジョン(1997)。高整合性エイダ:SPARKアプローチ。アディソン・ウェスレー。ISBN 0-201-17517-7。
- バーンズ、ジョン(2003)。『高信頼性ソフトウェア: 安全性とセキュリティへの SPARK アプローチ』。アディソン・ウェズリー。ISBN 0-321-13616-0。
外部リンク
- アダリソース協会
- DOD Ada プログラミング言語 (ANSI/MIL STD 1815A-1983) 仕様
- JTC1/SC22/WG9 ISO Ada 標準の本拠地
- Ada プログラミング言語資料、1981 ~ 1990 年。ミネソタ大学、チャールズ バベッジ研究所。