Ada(プログラミング言語)

エイダ
地平線にエイダの文字とスローガンが付いた緑色のロゴ
パラダイムマルチパラダイム:構造化命令型オブジェクト指向アスペクト指向[1] 同時実行配列分散ジェネリック手続き型メタ
家族パスカル
によって設計された
  • MIL-STD-1815、Ada 83:ジーン・イクビア
  • エイダ95:タッカー・タフト
  • エイダ 2005: タッカー タフト
  • エイダ 2012: タッカー タフト
初登場1980年2月; 43年前 ( 1980-02 )
安定版リリース
エイダ 2012 TC1 [2] [3]
タイピングの規律静的強力安全公称
OSマルチプラットフォームまたはクロスプラットフォーム
ファイル名の拡張子.adb、.ads
Webサイトwww.adaic.org
主な実装
AdaCore GNAT[4]
Green Hills Software Optimizing Ada 95 コンパイラー、
PTC ApexAda および ObjectAda、[5]
MapuSoft Ada-C/C++ チェンジャー、[6]以前は「AdaMagic with C Intermediate」として知られていました、[7]
DDC-Iスコア
方言
SPARKレイブンスカーのプロフィール
に影響を受けた
ALGOL 68PascalSimula 67[8] C++ (Ada 95)、Smalltalk (Ada 95)、Modula-2 (Ada 95) Java (Ada 2005)、Eiffel (Ada 2012)
影響を受け
C++Chapel[9] Drago、[10] DEiffel、 Griffin、[11] JavaNimParaSailPL/SQLPL/pgSQLPythonRubySeed7、 SPARforte、[12] SparkelSQL/ PSMVHDL
  • Wikibooks での Ada プログラミング

Adaは、 Pascalやその他の言語からインスピレーションを得た、構造化、静的型付け命令型、およびオブジェクト指向の 高レベル プログラミング言語です。Design by Contract (DbC)、非常に強力な型指定、明示的な同時実行性、タスク、同期メッセージ パッシング、保護されたオブジェクト、および非決定性に対する組み込みの言語サポートが備わっていますAda は、コンパイラを使用して実行時エラーを優先してエラーを検出することで、コードの安全性と保守性を向上させますAda は、国際技術標準であり、 国際標準化機構(ISO) および国際電気標準会議(IEC)。2020 年現在、非公式に Ada 2012 と呼ばれる規格[13]は ISO/IEC 8652:2012 です。[14]

Ada はもともと、1977 年から 1983 年まで米国国防総省(DoD)との契約に基づき、ハネウェル社のフランスのコンピュータ科学者 Jean Ichbiah率いるチームによって設計され、当時国防総省が使用していた 450 以上のプログラミング言語に取って代わるものでした。[15]エイダという名前は、最初のコンピューター プログラマーとして信じられているエイダ ラブレス(1815 ~ 1852 年) にちなんで命名されました。[16]

特徴

Ada は元々、組み込みシステムおよびリアルタイムシステム用に設計されました。Ada 95 リビジョンは、 1992 年から 1995 年にかけてIntermetricsの S. Tucker Taft によって設計され、システム、数値、財務、およびオブジェクト指向プログラミング(OOP) のサポートが向上しました。

Ada の機能には、強力な型指定モジュール型プログラミングメカニズム (パッケージ)、実行時チェック並列処理(タスク、同期メッセージ パッシング、保護オブジェクト、および非決定的選択ステートメント)、例外処理、およびジェネリックが含まれます。Ada 95 では、動的ディスパッチを含むオブジェクト指向プログラミングのサポートが追加されました。

Ada の構文では、基本的な操作を実行する方法の選択肢が最小限に抑えられており、記号 (「||」や「&&」など) よりも英語のキーワード (「or else」や「and then」など) が優先されます。Ada は基本的な算術演算子「+」、「-」、「*」、「/」を使用しますが、他の記号の使用は避けます。コード ブロックは、「declare」、「begin」、「end」などの単語で区切られます。ここで、「end」(ほとんどの場合)の後には、終了するブロックの識別子が続きます(例: if ... end ifループ ... ループを終了します)。条件付きブロックの場合、これにより、C や Java などの他の言語で間違ったネストされた if 式とペアになる可能性の ある未解決の else が回避されます。

Ada は、非常に大規模なソフトウェア システムを開発するために設計されています。Ada パッケージは個別にコンパイルできます。Ada パッケージ仕様 (パッケージ インターフェイス) は、一貫性をチェックする実装を行わずに個別にコンパイルすることもできます。これにより、実装を開始する前の設計段階の早い段階で問題を検出できるようになります。

他の言語では実行時まで検出できないバグや、ソース コードに明示的なチェックを追加する必要があるバグを回避するために、多数のコンパイル時チェックがサポートされていますたとえば、構文では、終了トークンの不一致によるエラーを防ぐために、明示的に名前を付けてブロックを閉じる必要があります。強い型付けを遵守することで、コンパイル時または実行時に多くの一般的なソフトウェア エラー (間違ったパラメータ、範囲違反、無効な参照、型の不一致など) を検出できます。同時実行性は言語仕様の一部であるため、コンパイラは場合によっては潜在的なデッドロックを検出できます。[17]コンパイラは通常、識別子のスペルミスもチェックします、パッケージの可視性、冗長な宣言などを確認し、エラーを修正する方法に関する警告と役立つ提案を提供できます。

Ada は、未割り当てメモリへのアクセス、バッファ オーバーフローエラー、範囲違反、オフバイワン エラー、配列アクセス エラー、その他の検出可能なバグを防ぐための実行時チェックもサポートしています。これらのチェックは、実行時の効率を考慮して無効にすることができますが、多くの場合、効率的にコンパイルできます。また、プログラムの検証を支援する機能も含まれていますこれらの理由により、Ada は、何らかの異常が事故による死亡、負傷、または重大な経済的損失などの非常に深刻な結果につながる可能性がある重要なシステムで広く使用されています。Ada が使用されるシステムの例には、航空電子工学航空交通管制鉄道などがあります。、銀行、軍事および宇宙技術[18] [19]

Ada の動的メモリ管理は高レベルでタイプセーフです。Ada には汎用ポインターや型なしポインターがありません。また、ポインタ型を暗黙的に宣言することもありません。代わりに、すべての動的なメモリ割り当てと割り当て解除は、明示的に宣言されたアクセス タイプを介して行われる必要があります。各アクセス タイプには、メモリ管理の低レベルの詳細を処理するストレージ プールが関連付けられています。プログラマは、デフォルトのストレージ プールを使用することも、新しいストレージ プールを定義することもできます (これは特にNon-Uniform Memory Accessに関連します)。すべて同じタイプを指定するが、異なるストレージ プールを使用する、いくつかの異なるアクセス タイプを宣言することも可能です。また、この言語はアクセシビリティ チェックを提供します。コンパイル時と実行時の両方で、アクセス値がそれが指すオブジェクトの型を超えて存続することがないようにします。[20]

言語のセマンティクスにより、アクセスできないオブジェクトの自動ガベージ コレクションが許可されていますが、リアルタイム システムで予測不可能な動作が発生する可能性があるため、ほとんどの実装ではデフォルトではサポートされていません。Ada は、限定された形式の領域ベースのメモリ管理をサポートします。また、ストレージ プールを創造的に使用すると、限定された形式の自動ガベージ コレクションを提供できます。これは、ストレージ プールを破棄すると、プール内のすべてのオブジェクトも破棄されるためです。

全角ダッシュに似た二重ダッシュ(「--」) は、コメント テキストを示します。コメントは行末で停止し、閉じられていないコメントが誤ってソース コードのセクション全体を無効にしてしまうのを防ぎます。コードのブロック全体を無効にするには、各行 (または列) の先頭に個別に「--」を付ける必要があります。ページの下に繰り返される「--」の列で無効化されたコードを明確に示しますが、これにより、大きなブロックの実験的な無効化/再有効化がより時間のかかるプロセスになります。

セミコロン (「;」) はステートメント終了文字であり、ヌルまたは操作なしのステートメントは ですnull;;終了ステートメントのない シングルは許可されません。

ほとんどのISO標準とは異なり、Ada 言語定義 ( Ada リファレンス マニュアル( ARM )、または言語リファレンス マニュアル( LRM)として知られる) は無料のコンテンツです。したがって、これは、Ada コンパイラを実装するプログラマだけでなく、Ada プログラマにとっても共通のリファレンスです。リファレンス マニュアルとは別に、言語設計とさまざまな言語構造の使用法を説明する広範な理論的根拠を示す文書もあります。このドキュメントはプログラマにも広く使用されています。文言が改訂されたとき、新しい理論的根拠の文書が作成されました。

多くの Ada プログラマーが Ada ソース コードの作成を支援するために使用している注目すべきフリー ソフトウェアツールの1 つは、GNAT Programming Studio、およびGNU Compiler Collectionの一部であるGNATです。

歴史

1970 年代、米国国防総省(DoD) は、組み込みコンピュータ システム プロジェクトで使用されているさまざまなプログラミング言語の数に懸念を抱きました。その多くは時代遅れかハードウェアに依存しており、安全なモジュラー プログラミングをサポートするものはありませんでした。1975 年に、英国国防省および英国国防省の要件に一般的に適したプログラミング言語を見つけたり作成したりすることで、この数を減らすことを目的としたワーキング グループ、High Order Language Working Group (HOLWG) が設立されました。オリジナルのわら人形の提案から始まる何度も繰り返した後[21]最終的なプログラミング言語は Ada と名付けられました。このようなプロジェクトで使用されている高級プログラミング言語の総数は、1983 年には 450 以上あったのですが、1996 年には 37 にまで減少しました。

HOLWG は、プログラミング言語が満たすべきと考えられる要件を記述した一連の文書であるSteelman 言語要件を作成しました。多くの既存言語が正式にレビューされましたが、チームは 1977 年に、既存の言語は仕様を満たしていないと結論付けました。

オーガスタ・エイダ・キング、ラブレス伯爵夫人。

新しいプログラミング言語の提案依頼が発行され、レッド (ベンジャミン・ブロスゴール率いるインターメトリックス)、グリーン (ジーン・イクビア率いるハネウェル)、ジョン・グッドイナフ率いるブルー (ジョン・グッドイナフ率いるソフテック) という名前で提案を開発するために 4 人の請負業者が雇われました。) [22]とイエロー ( SRI インターナショナル、ジェイ・スピッツェン率いる)。1978 年 4 月、国民の精査を経て、赤と緑の提案は次の段階に進みました。1979 年 5 月、ハネウェルのジーン・イクビアによって設計されたグリーン案が選ばれ、ラブレス伯爵夫人オーガスタ・エイダにちなんでエイダという名前が付けられましたこの提案はLIS言語の影響を受けましたイクビアと彼のグループが 1970 年代に開発したものです。予備的な Ada リファレンス マニュアルは、1979 年 6 月に ACM SIGPLAN Notices で公開されました。軍事規格リファレンス マニュアルは、1980 年 12 月 10 日 (エイダ ラブレスの誕生日) に承認され、エイダ ラブレスの誕生を記念して MIL-STD-1815 という番号が付けられました。年。1981年、CARホアはチューリング賞のスピーチを利用して、エイダは複雑すぎて信頼性が低いと批判したが[23]、その後エイダの教科書のために書いた序文で撤回したようだ。[24]

Ada は、初期の頃にプログラミング コミュニティ全体から大きな注目を集めました。その支援者や他の人々は、それが防衛関連の作業だけでなく、汎用プログラミングでも主流の言語になるかもしれないと予測しました。[25] Ichbiah は、10 年以内にプログラミング言語は Ada とLispの 2 つだけになるだろうと公に述べました[26] 初期の Ada コンパイラーは、大規模で複雑な言語の実装に苦労し、コンパイル時と実行時の両方のパフォーマンスが遅くなり、ツールも原始的な傾向がありました。[25]コンパイラ ベンダーは、政府が要求する大規模な言語準拠テストのAda コンパイラ検証機能に 合格するためにほとんどの努力を費やしました。(ACVC) Ada 言語の取り組みの別の新しい機能で必要とされた検証スイート。[26] 1975 年から 1983 年にかけて誕生したコンピュータハッカーのスラング辞書である「 ジャーゴン ファイル」は、Ada に関するエントリで次のように述べています。使用、そして全体的には悲惨な数十億ドルの暴れ者...エイダ ラブレス...彼女の名前が後になって利用されたことにほぼ確実に青面になるだろう;それについて言われた最も親切なことは、おそらくあるということだその巨大な象のような塊の中から出て行こうと叫んでいる、優れた小さな言語だ。」[27]

最初に検証された Ada 実装は、1983 年 4 月 11 日に認定された NYU Ada/Ed トランスレータ[28]でした。NYU Ada/Ed は、高水準セット言語SETLで実装されています。[29] AlsysTeleSoftDDC-IAdvanced Computer TechniquesTartan Laboratories、 Irvine Compiler、TLD SystemsVerdixなど、いくつかの営利企業が Ada コンパイラーと関連開発ツールの提供を開始しました[30]防衛、航空宇宙、または関連産業で重要なビジネスを展開していたコンピューター メーカーも、自社のプラットフォーム上で Ada コンパイラーとツールを提供していました。これらには、 Concurrent Computer CorporationCray Research, Inc.Digital Equipment CorporationHarris Computer Systems、およびSiemens Nixdorf Informationssysteme AGが含まれます。[30]

1991 年に、米国国防総省はすべてのソフトウェアに対して Ada の使用を要求し始めました ( Ada 命令) [31]が、この規則には例外が認められることがよくありました。[25] 国防総省の Ada 指令は、国防総省が商用既製 ( COTS ) 技術を採用し始めたため、1997 年に事実上削除されました。[25]他のNATO諸国にも同様の要件が存在しました。Ada は指揮統制やその他の機能を含む NATO システムに必要であり、スウェーデン、ドイツ、カナダなどの国々では、Ada が防衛関連アプリケーションに必須または推奨される言語でした。[32]

1980 年代後半から 1990 年代前半までに、Ada コンパイラーのパフォーマンスは向上しましたが、ほとんどのリアルタイム プログラマーが慣れ親しんでいるものとは異なるタスク モデルなど、Ada の能力を最大限に活用するには依然として障壁がありました。[26]

Ada のセーフティ クリティカルなサポート機能により、現在では軍事用途だけでなく、ソフトウェアのバグが重大な結果をもたらす可能性がある商業プロジェクト (アビオニクスや航空交通管制アリアン 4 や 5などの商用ロケットなど)でも使用されています。 衛星およびその他の宇宙システム、鉄道輸送および銀行業務。[19] たとえば、ボーイング 777のフライバイワイヤシステム ソフトウェアである飛行機情報管理システムはAda で書かれています。[33] [34]ハネウェル航空輸送システム によって開発DDC-Iのコンサルタントとの協力により、これは民間または軍事を問わず、Ada プロジェクトの中でおそらく最も有名なものになりました。[33] [34]カナダの自動航空交通システムは 100 万行の Ada ( SLOCカウント) で記述されました。これは、高度な分散処理、分散 Ada データベース、およびオブジェクト指向設計を特徴としていました。Ada は他の航空交通システムでも使用されており、たとえば、英国の次世代 Interim Future Area Control Tools Support (iFACTS) 航空交通管制システムは、SPARK Ada を使用して設計および実装されています。[35]フランスの TVMのTGVの運転台信号システム でも使用されています。高速鉄道システム、パリ、ロンドン、香港、ニューヨーク市の地下鉄郊外電車です。[19] [36]

標準化

暫定的な Ada は、ACM Sigplan Notices Vol 14、No 6、1979 年 6 月に記載されています。

Ada は 1980 年にANSI標準 ANSI/MIL-STD 1815として初めて発行されました。この最初のバージョンには多くのエラーと矛盾があったため (Ada 言語変更の概要を参照)、改訂版は 1983 年に ANSI/MIL-STD 1815A として発行されました。 。それ以上の変更は行われず、1987 年に ISO 規格、ISO 8652:1987 になりました。このバージョンの言語は、ANSI での採用日から一般にAda 83として知られていますが、 ISO での採用日からAda 87とも呼ばれます。これは Ada 83 リファレンス マニュアルです。フランス語の翻訳もあります。DIN は 1988 年にこれを DIN 66268 としてドイツ語に翻訳しました。

ISO/IEC/ANSI 共同規格である Ada 95 は、ISO/IEC 8652:1995 (Ada 95 RM を参照) が 1995 年 2 月に発行され、初の ISO 標準オブジェクト指向プログラミング言語になりました標準の改訂と将来の受け入れを支援するために、米国空軍はGNAT コンパイラーの開発に資金を提供しました現在、GNAT コンパイラーはGNU コンパイラー コレクションの一部です。

Ada 言語の技術内容の改善と更新の作業が続けられています。Ada 95の技術的修正は2001 年 10 月に発行され、ISO/IEC 8652:1995/Corr 1:2001 (Ada 95 RM with TC 1 を参照)、および主要な修正である ISO/IEC 8652:1995/Amd 1:2007 ( Ada 2005 RM を参照) は 2007 年 3 月 9 日に発行されました。新しい規格の作業がその年に完了したため 、一般にAda 2005として知られています。

ストックホルムで開催された Ada-Europe 2012 カンファレンスで、Ada Resource Association (ARA) と Ada-Europe は、Ada 言語の最新バージョンの設計が完了し、リファレンス マニュアルを ISO/IEC JTC 1/に提出したことを発表しました国際標準化機構(ISO) および国際電気標準会議(IEC)のSC 22 /WG 9 の承認を得ます。ISO/IEC 8652:2012 (Ada 2012 RM を参照) は、Ada 2012として知られる 2012 年 12 月に発行されました。技術的な正誤表が ISO/IEC 8652:2012/COR 1:2016 として発行されました (RM 2012 with TC 1 を参照)。

Ada 83、95 などの名前にもかかわらず、法的にはAda規格は 1 つだけ、つまり最後の ISO/IEC 規格の 1 つだけです。新しい規格バージョンが受け入れられると、以前の規格は廃止されます。他の名前は、特定のエディションを指す非公式の名前にすぎません。

その他の関連規格には、「ISO/IEC 8651 -3:1988情報処理システム - コンピューター グラフィックス - グラフィカル カーネル システム (GKS) 言語バインディング - パート 3: Ada」などがあります

言語構造

Ada は、ifthenelsewhileforなどの予約語を含む制御構造を特徴とするALGOLに似たプログラミング言語です。ただし、Ada には、型定義レコードポインタ列挙など、元のALGOL 60には含まれていない多くのデータ構造化機能やその他の抽象化機能もあります。このような構造は、部分的にPascalから継承、または Pascal からインスピレーションを得たものです

"こんにちは世界!" エイダで

言語の構文の一般的な例は、 Hello world プログラムです: (hello.adb)

 Ada.Text_IOを使用します
手順 こんにちは _
始める
   エイダText_IO Put_Line  ( "こんにちは、世界!" );
終了 こんにちは;

このプログラムは、無料で利用できるオープンソース コンパイラGNATを使用してコンパイルできます。次のコマンドを実行します。

gnatmake  hello.adb

データ型

Ada の型システムは、事前定義されたプリミティブ型のセットに基づいていませんが、ユーザーが独自の型を宣言できるようにしています。この宣言は、型の内部表現に基づいているのではなく、達成すべき目標の記述に基づいています。これにより、コンパイラは型に適したメモリ サイズを決定し、コンパイル時および実行時に型定義の違反 (範囲違反、バッファ オーバーラン、型の一貫性など) をチェックできるようになります。Ada は、範囲によって定義された数値型、モジュロ型、集計型 (レコードと配列)、および列挙型をサポートします。アクセス タイプは、指定されたタイプのインスタンスへの参照を定義します。型なしポインターは許可されません。言語によって提供される特別なタイプは、タスク タイプと保護されたタイプです。

たとえば、日付は次のように表すことができます。

type  Day_typeの   範囲は1 31です         
type  Month_typeの 範囲 1から12です        
type  Year_typeの  範囲 1800 から2100です   
type 時間は mod 24です  
type 平日  (月曜日 火曜日 水曜日 木曜日金曜日、土曜日日曜日) ;   

タイプ 日付 
   記録
        :  Day_type ;
      :  Month_type ;
       :  Year_type ;
   終了レコード;

重要な注意点: Day_type、Month_type、year_type、Hours は互換性のない型です。つまり、たとえば次の式は不正です。

今日:  Day_type  :=  4 ;
現在の月: 月のタイプ :=  10 ;
... 今日 +  Current_Month  ...   -- 不正です

事前定義されたプラス演算子は同じ型の値のみを追加できるため、式は無効です。

タイプは、サブタイプを宣言することで絞り込むことができます

サブタイプ Working_Hoursは 時間範囲0から12です -- 1 日の労働時間は最大 12 時間                
サブタイプ Working_Dayは 平日範囲月曜日から金曜日です -- 出勤日数       

Work_Load :  Working_Hours定数 配列( Working_Day )  -- 暗黙的な型宣言   
   :=  (金曜日 =>  6  月曜日 =>  4  その他 =>  10 );            -- 初期化による労働時間のルックアップ テーブル

型には、限定、抽象、プライベートなどの修飾子を付けることができます。プライベート型は内部構造を示しません。限られた種類のオブジェクトはコピーできません。[37] Ada 95 では、型のオブジェクト指向拡張のための機能がさらに追加されています。

制御構造

Ada は構造化プログラミング言語です。つまり、制御の流れが標準ステートメントに構造化されています。すべての標準構造と深いレベルの早期終了がサポートされているため、同様にサポートされている「go to」コマンドを使用する必要はほとんどありません。

-- a が b に等しくない間、ループします。
while  a  /=  b ループ
  エイダText_IO Put_Line  ( "待機中" );
 ループを終了します

 a  >  b 場合
  エイダText_IO Put_Line  ( "条件が満たされました" );
それ以外
  エイダText_IO Put_Line  ( "条件が満たされていません" );
終了の 場合;

for  i  in  1  ..  10 ループ
  エイダText_IO Put  ( "反復: " );
  エイダText_IO ( i )を入れます 
  エイダText_IO Put_Line ;
 ループを終了します

ループ
  a  :=  a  +  1 ;
   a = 10の場合に 終了します  
 ループを終了します

 私が そうなった場合
   0  => エイダの場合Text_IO ( "ゼロ" )を入れます ;
   1  => エイダの場合Text_IO ( "1" )を入れます 
   2  => エイダの場合Text_IO ( "2" )を入れます 
  -- case ステートメントは、考えられるすべてのケースをカバーする必要があります。
    => エイダの場合Text_IO Put  ( "上記のどれでもない" );
終了 ケース;

for  aWeekday  in  Weekday ' Range ループ               -- 列挙型をループします
   Put_Line  ( 平日'画像( aWeekday )  );          -- 列挙型の出力文字列表現
   if  aWeekday  in  Working_Day  then                -- 列挙型のサブタイプをチェックする
      Put_Line  (  " で機能する "  &
               Working_Hours ' Image  ( Work_Load ( aWeekday ))  );  -- ルックアップ テーブルへのアクセス
   終了の 場合;
 ループを終了します

パッケージ、プロシージャ、関数

Ada プログラムの一部には、パッケージ、プロシージャ、関数があります。

例:パッケージ仕様書(example.ads)

パッケージの  
     type  Numberの 範囲 1から11です   
     プロシージャ Print_and_Increment  ( j : in  out  Number );
 ; _

パッケージ本体 (example.adb)

 Ada.Text_IOを使用します
パッケージ 本体の  は次のとおりです

  i  : 数値 := 数値'最初;

  プロシージャ Print_and_Increment  ( j : in  out  Number ) 

    関数 Next  ( k : in  Number )  return  Number  is
    始める
       k  +  1を返します
    終了 次へ;

  始める
    エイダText_IO Put_Line  (  "合計は次のとおりです: "  &  Number ' Image ( j )  );
    j  := 次へ ( j );
   Print_and_Incrementを終了します

-- パッケージのエラボレート時に実行されるパッケージの初期化
始める
  while  i  <  Number '最後の ループ
    Print_and_Increment  ( i );
   ループを終了します
 ; _

このプログラムは、たとえば、無料で利用できるオープンソース コンパイラGNATを使用して、次のコマンドを実行することで コンパイルできます。

gnatmake  -z  example.adb

パッケージ、プロシージャ、および関数は任意の深さまでネストでき、それぞれを論理的な最も外側のブロックにすることもできます。

各パッケージ、プロシージャ、または関数には、定数、型、変数、およびその他のプロシージャ、関数、およびパッケージの独自の宣言を含めることができ、これらは任意の順序で宣言できます。

同時実行性

Ada には、タスクベースの同時実行の言語サポートがあります。Ada の基本的な同時実行ユニットは、組み込みの制限されたタイプであるtaskです。タスクは 2 つの部分で指定されます。タスク宣言はタスク インターフェイスを定義し (型宣言と同様)、タスク本体はタスクの実装を指定します。実装に応じて、Ada タスクはオペレーティング システムのスレッドまたはプロセスにマップされるか、Ada ランタイムによって内部的にスケジュールされます。

タスクには、同期 (同期メッセージ パッシングの形式) 用のエントリを含めることができます。タスクエントリはタスク仕様で宣言されます。各タスク エントリには、タスク本体内に1 つ以上のacceptステートメントを含めることができます。タスクの制御フローが accept ステートメントに到達すると、そのタスクは、対応するエントリが別のタスクによって呼び出されるまでブロックされます (同様に、呼び出しタスクは、呼び出されたタスクが対応する accept ステートメントに到達するまでブロックされます)。タスク エントリにはプロシージャと同様のパラメータを含めることができ、タスクが同期的にデータを交換できるようになります。selectステートメントと組み合わせて、 accept ステートメントにガードを定義することができます(ダイクストラのガード コマンドと同様)。

Ada は、相互排他のための保護されたオブジェクトも提供します。保護されたオブジェクトはモニターに似た構造ですが、シグナリングに条件変数の代わりにガードを使用します (条件付きクリティカル領域と同様)。保護されたオブジェクトは、データのカプセル化とモニターからの安全な相互排除、および条件付きクリティカル領域からのエントリーガードを組み合わせます。従来のモニターに対する主な利点は、シグナリングに条件変数が必要ないため、不正なロック セマンティクスによる潜在的なデッドロックが回避されることです。タスクと同様に、保護オブジェクトは組み込みの限定型であり、宣言部分と本体もあります。

保護されたオブジェクトは、カプセル化されたプライベート データ (保護されたオブジェクト内からのみアクセス可能) と、相互に排他的であることが保証されているプロシージャ、関数、およびエントリで構成されます (関数は例外で、副作用がないことが要求されます)。したがって、他の機能と同時に実行できます)。保護オブジェクトを呼び出すタスクは、同じ保護オブジェクト内で別のタスクが現在実行されている場合はブロックされ、この他のタスクが保護オブジェクトから離れると解放されます。ブロックされたタスクは、到着時間順に保護オブジェクトのキューに入れられます。

保護オブジェクトのエントリはプロシージャに似ていますが、さらにガードがあります。ガードが false と評価した場合、呼び出しタスクはブロックされ、そのエントリのキューに追加されます。保護オブジェクト内で現在実行中のタスクがないため、保護オブジェクトに別のタスクを許可できるようになります。ガードの評価が変更される可能性があるのはこの時だけであるため、ガードはタスクが保護されたオブジェクトを離れるたびに再評価されます。

エントリへの呼び出しは、同じ署名を持つ他のエントリのキューに再度入れることができます。再度キューに入れられたタスクはブロックされ、ターゲット エントリのキューに追加されます。これは、保護されたオブジェクトが解放され、別のタスクの許可が許可されることを意味します。

Ada のselectステートメントを使用すると、非ブロッキング エントリ呼び出しを実装し、エントリの非決定的選択 (ガード付き)、タイムアウト、および中止を受け入れることができます。

次の例は、Ada での同時プログラミングのいくつかの概念を示しています。

 Ada.Text_IOを使用します Ada.Text_IOを使用します 

手順 トラフィック 

   type  Airplane_IDの 範囲は1です 10 ; -- 飛行機 10 機              

   タスク タイプ 飛行機 ( ID : Airplane_ID );         -- ID を初期化パラメータとして持つ飛行機を表すタスク
   type  Airplane_Accessは 飛行機へのアクセスです -- 飛行機への参照タイプ      

   保護された タイプの 滑走路                      -- 共有滑走路 (同時アクセスを許可するために保護されています)
      エントリ Assign_Aircraft  ( ID : Airplane_ID );   -- すべてのエントリは相互に排他的であることが保証されます
      エントリ Cleared_Runway  ( ID : Airplane_ID );
      エントリ Wait_For_Clear ;
   プライベート
      クリア: ブール値 :=  True ;                    -- 保護された個人データ - 一般的には単なるフラグ以上のものです...
    滑走路終了;
   type  Runway_Access  すべてのRunwayにアクセスします  

   -- 航空管制官タスクは離陸と着陸のリクエストを受け取ります
   タスク タイプ コントローラー ( My_Runway : Runway_Access ) 
      -- 同期メッセージ パッシングのタスク エントリ
      エントリ Request_Takeoff  ( ID : in  Airplane_ID ; 離陸: out  Runway_Access );
      エントリ Request_Approach ( ID : in  Airplane_ID ;  Approach : out  Runway_Access );
   エンド コントローラー;

   -- インスタンスの割り当て
   Runway1     : 別名 Runway ;               -- 滑走路をインスタンス化します
   コントローラー 1 : コントローラー (滑走路 1 'アクセス);  -- およびそれを管理するコントローラー

   ------ 上記の型の実装 ------
   保護された 身体 滑走路 
      エントリ Assign_Aircraft  ( ID : Airplane_ID )
  Clear    -- エントリ ガードの場合、条件が true になるまで呼び出しタスクはブロックされます。
      始める
       クリア :=  False ;
       Put_Line  ( Airplane_ID '画像 ( ID )  &  " 滑走路上 " );
      終了;

      エントリ Cleared_Runway  ( ID : Airplane_ID )
  クリアない 場合は 
      始める
         クリア :=  True ;
         Put_Line  ( Airplane_ID '画像 ( ID )  &  " 滑走路が空になった " );
      終了;

      エントリ Wait_For_Clear
  クリア とき
      始める
         null ;       -- ここでは何もする必要はありません。タスクは「Clear」が true の場合にのみ入力できます。
      終了;
    滑走路終了;

   タスク 本体の コントローラー 
   始める
      ループ
         私の滑走路Wait_For_Clear ;    -- 滑走路が利用可能になるまで待ちます (通話をブロック)
         select                       -- 2 種類のリクエスト (最初に実行可能な方) を待ちます。
            when  Request_Approach ' count  =  0  =>   -- ガード ステートメント - Request_Approach でキューにタスクが存在しない場合にのみ受け入れます
             accept  Request_Takeoff  ( ID :  in  Airplane_ID ; 離陸:  out  Runway_Access )
             do                                  -- 同期部分の開始
               私の滑走路Assign_Aircraft  ( ID );   -- 滑走路を予約します (保護オブジェクトがビジーまたはエントリ ガードが false の場合、通話をブロックする可能性があります)
               離陸 :=  My_Runway ;             -- 飛行機にどの滑走路を伝えるために「out」パラメータ値を割り当てます
              Request_Takeoffを終了します               -- 同期部分の終わり
         または
            accept  Request_Approach  ( ID :  in  Airplane_ID ;  Approach :  out  Runway_Access )  do
               私の滑走路Assign_Aircraft  ( ID );
               アプローチ :=  My_Runway ;
             Request_Approachを終了します
         または                          -- 呼び出し可能なタスクが残っていない場合は終了します
            終了します
         終了 選択;
       ループを終了します
   終了;

   タスク 本体の 飛行機 
      Rwy  : 滑走路_アクセス;
   始める
      コントローラー1 . Request_Takeoff  ( ID ,  Rwy );  -- この呼び出しは、コントローラー タスクが受け入れて受け入れブロックを完了するまでブロックされます。
      Put_Line  ( Airplane_ID '画像 ( ID )  &  " 離陸中..." );
      遅延 2.0 ;
      リュイCleared_Runway  ( ID );                -- Rwy の "Clear" が false になり、保護されたオブジェクト内に他のタスクが存在しないため、呼び出しはブロックされません。
      遅延 5.0 ;  -- ちょっと飛び回って…
      ループ
         選択   -- 滑走路をリクエストしてみます
            コントローラー1 . Request_Approach  ( ID ,  Rwy );  -- これはブロッキング呼び出しです - コントローラが受け入れブロックに到達すると実行され、完了時に戻ります
            終了します -- 呼び出しが返された場合、着陸は可能です - 選択ブロックを離れて続行します...
         または
            遅延 3.0 ;   -- タイムアウト - 3 秒以内に応答がない場合は、別の処理を実行します (次のブロックのすべて)
            Put_Line  ( Airplane_ID '画像 ( ID )  &  " 保持パターン" );   -- 単にメッセージを出力するだけです
         終了 選択;
       ループを終了します
      遅延 4.0 ;   -- 着陸進入を行います...
      Put_Line  ( Airplane_ID '画像 ( ID )  &  " タッチダウン!" );
      リュイCleared_Runway  ( ID );   -- ここで作業が完了したことを滑走路に通知します。
   終了;

   New_Airplane : 飛行機_アクセス;

始める
   for  I  in  Airplane_ID ' Range ループ  -- いくつかの飛行機タスクを作成します
      New_Airplane  := 新しい 飛行機 ( I );  -- 作成後すぐに実行を開始します
      遅延 4.0 ;
    ループを終了します
 トラフィックを終了します

プラグマ

プラグマは、コンパイルされた出力の特定の操作を可能にする情報をコンパイラーに伝えるコンパイラー ディレクティブです。[38] 特定のプラグマは言語に組み込まれていますが、[39]他のプラグマは実装固有です。

コンパイラ プラグマの一般的な使用例としては、実行時の型チェックや配列添字境界チェックなどの特定の機能を無効にすることや、(C/C++ がインライン関数で行うように) 関数呼び出しの代わりにオブジェクト コードを挿入するようにコンパイラに指示することが挙げられます。)。

ジェネリック

Ada には 1977 ~ 1980 年に最初に設計されて以来、ジェネリック医薬品が存在します。標準ライブラリはジェネリックを使用して多くのサービスを提供します。Ada 2005 は、C++ の標準テンプレート ライブラリからインスピレーションを得た、包括的な汎用コンテナ ライブラリを標準ライブラリに追加します。

汎用ユニットは、 1 つ以上の汎用仮パラメータを取るパッケージまたはサブプログラムです

汎用仮パラメータは、値、変数、定数、型、サブプログラム、または別の指定された汎用ユニットのインスタンスです。汎用形式型の場合、構文は離散、浮動小数点、固定小数点、アクセス (ポインタ) 型などを区別します。一部の形式パラメータにはデフォルト値を設定できます。

汎用ユニットをインスタンス化する には、プログラマは各形式の実際のパラメータを渡します。その後、汎用インスタンスは他のユニットと同様に動作します。実行時に、たとえばループ内で汎用ユニットをインスタンス化することが可能です。

こちらも参照

  • APSE – Ada でのソフトウェア開発をサポートするプログラミング環境の仕様
  • Ravenscar プロファイル– セーフティ クリティカルなハード リアルタイム コンピューティング用に設計された Ada タスク機能のサブセット
  • SPARK – 高度に制限された Ada のサブセットで構成され、望ましいコンポーネントの動作と個々のランタイム要件を説明するメタ情報で注釈が付けられたプログラミング言語

参考文献

  1. ^ 「Ada2012 理論的根拠」(PDF) . アダコア.com2016 年 4 月 18 日のオリジナルからアーカイブ(PDF) 2018 年5 月 5 日に取得
  2. ^ “ISO によって発行された Ada 2012 の技術的正誤表”. エイダリソース協会。2016-01-29 2016 年 2 月 23 日に取得
  3. ^ 「統合 Ada 2012 言語リファレンス マニュアル」. ADA 適合性評価機関。2016-03-03 のオリジナルからアーカイブ2016 年 2 月 23 日に取得
  4. ^ "Ada、C、および C++ 用の商用ソフトウェア ソリューション". アダコア2023 年4 月 4 日に取得
  5. ^ “PTC ObjectAda”. PTC.com 2014 年 1 月 27 日に取得
  6. ^ “MapuSoft Ada-C/C++ チェンジャー”. 2019年4月16日。
  7. ^ "Ada 95 認定プロセッサー リスト - 詳細". ada-auth.org 2023 年4 月 4 日に取得
  8. ^ エイダの根拠、1986 年、23、70、110–114、137、165、236 ページ
  9. ^ 「チャペル仕様書(謝辞)」(PDF) . 株式会社クレイ 2015-10-01。2022-10-09 にオリジナルからアーカイブ(PDF)されました2016 年 1 月 14 日に取得
  10. ^ 「ドラゴ」。2020-09-14 のオリジナルからアーカイブされました2018-08-06に取得
  11. ^ 「グリフィンプロジェクト」. cs.nyu.edu 2023 年4 月 4 日に取得
  12. ^ 「SparForte プログラミング言語」. www.sparforte.com 2023 年4 月 4 日に取得
  13. ^ ジャック・ガンスル (2013-05-29). 「Ada Resource Association – Ada プログラミング言語のニュースとリソース」。Adaic.org 2013 年 6 月 14 日に取得
  14. ^ "ISO/IEC 8652:2012 情報技術 - プログラミング言語 - Ada". 国際標準化機構2012 年 12 月 23 日に取得
  15. ^ 「Ada プログラミング言語」. ミシガン大学2016 年 5 月 22 日にオリジナルからアーカイブされました2016 年5 月 27 日に取得
  16. ^ Fuegi、J; フランシス、J (2003)。「ラブレスとバベッジと1843年の「メモ」の作成". IEEE Annals of the History of Computing . 25 (4): 16–26. doi :10.1109/MAHC.2003.1253887. S2CID  40077111.
  17. ^ "同時実行 - 第 6 章 - Ada 95 品質とスタイル ガイド". adaic.org 2021 年11 月 5 日に取得
  18. ^ タフト、S. タッカー; オルセン、フィレンツェ (1999-06-30)。「Ada はバグの少ないコードを量産するのに役立ちます。」政府のコンピュータニュース。2~3ページ。2015-08-31 のオリジナルからアーカイブ2010 年 9 月 14 日に取得
  19. ^ abc フェルドマン、マイケル. 「誰がエイダを使っているの?」SIGADA教育ワーキンググループ。
  20. ^ ADA には安全な動的メモリ管理はありません、「安全な Rust で Linux カーネル モジュールを書く - Geoffrey Thomas & Alex Gaynor」、The Linux Foundation、2019 年 10 月 2 日
  21. ^ "国防総省 - ストローマン要件 - 1975 年 4 月". イメント.com 2023 年4 月 4 日に取得
  22. ^ “ジョン・グッドイナフ | SEI スタッフプロフィール”. Sei.cmu.edu 2014 年 1 月 27 日に取得
  23. ^ CAR、ホア(1981)。「皇帝の古着」(PDF)ACM の通信コンピューティング機械協会24 (2): 75–83。土井: 10.1145/358549.358561S2CID 97895。2022年 10 月 9 日にオリジナルから アーカイブ(PDF) 。
  24. ^ ワット、DA; ウィッチマン、BA; フィンドレー、W. (1987)。エイダ: 言語と方法論プレンティス・ホール。
  25. ^ abcd スワード、リッキー E. (2010 年 11 月)。「エイダの隆盛、衰退、そして持続」。SIGAda '10: SIGAda に関する ACM SIGAda 年次国際会議の議事録。71–74ページ。土井:10.1145/1879063.1879081。
  26. ^ abc ローゼン、JP. (2009 年 8 月)。「エイダのパラドックス」。エイダの手紙ACMシガダ。24 (2): 28–35。土井:10.1145/1620593.1620597。S2CID  608405。
  27. ^ 「これは専門用語ファイル、バージョン 2.6.2」(TXT)1991 年 2 月 14 日2023-01-31に取得
  28. ^ ソフテック株式会社 (1983-04-11)。「Ada コンパイラー検証概要レポート: NYU Ada/ED、バージョン 19.7 V-001」。マサチューセッツ州ウォルサム 2012 年 3 月 12 日にオリジナルからアーカイブされました2010 年 12 月 16 日に取得
  29. ^ デュワー、ロバート BK; フィッシャー、ジェラルド・A・ジュニア。エドモンド・シェーンバーグ。ロバート・フローリッヒ; ブライアント、スティーブン。ゴス、クリントン F. バーク、マイケル(1980年11月)。「ニューヨーク大学エイダの翻訳者および通訳者」。Ada プログラミング言語に関する ACM-SIGPLAN シンポジウムの議事録 - SIGPLAN '80Vol. 15. 194 ~ 201 ページ。土井:10.1145/948632.948659。ISBN 0-89791-030-3S2CID  10586359。
  30. ^ ab 「Ada 検証済みコンパイラ リスト」。エイダ情報クリアリングハウス。1992 年 7 月 1 日。1 ~ 36 ページ。
  31. ^ Ada Information Clearinghouse (1983-04-11)。「議会のAda命令」。2016-03-04 のオリジナルからアーカイブ2015 年 6 月 7 日に取得
  32. ^ バビアク、ニコラス J. (1989)。Ada、新しい国防総省兵器システムのコンピュータ言語 – 万能薬か災難か(PDF)航空大学 (米国空軍)39-40ページ。2019 年 12 月 15 日のオリジナルからアーカイブ(PDF) 。
  33. ^ ab レーマー、カール (2009). 「HADSチーム」。ステルマンでは、アンドリュー。ジェニファー・グリーン(編)。美しいチーム: ベテラン チーム リーダーからの刺激的かつ警告的な物語カリフォルニア州セバストポル:オライリー。299–312ページ。
  34. ^ ab ウルフ、アレクサンダー (2004 年 10 月)。「エイダにはまだ命が残っている」。ACM キュー2 (7):28-31。土井: 10.1145/1035594.1035608
  35. ^ エイダコア。「英国の次世代 ATC システムに GNAT Pro が選ばれました」。2010 年 12 月 24 日にオリジナルからアーカイブされました2011 年 3 月 1 日に取得
  36. ^ エイダコア。「誰がエイダを使っているか見てください」。2010 年 12 月 24 日にオリジナルからアーカイブされました2011 年 3 月 1 日に取得
  37. ^ 「Ada 構文カード」(PDF) . 2011 年 7 月 6 日のオリジナル(PDF)からアーカイブ2011 年2 月 28 日に取得
  38. ^ “Ada 83 LRM、セクション 2.8: プラグマ”. アーカイブ.adaic.com 2014 年 1 月 27 日に取得
  39. ^ "Ada 83 LRM、付録/付録 B: 事前定義された言語プラグマ". アーカイブ.adaic.com。2012 年 2 月 6 日にオリジナルからアーカイブされました2014 年 1 月 27 日に取得

国際規格

理論的根拠

これらの文書は、印刷物を含むさまざまな形式で発行されています。

  • ジャン・D・イクビア; バーンズ、ジョンGP。ファース、ロバート J. Woodger, Mike (1986)、Ada プログラミング言語の設計の理論的根拠、オリジナルの 2007 年 2 月 2 日よりアーカイブapps.dtic.mil、pdf も利用可能
  • Barnes、John GP (1995)、Ada 95 の理論的根拠: 言語: 標準ライブラリ
  • ジョン・バーンズ (2006) [2005]、エイダ 2005 の理論的根拠

  • ブーチ、グレイディ(1987)。Ada によるソフトウェア エンジニアリングカリフォルニア: ベンジャミン/カミングス出版社。ISBN 0-8053-0604-8
  • スカンスホルム、1 月 (1996 年)。エイダ 95 最初からアディソン・ウェスリー。ISBN 0-201-40376-5
  • ジェフ、ギルピン (1985)。Ada: ガイド付きツアーとチュートリアルプレンティスホール。ISBN 978-0-13-004045-9
  • ジョン・バーンズ(2006)。Ada 2005 でのプログラミングアディソン・ウェスリー。ISBN 0-321-34078-7
  • ジョン・バーンズ(1991)。Ada plus 言語リファレンス マニュアルのプログラミングアディソン・ウェスリー。ISBN 0-201-56539-0
  • ジョン・バーンズ(1998)。Ada 95 でのプログラミングアディソン・ウェスリー。ISBN 0-201-34293-6
  • ジョン・バーンズ(1997)。高整合性 Ada: SPARK アプローチアディソン・ウェスリー。ISBN 0-201-17517-7
  • ジョン・バーンズ(2003)。高信頼性ソフトウェア: 安全性とセキュリティに対する SPARK アプローチアディソン・ウェスリー。ISBN 0-321-13616-0
  • ジョン・バイドラー (1997)。データ構造とアルゴリズム: Ada を使用したオブジェクト指向アプローチ 95スプリンガー・フェルラーク。ISBN 0-387-94834-1
  • ゴンザレス、ディーン W. (1991)。Ada プログラマーズ ハンドブックベンジャミン・カミングス出版社。ISBN 0-8053-2529-8
  • ベンアリ、M. (1998)。ソフトウェアエンジニアのためのAdaジョン・ワイリー&サンズ。ISBN 0-471-97912-0
  • コーエン、ノーマン (1996)。第二言語としてのエイダマグロウヒル科学/工学/数学。ISBN 0-07-011607-5
  • アラン・バーンズ; アンディ、ウェリングス(2001)。リアルタイム システムとプログラミング言語。Ada 95、リアルタイム Java およびリアルタイム POSIXアディソン・ウェスリー。ISBN 0-201-72988-1
  • アラン・バーンズ; アンディ、ウェリングス(1995)。Ada の同時実行性ケンブリッジ大学出版局。ISBN 0-521-62911-X
  • アトキンソン、コリン (1991)。オブジェクト指向の再利用、同時実行性、分散: Ada ベースのアプローチアディソン・ウェスリー。ISBN 0-201-56527-7
  • ブーチ、グレイディ; ダグ・ブライアン (1994)。Ada によるソフトウェア エンジニアリングアディソン・ウェスリー。ISBN 0-8053-0608-0
  • ジョーンズ、ドゥ・ホワイル (1989)。Ada in Action: 実践的なプログラミング例付きジョン・ワイリー&サンズ。ISBN 0-471-60708-8
  • スタッブス、ダニエル。ウェブレ、ニール W. (1993)。抽象データ型と Ada を使用したデータ構造ブルックス・コール。ISBN 0-534-14448-9
  • ルドリュ、パスカル(1998年12月)。保護されたオブジェクトを使用した Ada での分散プログラミング論文.com。ISBN 1-58112-034-6
  • カルウィン、フィンタン (1997)。エイダ、発達的アプローチプレンティス・ホール。ISBN 0-13-264680-3
  • イングリッシュ、ジョン。カルウィン、フィンタン(1997 年 1 月)。Ada 95 オブジェクト指向プログラミングの技術プレンティス・ホール。ISBN 0-13-230350-7
  • マッサー、デビッド R. アレクサンダー・ステパノフ(1989年10月24日)。Ada 汎用ライブラリ: 線形リスト処理パッケージスプリンガー・フェルラーク。ISBN 0-387-97133-5
  • フェルドマン、マイケル B. (1997)。Ada 95 によるソフトウェア構築とデータ構造アディソン・ウェスリー。ISBN 0-201-88795-9
  • ジョンストン、サイモン (1997)。C および C++ プログラマー向けの Ada 95アディソン・ウェスリー。ISBN 0-201-40363-3
  • フェルドマン、マイケル・B. コフマン、エリオット B. (1992–1993)。エイダ: 問題解決とプログラム設計アディソン・ウェスリー。ISBN 0-201-52279-9795ページ。
  • マイケル・B・フェルドマン; コフマン、エリオット B. (1999)。エイダ 95アディソン・ウェスリー。ISBN 0-201-36123-X
  • ネル・B・デール; ウィームズ、チップ。ジョン・マコーミック(1996年8月)。Ada 95 によるプログラミングと問題解決ジョーンズ&バートレット出版社。ISBN 0-7637-0293-5
  • ネル・B・デール; ジョン・マコーミック (2007)。Ada Plus データ構造: オブジェクト指向アプローチ、第 2 版ジョーンズ&バートレット出版社。ISBN 978-0-7637-3794-8
  • クレル、ブルース C. (1992)。Ada を使用した開発: ライフサイクル メソッドバンタム・デル・パブ・グループ。ISBN 0-553-09102-6
  • ジュディ司教(1990年5月10日)。分散 Ada: 開発と経験ケンブリッジ大学出版局。ISBN 0-521-39251-9
  • サンデン、ボー (1994)。Ada でのソフトウェア システム構築の例プレンティス・ホール。ISBN 0-13-030834-X
  • ヒラム、ブルース (1994)。Ada を使用した抽象データ型の概要プレンティス・ホール。ISBN 0-13-045949-6
  • ラッド、デヴィッド (1994)。Ada を使用したソフトウェア設計と開発の概要ブルックス・コール。ISBN 0-314-02829-3
  • イアン・C・パイル(1991年)。安全システムの開発: Ada を使用したガイドプレンティス・ホール。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)。エイダ: 序論(第 2 版)。スプリンガー・フェルラーク。ISBN 0-387-90814-5
  • ビョルナー、ダインズ。オエスト、オーレN.編。(1980年)。エイダの正式な説明に向けてロンドン: Springer-Verlag。ISBN 3-540-10283-3

アーカイブ

  • Ada プログラミング言語資料、1981 ~ 1990 年。ミネソタ大学チャールズ・バベッジ研究所。Ada 言語用に設計されたソフトウェア製品に関する資料が含まれます。Ada 9X プロジェクト報告書、技術報告書、研究報告書、ニュースレターなどの米国政府出版物。ユーザーグループ情報。

外部リンク

  • Ada - C/C++ チェンジャー - MapuSoft
  • DOD Ada プログラミング言語 (ANSI/MIL STD 1815A-1983) 仕様
  • JTC1/SC22/WG9 ISO の Ada 規格の本拠地
  • Curlieの Ada (プログラミング言語)