携帯性
コードに含まれる無償の移植性問題を最小限に抑えることは、ソフトウェアエンジニアリングの良い習慣だ。 ポータビリティの問題を最小化することは、良いソフトウェア工学の実践である。 潜在的な移植性の問題を最小限に抑えるテクニックは以下の通りだ:
- 積分型と浮動型のサイズは最小と考えるべきである。 最小値とする。 アルゴリズムは、型サイズが大きくなっても正しく動作し続けるように設計すべきである。 型サイズが大きくなっても正しく動作し続けるように設計すべきである。
- 浮動小数点演算は、浮動小数点変数のサイズが保持できるよりも高い精度で実行できる。 浮動小数点演算は、浮動小数点変数のサイズが保持できるよりも高い精度で実行できる。 浮動小数点アルゴリズムは、次のような場合でも正しく動作し続けるべきである。 精度を任意に上げても、浮動小数点アルゴリズムは正しく動作し続けるはずである。
- 計算における副作用の順序に依存しないようにする。
の副作用の順序に依存しないようにする。例えば、次のようにする:
a + b + c
は、(a + b) + c、a + (b + c)、(a + c) + b、(c + b) + a と評価できる、 などである。括弧は演算子の優先順位を制御するが、括弧は評価の順序を制御しない。 は評価の順序を制御しない。
連想演算子+または*のオペランドが浮動小数点値の場合、式の順序は変更されない。 のオペランドが浮動小数点値の場合、式は並べ替えられない。
- バイトオーダーに依存しないようにする。 がビッグエンディアンかリトルエンディアンかなどである。
- ポインタや参照のサイズが特定の積分型と同じであることに依存しないようにする。 特定の積分型と同じサイズであることに依存しないようにする。
- サイズ依存が避けられない場合は、static assert 。
を入れて検証すること:
static assert(int.sizeof == (int*).sizeof);
32ビットから64ビットへの移植性
32ビットプロセッサーとオペレーティングシステムはまだ存在している。 それを念頭に置いて:
- 積分型は32ビットコードと64ビットコードで同じサイズのままである。 32ビット・コードと64ビット・コードでは同じサイズである。
- ポインターとオブジェクト参照は、32ビットコードから64ビットコードになるにつれて、サイズが4バイトから8バイトに増加する。 ポインタとオブジェクト参照は、32ビットコードから64ビットコードになるにつれて、4バイトから8バイトに増加する。
- アドレス空間にまたがることができる符号なし整数型の別名としてsize_t を使用する。 型の別名として使用する。 配列のインデックスはsize_t 型でなければならない。
- アドレス空間にまたがることができる符号付き整数型のエイリアスとして、ptrdiff_t を使用する。 型のエイリアスとして使用する。 2つのポインタの差を表す型は、。 はptrdiff_t 型でなければならない。
- .length,.size,.sizeof 、.offsetof および.alignof プロパティはsize_t 型となる。
エンディアン
エンディアンとは、マルチバイト型が格納される順序のことである。 が格納される順序のことである。主な順序はビッグエンディアンとリトルエンディアンの2つである。 リトルエンディアンである。 コンパイラーはバージョン識別子 BigEndian またはLittleEndian 。 を定義する。 x86システムはすべてリトルエンディアンである。
エンディアンが重要になるのは以下のような場合だ:
- 外部ソース(ファイルなど)からデータを読み込むとき。 異なる 異なるエンディアン形式で書かれた外部ソース(ファイルなど)からデータを読み取るとき。
- マルチバイト型の個々のバイトを読み書きするとき。 long doubleのようなマルチバイト型を読み書きするとき。
OS固有のコード
システム固有のコードは、その違いを別々のモジュールに分離することで処理される。 別モジュールに分離する。コンパイル時に、正しいシステム固有モジュールがインポートされる。 モジュールがインポートされる。
軽微な違いは、システム固有のインポートで定義された定数によって処理できる。 定数を定義し、その定数を IfStatementまたはStaticIfStatementでその定数を使用する。
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku