Ada Resource Association
Ada概要
Adaは、信頼性と効率性が不可欠な大規模で長寿命のアプリケーション、特に組み込みシステム用に設計された最新のプログ もともとは1980年代初頭にフランスのCII-Honeywell-BullのJean Ichbiah博士が率いるチームによって開発されました(このバージョンは一般的にAda83として知られています)。 この言語は、1990年代初頭に、米国のIntermetricsのTucker Taft氏のリーダーシップの下で、上位互換性のある方法で改訂され、強化されました。 結果として得られた言語であるAda95は、国際的に標準化された(ISO)オブジェクト指向言語としては初めてのものであった。 ISOの後援の下で、標準の修正としてさらなる(マイナーな)改訂が完了しました。 より重要な改訂が完了し(プログラム注釈のサポートを含む)、Ada2012として知られています。 別の重要な改訂は2022年に完了する予定です。
“Ada”という名前は頭字語ではありません; これは、数学者オーガスタ-エイダ-ラブレス(1815年-1852年)、時にはチャールズ-バベッジとの仕事のために世界初のプログラマとみなされているに敬意を表して選ばれた。 彼女は詩人のバイロン卿の娘でもありました。
Adaは、商用および軍用航空機のアビオニクス、航空交通管制、鉄道システム、医療機器など、高整合性/安全性重視/高セキュリティ分野で世界的に重要な使 現代のソフトウェア工学の原則のその実施形態では、Adaは、入門と高度なコンピュータサイエンスのコースの両方のための優れた教育言語であり、特にリアル
言語の概要
Adaは多面的です。 ある視点から見ると、それは古典的なスタックベースの汎用言語であり、特定の開発方法論に縛られていません。 これは、単純な構文、構造化された制御ステートメント、柔軟なデータ構成機能、強力な型チェック、コードモジュール化のための従来の機能(”サブプログラム”)、およ
しかし、それはまた、はるかに多くを含んでいます:
スカラー範囲
C構文に基づく言語(C++、Java、C#など)とは異なり、Adaはスカラー型(整数型、浮動小数点型、固定小数点型、列挙型)の変数に許可される値の範囲を簡単かつ明示的に指定することができます。 範囲外の値を代入しようとすると、実行時エラーが発生します。 範囲制約を指定する機能により、プログラマの意図が明示的になり、コーディングやユーザー入力エラーの主な原因を検出しやすくなります。
大規模なプログラミング
元のAda83の設計では、カプセル化(“情報隠蔽”)とモジュール化をサポートし、開発者が特定のコンパイルユニット内でアクセ Ada95は”子ユニット”の概念を導入し、かなり柔軟性を追加し、非常に大規模なシステムの設計を容易にしました。 Ada2005は、パッケージ仕様間の相互参照を可能にすることにより、言語のモジュール化機能を拡張し、Javaなどの言語とのインターフェイスを容易にしました。
汎用テンプレート
再利用可能なコンポーネントの鍵は、任意の要素型のスタックパッケージなど、データ型やその他のプログラムエンティティに関してモジュー パラメータ化はコンパイル時に行われるため、実行時のパフォーマンスはペナルティされません。
オブジェクト指向プログラミング(OOP)
Ada83はオブジェクトベースであり、システムを抽象データ型または抽象オブジェクトに対応するモジュールに分割 第一に、Adaの主なターゲットであったリアルタイムドメインでは必要ではないように見えたため、第二に、OO言語での自動ガベージコレクションの必要性が予測可能で効率的なパフォーマンスを妨げていたため、完全なOOPサポートは提供されていなかった。
しかし、大規模なリアルタイムシステムには、リアルタイム制約を持たず、OOP機能を使用して最も効果的に開発できるGuiなどのコンポーネントがあ この理由の一部として、Ada95は、クラス、多態性、継承、動的バインディングなどの”タグ付き型”機能を通じて、OOPの包括的なサポートを提供しています。 Ada95は自動ガベージコレクションを必要とせず、開発者がタイプ固有のストレージ再利用操作(”ファイナライズ”)を提供できるようにする定義機能を提供し Ada2005は、Javaのようなインターフェイスや従来の操作呼び出し表記を含む追加のOOP機能を提供しました。
Adaは方法的に中立であり、OOPに”分散オーバーヘッド”を課すものではありません。 アプリケーションがOOPを必要としない場合、OOP機能を使用する必要はなく、実行時のペナルティはありません。
並行プログラミング
Adaは、並行性のための構造化された高レベルの機能を提供します。 同時実行の単位は、”タスク”と呼ばれるプログラムエンティティです。”タスクは、共有データを介して暗黙的に、またはランデブと呼ばれる同期制御メカニズムを介して明示的に通信することができます。 共有データ項目は抽象的に「保護されたオブジェクト」(Ada95で導入された機能)として定義することができ、複数のタスクから呼び出されたときに相互排除 非同期タスクの相互作用、特にタイムアウトとタスクの終了もサポートされています。 このような非同期動作は、共有データが一貫性のない状態になる可能性を防ぐために、特定の操作中に延期されます。 Adaの最新バージョンには、マルチコアアーキテクチャを利用するための軽量なメカニズムが含まれており、移植性を維持し、安全で明確に定義されたAdaの同時実行モデル内にとどまりながら、非常に効率的な並列コンピューティングを可能にします。
Systems programming
“core”言語とSystems Programming Annexの両方で、Adaはプログラマがハードウェアに近づくことを可能にするために必要な機能を提供しています。 たとえば、レコード内のフィールドのビットレイアウトを指定したり、配置とサイズを定義したり、特定のマシンアドレスにデータを配置したり、特殊なコード また、保護された型機能を使用して、Adaで割り込みハンドラを記述することもできます。
Real-time programming
Adaのタスク機能を使用すると、一般的なリアルタイムイディオム(定期的なタスク、イベント駆動型タスク)を表現することができ、Real-Time Annexには無制限の優先順位の反転を回避するためのいくつかの機能が用意されています。 これは、保護された操作がブロックすることが許可されていないため、Adaで特に効率的な実装(ミューテックスは必要ありません)を持っています。 Ada95では、基本的にブロックまたはプリエンプテッドまでタスクを実行する必要があるタスクディスパッチポリシーが定義され、Ada2005ではEarliest Deadline Firstを含むいくつかの他のものが導入された。
高整合性システム
健全なソフトウェア工学の原則に重点を置いて、Adaは、DO-178Bなどの安全基準やCommon Criteriaなどのセキュリティ基準に対して認定される必 例えば、強い型付けは、ある目的のために意図されたデータが不適切な操作を介してアクセスされないことを意味し、ポインタを整数として扱う(またはその逆)などのエラーが防止される。 また、Adaの配列境界チェックは、CおよびC++で一般的なバッファオーバーランの脆弱性を防止します。
しかし、一般性と柔軟性がトレーサビリティ/認証要件を妨げる可能性があるため、安全に重要なアプリケーションでは完全な言語は不適切です。 Adaは、言語機能を明確に定義されたサブセットに制約することを可能にするコンパイラ指令pragma Restrictionsを提供することによって、この問題に対処します(例えば、動
Adaの進化により、安全性に重要なアプリケーションや高セキュリティアプリケーションへのサポートが継続的に増加しています。 Ada2005はRavenscarプロファイルを標準化し、リアルタイムプログラミングには十分強力であるが、認証を実用的にするのに十分な単純な並行性機能のコレクシ Ada2012では、事前条件、事後条件、および不変量をプログラムに追加するための注釈機能が導入されました。 Ada2022は、デフォルトの初期条件、安定したプロパティ、非ブロック、およびグローバルオブジェクトの使用に関する追加の注釈でこれらを拡張します。 これらは、実行時のチェックと静的解析ツールへの入力の両方に役立ちます。
Adaの利点の概要
- 安全で信頼性の高いコードを設計するのに役立ちます
- 開発コストを削減
- 新しい技術や変化する技術をサポート
- 複雑なプログソフトウェア
Ada機能の概要
- オブジェクト指向プログラミング
- 強力なタイピング
- プログラムドメインに合う抽象化
- 汎用プログ 処理
- コードのモジュール化組織のための施設
- I/O、文字列処理、数値計算、コンテナ用の標準ライブラリ
- システムプログラミング
- 同時プログ2021>他の言語(C、COBOL、fortran)へのインターフェイス)
簡単に言えば、Adaは、オブジェクト指向プログラミング機能、よく設計された同時実行機能、リアルタイムサポート、および組み込みを組み合わせた国際的 信頼性。 Adaは、今日のソフトウェア開発者が直面している実際の問題に対処するための適切なツールであり、ビジネスと生活を保護するソフトウェアを設計す
Leave a Reply