いくつかのプログラムでAdaを使用するつもりです。プラグマを使用すると、プログラムを最適化するためのコンパイラ命令を設定できることをどこかで読んだことを覚えています。具体的には、Ada機能の限られたサブセット(基本的にはPascalに対応しますが、Adaの強い型付けを使用)のみが必要な場合は、プラグマを使用して一種の「Pascalのようなモード」を指定できることを読んだことを覚えています(私はこの用語を使用します)より良い表現の欠如のために)。私の目的は、(基本的な機能のみが必要なため)不要なランタイムチェックを無効にして、実行可能ファイルのサイズを縮小し、パフォーマンスを向上させることです。私の質問は、どうすればそのようなプラグマを設定できるかということです。どのパラメータ/オプションを指定する必要がありますか?ありがとうございました
3 に答える
これはおそらく誤解から来ています。
Ada は Pascal のスーパーセットではありません。それらを親言語Algol 60の兄弟言語と見なす方が、かなり正確です。Pascal は Niklaus Wirth によってAlgol 60 の単純化されたバージョンとして最初に開発されました。Algol の人々は代わりに Algol 68 になったものとは逆の方向に進みました。
代わりに、Ada はゼロから設計された新しい言語であり、Algol 60 の構文を借用しました (Java が C の構文を借用するのと同じように)。ただし、Algol 68 よりもはるかに複雑です (「機能的」という言葉を使用する人もいます)。
したがって、Ada コンパイラで「Pascal フラグ」を要求することは、Java コンパイラで「C++ フラグ」を要求するのとよく似ています。
無料の Pascal コンパイラを探しているだけの場合は、代わりにFree PascalまたはGNU Pascalを使用することを検討してください。
未使用のランタイム機能のオーバーヘッドを削減するだけの場合は、Ada ランタイムの一部へのアクセスを選択的に禁止するために使用できるAnnex Hを調べる必要があります。pragma Restrictions()
これにより、浮動小数点、動的割り当て、動的ディスパッチ、タスク、例外/ランタイム制約チェックなどを取り除くことができます.
申し訳ありませんが、これは悪い考えです。タスク構造によるオーバーヘッドの可能性を避けたい場合は、タスクを使用しないでください。人々は制約チェックを抑制したいと思うことがよくあります (これは GNAT で を使用してコンパイルすることで実行できます-p
) が、私の経験では、小さな改善以上のものを得ることはめったにありません。
Ada にはプラグマ Restrictionsが追加され、特定の機能を使用できなくなります。ここでGNAT を見ることができます。目的は、高信頼性ソフトウェア、ポータブル ソフトウェア、または効率的なタスク ランタイムの作成をサポートすることです。
その {'Pascal のようなモード'} は、私があなたを誤解していない限り、実装固有のプラグマのように聞こえます。ただし、最終的なサイズに影響を与える可能性のある「制限の最適化」[time or space] and
プラグマがあります。