私は Ada 言語を使用したソフトウェア開発プロジェクトに取り組んでいます。お客様は Rational Apex Ada コンパイラを使用しており、私は GNU コンパイラを使用します。私のコードは顧客の PC で正常に動作するはずです。Ada言語で考えられるコンパイラ依存コードは何ですか? コンパイラに依存しないコードを開発できるように。また、お客様のコードを自分の PC でコンパイルして実行したいと考えています。
ありがとうパドマプリヤ
私は Ada 言語を使用したソフトウェア開発プロジェクトに取り組んでいます。お客様は Rational Apex Ada コンパイラを使用しており、私は GNU コンパイラを使用します。私のコードは顧客の PC で正常に動作するはずです。Ada言語で考えられるコンパイラ依存コードは何ですか? コンパイラに依存しないコードを開発できるように。また、お客様のコードを自分の PC でコンパイルして実行したいと考えています。
ありがとうパドマプリヤ
GNAT Pro の次のリリースでは、Apex から GNAT への移植を支援する新しい「プラグマ プロファイル (Rational)」が提供されます。説明については、 http://docs.adacore.com/gnat-unw-docs/html/gnat_rm_2.html#SEC110を参照してください。
「コンパイラ依存コード」は、CやC ++などの他の多くの言語よりも、Adaでの役割がはるかに小さくなります。ただし、コンパイラに依存するパッケージは珍しくなく、コンパイラ固有のプラグマと属性も存在する可能性があります。
私の経験によると、Rational Apex開発者は、Rationalが提供するパッケージを過度に(IMHO)使用する傾向があるようです。
そのようなパッケージを移植または再実装するか、それらと相互作用するAdaを再コーディングして、非常に好ましいオプションである純粋なAdaアプローチを使用する必要があります。
私の現在のプロジェクトは、いくつかのコンパイラ固有の (Branched from gnat
) 機能を使用しており、コンパイルのある時点でエラー メッセージが表示される一連の警告もオンになっています。
warning: use of this unit is non-portable and version-dependent
警告をエラーとして処理するようにコンパイラに要求する場合、( -gnatwe
) 警告を見つけたときにコンパイルに失敗するはずです。
私の経験では、Gnat と別のベンダーのコンパイラの間を行き来する際の主な問題は、Gnat の奇妙なファイル命名要件に対処することです。Rational は、ほとんどのコンパイラと同様に、指定されたファイル名を喜んで使用し、内部ファイルとのマッピングを追跡するだけだと思います。Gnat はそれほど寛大ではありません (ただし、内部マッピング ファイルは必要ありません)。
したがって、すべてをゼロから作成している場合は、Gnat が好むファイル名を標準化することをお勧めします。これは、Ada プログラム ユニットごとに 1 つのソース ファイルを意味し、ファイル名はプログラム ユニット名と一致しますが、すべて小文字で、ドットはハイフンに置き換えられます。パッケージの仕様は.ads
拡張子を使用し、プログラム単位の本体は を使用します.adb
。
そうでなければ、コードを完全に移植できない理由はほとんどありません。私は、VxWorks OS ターゲット用の Intermetrics ベースのフロントエンドで構築された忠実度の高いフライト シミュレータを含む 1 つの仕事に取り組みました。このフライト シミュレータは、基本的なデスク テスト用に (Win32) デスクで Gnat を使用して再構築できました。ハード リアルタイム スケジューラでさえ、実装ですべての Ada タスク プリミティブを使用したため、問題なく移植されました。IIRC では、対処しなければならなかった移植性のない呼び出しは、バッテリ バックアップから TOD クロックを設定するための BIOS 呼び出しと、リアルタイム クロック周波数を設定するための単一の VxWorks OS 呼び出しだけでした。すべてを適切に ped にする方法を理解することgnatchop
は、これら 2 つの呼び出しをスタブ化するよりもはるかに時間がかかりました。