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

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
エイダ
パラダイムマルチパラダイム構造化された命令型のオブジェクト指向
家族パスカル
によって設計された
  • MIL-STD-1815、Ada 83:Jean Ichbiah
  • エイダ95:タッカータフト
  • エイダ2005:タッカータフト
  • エイダ2012:タッカータフト
初登場1980年2月; 41年前 (1980-02
安定リリース
Ada 2012 TC1 [1] [2]
規律の入力静的強力安全主格
OSマルチプラットフォームまたはクロスプラットフォーム
ファイル名拡張子.adb、.ads
Webサイトwww .adaic .org
主要な実装
AdaCore GNAT(無料ダウンロード:https//www.adacore.com/download )、
Green Hills Software Optimizing Ada 95コンパイラ、
PTC、 Inc。PTCApexAdaおよびPTCObjectAda、[3]
「MapuSoftAda-C / C ++チェンジャー」、以前は「AdaMagic with C Intermediate」として知られていた、[4]
DDC-Iスコア
方言
SPARKRavenscarプロフィール
に影響を受けた
ALGOL 68PascalSimula 67[5] C ++(Ada 95)、Smalltalk(Ada 95)、Modula-2(Ada 95)Java(Ada 2005)、Eiffel(Ada 2012)
影響を受ける
C ++チャペル[6] 「ドラゴ」2020-09-14にオリジナルからアーカイブされました201886日取得Dエッフェル「グリフィン」JavaNimParaSailPL / SQLPL / pgSQLPythonRubySeed7"SPARforte"SparkelSQL / PSMVHDL

Adaは、構造化され静的に型付けされ命令型で、オブジェクト指向 の高水準プログラミング言語でありPascalや他の言語から拡張されています。契約による設計(DbC)、非常に強い型付け、明示的な同時実行、タスク、同期メッセージパッシング、保護されたオブジェクト、および非決定性に対する言語サポートが組み込まれています。 Adaは、コンパイラー使用して実行時エラーを優先してエラーを見つけることにより、コードの安全性と保守性を向上させます。 Adaは国際 技術標準であり、国際標準化機構(ISO)、および国際電気標準会議(IEC)。2020年の時点で、非公式にAda2012と呼ばれる規格[7]はISO / IEC 8652:2012です。[8]

Adaは元々、1977年から1983年にかけて米国国防総省(DoD)と契約し、当時DoDで使用されていた450以上のプログラミング言語に取って代わるために、CII HoneywellBullのフランスのコンピューター科学者 JeanIchbiah率いるチームによって設計されました[9]エイダは、最初のコンピュータープログラマーとして認められたエイダラブレス(1815–1852)にちなんで名付けられました[10]

機能

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

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

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

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

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

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

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

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

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

セミコロン( ";")はステートメントターミネーターであり、nullまたはno-operationステートメントはnull;です。;終了するステートメントのないシングルは許可されていません。

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

多くのAdaプログラマーがAdaソースコードの記述を支援するために使用している注目すべきフリーソフトウェアツールの1つは、GNUコンパイラコレクションの一部であるGNATプログラミングスタジオです。

歴史

1970年代、米国国防総省(DoD)は、組み込みコンピュータシステムプロジェクトに使用されているさまざまなプログラミング言語の数に懸念を抱きました。その多くは廃止されたか、ハードウェアに依存し、安全なモジュラープログラミングをサポートするものはありませんでした。 1975年、ワーキンググループ高次言語ワーキンググループ(HOLWG)は、発見や部門のとのために、一般的に適切なプログラミング言語作成することで、この数を減らすために意図して形成された英国国防省の要件を。オリジナルのストローマンの提案から始まる多くの反復の後最終的なプログラミング言語はAdaと名付けられました。このようなプロジェクトで使用されている高級プログラミング言語の総数は、1983年の450以上から1996年には37に減少しました。

HOLWGワーキンググループは、Steelman言語要件を作成しました。これは、プログラミング言語が満たすべきと感じた要件を示す一連のドキュメントです。多くの既存の言語が正式にレビューされましたが、チームは1977年に、仕様を満たす既存の言語はないと結論付けました。

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

新しいプログラミング言語の提案のリクエストが発行され、4人の請負業者が雇われて、Red(Benjamin Brosgolが率いるIntermetrics)、Green(CII Honeywell BullJean Ichbiahが率いる)、Blue(SofTech、が率いるの名前で提案を作成しました。 John Goodenough)[14]およびYellow(SRI International、Jay Spitzenが率いる)。 1978年4月、公の精査の後、赤と緑の提案は次の段階に移りました。 1979年5月、CII HoneywellBullのJeanIchbiahによって設計されたGreen提案が選ばれ、Adaという名前が付けられました。これはLovelace伯爵夫人のAugustaAdaにちなんでいます。この提案は、LISという言語の影響を受けましたIchbiahと彼のグループが1970年代に開発したこと。予備のエイダリファレンスマニュアルは1979年6月にACMSIGPLAN Noticesに掲載されました。軍用規格リファレンスマニュアルは1980年12月10日(エイダラブレスの誕生日)に承認され、エイダラブレスの誕生を記念して番号MIL-STD-1815が付けられました。年。 1981年、CAR Hoareチューリング賞のスピーチを利用して、エイダが過度に複雑で信頼性が低いことを批判しましたが[15]、その後、エイダの教科書のために書いた序文で撤回したようです。[16]

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

最初に検証されたAdaの実装は、1983年4月11日に認定されたNYU Ada / Edトランスレータ[19]でした。NYUAda / Edは高レベルのセット言語SETLで実装されています。[20]いくつかの市販の企業には、エイダのコンパイラおよび関連する開発ツールの提供を開始しましたAlsysTeleSoftDDC-I 高度なコンピュータ技術タータン・ラボラトリーズTLDシステム、およびVerdix[21]

1991年に、米国国防総省はすべてのソフトウェアにAda(Adaの委任の使用を要求し始めましたが[22]、この規則の例外がしばしば認められました。[17] DoDが市販の(COTS)技術を採用し始めたため、国防総省のAdaの任務は1997年に事実上削除されました[17]他のNATO諸国にも同様の要件がありました。Adaはコマンドアンドコントロールやその他の機能を含むNATOシステムに必要であり、Adaはスウェーデン、ドイツ、カナダなどの国の防衛関連アプリケーションに義務付けられた、または優先される言語でした。[23]

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

Adaのセーフティクリティカルなサポート機能により、現在では軍事用途だけでなく、ソフトウェアのバグが深刻な結果をもたらす可能性のある商業プロジェクト、たとえば航空電子工学航空交通管制Ariane4や5などの商業ロケットにも使用されています。衛星およびその他の宇宙システム、鉄道輸送および銀行。[12] たとえばボーイング777フライバイワイヤシステムソフトウェアである飛行機情報管理システムは、エイダで作成されました。[24] [25] Honeywell Air TransportSystems によって開発されましたDDC-Iのコンサルタントと協力して、民間または軍のAdaプロジェクトの中で間違いなく最もよく知られるようになりました。[24] [25]カナダの自動航空交通システムは、100万行のAda(SLOCカウント)で記述されていました。高度な分散処理、分散Adaデータベース、およびオブジェクト指向設計を特徴としていました。エイダは、例えば、英国の次世代暫定今後のエリアコントロールツールのサポート(iFACTS)航空管制システムが使用して設計および実装され、他の航空交通システムで使用されSPARKエイダを。[26] TGVのフランスの TVM車内信号システムで も使用されています高速鉄道システム、およびパリ、ロンドン、香港、ニューヨーク市のメトロ郊外列車。[12] [27]

標準化

この言語は1983年にANSI規格になりANSI / MIL-STD 1815A)、フランス語に翻訳した後、英語を変更せずに1987年にISO規格なりました(ISO-8652:1987)。このバージョンの言語は、ANSIで採用された日から一般にAda 83として知られていますが、ISOで採用された日からAda87と呼ばれることもあります。

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

Ada言語の技術コンテンツの改善と更新に取り組んできました。Ada 95の技術正誤表は2001年10月に発行され、主要な修正であるISO / IEC 8652:1995 / Amd 1:20072007年3月9日に発行されました。ストックホルムで開催されたAda-Europe 2012会議で、Ada Resource Association (ARA)とAda-Europeは、Ada言語の最新バージョンの設計が完了し、承認のためにリファレンスマニュアルを国際標準化機構(ISO)に提出​​したことを発表しました。ISO / IEC 8652:2012は2012年12月に公開されました。[8]

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

言語構成

Adaは、ALGOLに似たプログラミング言語であり、ifthenelsewhileforなどの予約語を含む制御構造を備えていますただし、Adaには型定義レコードポインター列挙など、元のALGOL60には含まれていなかった多くのデータ構造化機能やその他の抽象化もありますこのような構成は、Pascalから部分的に継承されたか、Pascalに触発されました

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

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

 Ada.Text_IO ;  Ada.Text_IOを使用し ます; 
手順 こんにちは 
始まる
   をPut_Line  「!こんにちは、世界」); 
終了 こんにちは

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

gnatmake hello.adb

データ型

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

たとえば、日付は次のように表されます。

タイプ Day_type    範囲    1  ..    31 ;
タイプ Month_type  範囲    1  ..    12 ;
タイプ Year_typeは  ある 範囲 1800  ..  2100 ;
 営業時間は ある のmod  24 
タイプ 平日  月曜日 火曜日 水曜日 木曜日 金曜日 土曜日 日曜日);

type  Date  is 
   record 
     Day     Day_type ; 
       Month_type ; 
        Year_type ; 
   終了レコード;

タイプは、サブタイプを宣言することで改良できます

サブタイプ Working_Hours  時間 範囲 0  ..  12 ;             -1日最大12時間の作業
サブタイプ Working_Day は、 月曜日..金曜日の平日の 範囲 です-働く日数     

Work_Load  定数 配列Working_Day   Working_Hours   -暗黙の型宣言
   :=  金曜日 =>  6  月曜日 =>  4  他人 =>  10 );            -初期化を伴う労働時間のルックアップテーブル

タイプには、limited、abstract、privateなどの修飾子を含めることができます。プライベートタイプにはアクセスのみが可能で、リミテッドタイプは、それらを定義するパッケージのスコープ内でのみ変更またはコピーできます。[28] Ada 95は、型のオブジェクト指向拡張のための機能をさらに追加します。

制御構造

Adaは構造化プログラミング言語です。つまり、制御の流れは標準のステートメントに構造化されています。また、「サポートの使用してすべての標準的な構築物および深いレベルの早期終了は、サポートされているに行くコマンドは」ほとんど必要ありません。

--aがbと等しくない間、ループします。
一方  / =  bは Adaをループします
  Text_IO Put_Line "待機中" ); ループの終了; 
 

場合 > bはその後、エイダをText_IO Put_Line "条件が満たされました" );そうでなければエイダText_IO Put_Line "条件が満たされていません" );終了する場合;   
   

   
 

以下のための 私は  1  ...  10 ループ
  エイダText_IO Put  "反復:" ); 
  エイダText_IO 置く i ); 
  エイダText_IO Put_Line ; 
ループの終了 ;

ループ
  a  :=  a  +  1 ; 
  a = 10のときに終了  ます。ループの終了;  
 

ケース i 
   0  =>  Adaの場合です。Text_IO Put  "zero" ); 
  とき 1  => エイダText_IO Put  "one" ); 
  とき 2  => エイダText_IO Put  "two" ); 
  --caseステートメントは、考えられるすべてのケースをカバーする必要があります:
  when  others  =>  Ada Text_IO Put  "上記のどれでもない" ); 
エンド ケース;

for  aWeekday  in  Weekday '範囲 ループ               -列挙型をループします
   Put_Line   Weekday ' Image aWeekday  );          -列挙の出力文字列表現
   であれば aWeekday  Working_Day そして               -列挙のサブタイプのチェック
      をPut_Line   「のための仕事に」 
               Working_Hours "画像 Work_Load aWeekday )) );  -ルックアップテーブルへのアクセスは次の
   場合に終了し ます; 終わり
 ループ;

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

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

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

パッケージ  
     タイプです 番号  範囲 1 です ..11 ; 
     プロシージャ Print_and_Increment  j in  out  Number ); 
例を終了し ます;

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

 Ada.Text_IO ; 
パッケージ 本体  

  i   番号 := 番号'最初;

  プロシージャ Print_and_Increment  j in  out  Number  

    function  Next  k in  Number  return  Number  is 
    begin 
      return  k  +  1 ; 
    次を終了 ;

  
    エイダを開始しますText_IO Put_Line   "合計は:"   ナンバー"画像J  ); 
    j  := 次へ j ); 
  Print_and_Incrementを終了し ます;

-パッケージが作成されたときに実行されるパッケージの初期化は
i < Number 'の最後のループで開始
   ますPrint_and_Increment i ); ループの終了; 例を終了します;   
     
   
 

このプログラムは、自由に利用できるオープンソースのコンパイラの使用により、例えば、コンパイルすることができますGNATを実行することで、

gnatmake -z example.adb

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

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

並行性

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

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

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

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

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

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

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

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

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

手順 トラフィック 

   タイプ Airplane_ID  範囲 1です10 ;              -10機の飛行機

   タスク タイプ 飛行機 ID Airplane_ID );         -初期化パラメータとしてIDと、飛行機を表すタスク
   タイプ Airplane_Accessが ある アクセス 飛行機     -飛行機への参照型

   保護された タイプの 滑走路                      -共有滑走路(同時アクセスを許可するために保護されています)
      エントリ Assign_Aircraft  ID Airplane_ID );   -すべてのエントリは、相互に排他的な保証されている
      エントリ Cleared_Runway  ID Airplane_ID )。
      エントリ Wait_For_Clear ; 
   private 
      Clear  Boolean  :=  True ;                    -保護されたプライベートデータ-一般的には旗だけではありません...
   滑走路を終了し ます; タイプRunway_Accessすべてアクセスです
        滑走路;

   -航空管制官タスクは離陸および着陸
   タスク タイプの 要求を受け取りますコントローラー My_Runway Runway_Access  
      -同期メッセージパッシング
      エントリ Request_Takeoff  ID in  Airplane_ID ;  Takeoff out  Runway_Access );の
      タスクエントリですエントリ Request_Approach ID in  Airplane_ID ; アプローチout  Runway_Access );
   エンド コントローラー;

   -インスタンスの割り当て
   Runway1      エイリアス化された Runway ;               -インスタンス化滑走路
   Controller1  コントローラ Runway1 アクセス)。 -そしてそれを管理するコントローラー

   ------上記のタイプの実装------
   保護された ボディ 滑走路 
      エントリ Assign_Aircraft  ID Airplane_ID )であり
  Clear    -エントリガード-条件が真に
      なる
       まで呼び出しタスクはブロックされます 。 =  False ; 
       Put_Line  Airplane_ID 画像 ID   "滑走路に" );
      終了;

      エントリ Cleared_Runway  ID Airplane_ID 
 クリアされていない場合 開始クリア:= True ; Put_Line Airplane_ID 画像ID "クリア滑走路" ); 終了;  
      
           
             
      

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

   タスク 本体 コントローラー 
   開始
      ループ
         My_Runwayです。Wait_For_Clear ;    -滑走路が使用可能になるまで待機が(ブロッキング呼び出しが)
         選択                      -待機を2つのタイプの要求のために(最初の実行可能な方)
            とき Request_Approach "のカウント =  0  =>   -ガード文が- Request_Approachにキューイングタスクがない場合にのみ受け入れる
             受け入れます Request_Takeoff  ID   Airplane_ID ; テイクオフ アウト Runway_Access 
                                              -同期一部の開始
               My_Runway Assign_Aircraft  ID );   -滑走路を予約します(保護されたオブジェクトがビジーまたはエントリーガードがfalseの場合、呼び出しをブロックする可能性があります)
               離陸 :=  My_Runway ;             -「out」パラメータ値を割り当てて、どの滑走路が
             終了 するかを飛行機に通知しますRequest_Takeoff ;                -同期部の端
         または
            受け入れる Request_Approach  ID   Airplane_ID ; アプローチ アウト Runway_Access  やる
               My_RunwayをAssign_Aircraft  ID );
               アプローチ :=  My_Runway ; 
            Request_Approachを終了し ます;
         または                          -terminateを呼び出すことができるタスクが残っていない場合は
            終了します。
         選択を終了し ます;
      ループの終了 ;終了;
   

   タスク  飛行機が ある
      Rwy   Runway_Access 
   Controller1を開始し
      ますRequest_Takeoff  ID  Rwy );  -このコールブロックコントローラタスクが受け入れ、完了するまで受け入れるブロック
      をPut_Line  Airplane_ID 画像 ID   『...離陸』);
      遅延 2.0 ;
      滑走路Cleared_Runway  ID );                --Rwyの「Clear」がfalseになり、保護されたオブジェクト内に他のタスクが存在しないため、呼び出しはブロックされません
      遅延 5.0 ;  -少し飛び回る...
      ループ
         選択   -滑走路
            Controller1を要求してみてくださいRequest_Approach  ID  Rwy );  -これは、ブロッキング呼出しです-ブロックを受け入れ、完了に戻り到達コントローラ上で実行される
            出口 -コールが返された場合、着陸の準備ができています-選択ブロックを離れて続行します...
         または
            3.0を遅らせ ます。-タイムアウト- 3秒で応答がない場合、(次のブロックですべて)何かを行うをPut_Line Airplane_ID 画像ID   
                "待機パターンで" );   -単にメッセージプリント
         終了を 選択します
      ループの終了 ; 遅延4.0 ; -着陸進入は...んをPut_LineはAirplane_ID 画像ID "タッチダウン!" ); 滑走路Cleared_Runway ID ); -ここで完了したことを滑走路に通知します。終了;
         
          
         
   

   New_Airplane  Airplane_Access ;


   Airplane_ID範囲ループ I  開始ます-いくつかの飛行機タスクを作成しますNew_Airplane := new Airplane I ); -作成遅延4.0の直後に実行を開始します。ループの終了; 終了トラフィック;   
           
       
    
 

プラグマ

プラグマは、コンパイルされた出力の特定の操作を可能にするためにコンパイラに情報を伝達するコンパイラ指令です。[29] 特定のプラグマは言語に組み込まれていますが[30]、他のプラグマは実装固有です。

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

ジェネリックス

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

一般的なユニットは、パッケージまたは1つ以上のかかるサブプログラムであるジェネリック仮パラメータを

ジェネリック仮パラメータは、値、変数、定数、タイプ、サブプログラム、または別のインスタンスも、指定された、一般的な手段です。ジェネリック形式の型の場合、構文は離散型、浮動小数点型、固定小数点型、アクセス(ポインター)型などを区別します。一部の形式パラメーターはデフォルト値を持つことができます。

ジェネリックユニットインスタンス化するために、プログラマーは各フォーマルの実際のパラメーターを渡します。ジェネリックインスタンスは、他のユニットと同じように動作します。実行時に、たとえばループ内でジェネリックユニットをインスタンス化することができます。

も参照してください

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

参考文献

  1. ^ 「ISOによって発行されたAda2012の技術正誤表」エイダリソースアソシエーション。2016-01-29 取得した2016年2月23日を
  2. ^ 「統合されたAda2012言語リファレンスマニュアル」エイダ適合性評価機関。2016-03-03にオリジナルからアーカイブされまし取得した2016年2月23日を
  3. ^ 「PTCObjectAda」PTC.com 2014年1月27日取得
  4. ^ 「C中間証明書を使用したAdaMagic」
  5. ^ Ada Rationale、1986、pp。23、70、110–114、137、165、236
  6. ^ 「チャペル仕様(謝辞)」(PDF)Cray Inc.2015-10-01 取得した2016年1月14日を
  7. ^ ガンスル、ジャック(2013-05-29)。「Adaリソース協会–Adaプログラミング言語のニュースとリソース」Adaic.org 取得した2013年6月14日を
  8. ^ a b "ISO / IEC 8652:2012情報技術–プログラミング言語–Ada "国際標準化機構2012年12月23取得
  9. ^ 「Adaプログラミング言語」ミシガン大学アーカイブされたオリジナルの2016年5月22日に検索された27 5月2016
  10. ^ フエギ、J; フランシス、J(2003)。「ラブレース&バベッジと1843年の創作」ノート」。コンピューティングの歴史のIEEE年報25(4):16–26。土井10.1109 /MAHC.2003.1253887S2CID 40077111 
  11. ^ タフト、S。タッカー; オルセン、フィレンツェ(1999-06-30)。「Adaは、バグの少ないコードを解約するのに役立ちます」政府のコンピュータニュース。頁2-3 2010年9月14取得
  12. ^ a b c フェルドマン、マイケル。「誰がエイダを使っているの?」SIGAda教育ワーキンググループ。
  13. ^ ADAには安全な動的メモリ管理はありません:SafeRustでのLinuxカーネルモジュールの作成-GeoffreyThomas&Alex Gaynor、The Linux Foundation、2019-10-02
  14. ^ 「ジョングッドイナフ| SEIスタッフプロフィール」Sei.cmu.edu 2014年1月27日取得
  15. ^ CAR、Hoare(1981)。「皇帝の古着」(PDF)ACMの通信コンピューティングマシナリー協会24(2):75–83。土井10.1145 /358549.358561S2CID 97895  
  16. ^ ワット、DA; ウィッチマン、BA; Findlay、W。(1987)。エイダ:言語と方法論プレンティスホール。
  17. ^ a b c d Sward、Ricky E.(2010年11月)。「エイダの上昇、下降、そして持続性」。SIGAda '10:SIGAdaに関するACMSIGAda年次国際会議の議事録pp。71–74。土井10.1145 /1879063.1879081
  18. ^ a b c ローゼン、JP。(2009年8月)。「エイダパラドックス」。エイダレターズACMSIGAda。24(2):28–35。土井10.1145 /1620593.1620597S2CID 608405 
  19. ^ SofTech Inc.(1983-04-11)。「Adaコンパイラ検証要約レポート:NYU Ada / ED、バージョン19.7V-001」マサチューセッツ州ウォルサム。2012年3月12日にオリジナルからアーカイブされました2010年12月16日取得
  20. ^ デュワー、ロバートBK; フィッシャー、ジェラルドA.ジュニア; Schonberg、エドモンド; Froelich、Robert; ブライアント、スティーブン; ゴス、クリントンF。; バーク、マイケル(1980年11月)。「NYUエイダ翻訳者および通訳者」。ACM SIGPLAN通知–Adaプログラミング言語に関するACM-SIGPLANシンポジウムの議事録15(11):194–201。土井10.1145 /948632.948659ISBN 0-89791-030-3S2CID  10586359
  21. ^ 「Ada検証済みコンパイラリスト」。エイダ情報クリアリングハウス。1992年7月1日。1〜36ページ。
  22. ^ エイダ情報クリアリングハウス(1983-04-11)。「議会エイダマンデート」2016年3月4日にオリジナルからアーカイブされまし2015年6月7日取得
  23. ^ Babiak、Nicholas J.(1989)。Ada、新しいDoD武器システムのコンピューター言語–万能薬または災害(PDF)空軍大学(米国空軍)pp。39–40。
  24. ^ a b レーマー、カール(2009)。「HADSチーム」。ステルマンでは、アンドリュー。グリーン、ジェニファー(編)。美しいチーム:ベテランチームリーダーからの刺激的で注意深い物語カリフォルニア州セバストポル:オライリー。pp。299–312。
  25. ^ a b Wolfe、Alexander(2004年10月)。「エイダにはまだ生命が残っている」ACMキュー2(7):28–31。土井10.1145 /1035594.1035608
  26. ^ AdaCore。「英国の次世代ATCシステムに選ばれたGNATプロ」アーカイブされたオリジナルの2010年12月24日に2011年3月1日取得
  27. ^ AdaCore。「エイダを使用している人を見てください」アーカイブされたオリジナルの2010年12月24日に2011年3月1日取得
  28. ^ 「Ada構文カード」(PDF)2011年7月6日にオリジナル(PDF)からアーカイブされまし取得した28年2月2011
  29. ^ 「Ada83LRM、セクション2.8:プラグマ」Archive.adaic.com 2014年1月27日取得
  30. ^ 「Ada83LRM、付録/付録B:事前定義された言語プラグマ」Archive.adaic.com。2012-02-06にオリジナルからアーカイブされまし2014年1月27日取得

国際規格

理論的根拠

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

書籍

  • ブーチ、グレイディ(1987)。Adaによるソフトウェアエンジニアリングカリフォルニア:ベンジャミン/カミングス出版社。ISBN 0-8053-0604-8
  • Skansholm、1月(1996)。エイダ95最初からアディソン-ウェスリー。ISBN 0-201-40376-5
  • ギルピン、ジェフ(1985)。Ada:ガイド付きツアーとチュートリアルプレンティスホール。ISBN 978-0-13-004045-9
  • バーンズ、ジョン(2006)。Ada2005でのプログラミングアディソン-ウェスリー。ISBN 0-321-34078-7
  • バーンズ、ジョン(1991)。Adaと言語リファレンスマニュアルでのプログラミングアディソン-ウェスリー。ISBN 0-201-56539-0
  • バーンズ、ジョン(1998)。Ada95でのプログラミングアディソン-ウェスリー。ISBN 0-201-34293-6
  • バーンズ、ジョン(1997)。高整合性エイダ:SPARKアプローチアディソン-ウェスリー。ISBN 0-201-17517-7
  • バーンズ、ジョン(2003)。高整合性ソフトウェア:安全性とセキュリティへのSPARKアプローチアディソン-ウェスリー。ISBN 0-321-13616-0
  • ベイドラー、ジョン(1997)。データ構造とアルゴリズム:Ada95を使用したオブジェクト指向アプローチSpringer-Verlag。ISBN 0-387-94834-1
  • ゴンザレス、ディーンW.(1991)。Adaプログラマーハンドブックベンジャミン-カミングス出版社。ISBN 0-8053-2529-8
  • ベンアリ、M。(1998)。ソフトウェアエンジニアのためのエイダジョンワイリー&サンズ。ISBN 0-471-97912-0
  • コーエン、ノーマン(1996)。第二言語としてのエイダマグロウヒル科学/工学/数学。ISBN 0-07-011607-5
  • バーンズ、アラン; ウェリングス、アンディ(2001)。リアルタイムシステムとプログラミング言語。Ada 95、Real-TimeJavaおよびReal-TimePOSIXアディソン-ウェスリー。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
  • Jones、Do-While(1989)。Ada in Action:実用的なプログラミング例を使用ジョンワイリー&サンズ。ISBN 0-471-60708-8
  • スタブス、ダニエル; Webre、Neil W.(1993)。抽象データ型とAdaを使用したデータ構造ブルックスコール。ISBN 0-534-14448-9
  • レドル、パスカル(1998年12月)。保護されたオブジェクトを使用したAdaの分散プログラミングDissertation.com。ISBN 1-58112-034-6
  • カルウィン、フィンタン(1997)。エイダ、開発的アプローチプレンティスホール。ISBN 0-13-264680-3
  • 英語、ジョン; カルウィン、フィンタン(1997年1月)。Ada95オブジェクト指向プログラミングの技術プレンティスホール。ISBN 0-13-230350-7
  • Musser、David R。; ステパノフ、アレクサンダー(1989年10月24日)。Ada Generic Library:線形リスト処理パッケージSpringer-Verlag。ISBN 0-387-97133-5
  • フェルドマン、マイケルB.(1997)。Ada95を使用したソフトウェア構築とデータ構造アディソン-ウェスリー。ISBN 0-201-88795-9
  • ジョンストン、サイモン(1997)。CおよびC ++プログラマー向けのAda95アディソン-ウェスリー。ISBN 0-201-40363-3
  • フェルドマン、マイケルB。; コフマン、エリオットB.(1992–1993)。エイダ:問題解決とプログラム設計アディソン-ウェスリー。ISBN 0-201-52279-9 795ページ。
  • フェルドマン、マイケルB。; コフマン、エリオットB.(1999)。エイダ95アディソン-ウェスリー。ISBN 0-201-36123-X
  • デール、ネルB。; ウィームズ、チップ; マコーミック、ジョン(1996年8月)。Ada95を使用したプログラミングと問題解決ジョーンズ&バートレット出版社。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日)。分散エイダ:開発と経験ケンブリッジ大学出版局。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
  • Pyle、Ian C.(1991)。安全システムの開発:Adaを使用したガイドプレンティスホール。ISBN 0-13-204298-3
  • ベイカー、ルイス(1989)。エイダとの人工知能マグロウヒル。ISBN 0-07-003350-1
  • バーンズ、アラン; ウェリングス、アンディ(1995)。HRT-HOOD:ハードリアルタイムAdaシステムの構造化設計手法北ホラント。ISBN 0-444-82164-3
  • サヴィッチ、ウォルター; ピーターソン、チャールズ(1992)。エイダ:プログラミングの芸術と科学の紹介ベンジャミン-カミングス出版社。ISBN 0-8053-7070-6
  • ワイス、マークアレン(1993)。Adaのデータ構造とアルゴリズム分析ベンジャミン-カミングス出版社。ISBN 0-8053-9055-3
  • Ledgard、Henry(1983)。エイダ:はじめに(第2版)。Springer-Verlag。ISBN 0-387-90814-5
  • Bjørner、Dines; Oest、Ole N.、eds。(1980)。エイダの正式な説明に向けてロンドン:Springer-Verlag。ISBN 3-540-10283-3

アーカイブ

外部リンク