const(およびin)
C関数があると考えてください:
unsigned int foo(const unsigned int a);
constコードが でコンパイルに合格するかのように、生成されたコードには影響しconstません。そうでない場合は何も壊れないconstため、C コンパイラはコンパイル時にコード コントラクト指定子としてのみ使用します。
uint foo(in uint a);Dでこの関数を書いたりuint foo(const uint a);呼び出したりする努力はありますか? これは、D コンパイラが を呼び出すためのより効率的なコードを生成するのに役立ちfooますか? それとも (少なくとも値型の引数に対して) 効果がありませんか?
refとout
C関数あり
unsigned int bar(unsigned int *a);
uint bar(uint* a);これを D に変換するときにポインター構文を使用する義務がありますか、それともuint bar(ref uint a);(またはuint bar(out uint a);、それが出力専用であることがわかっている場合aは、のドキュメントからbar) 書くことができますか? refとの下に追加の隠れた機構がありoutますか、それとも見た目のように単純なポインタにすぎませんか? out呼び出しが D のスコープ外に出た場合、D はパラメーターをデフォルト値に初期化するための「グルー コード」を生成しますか?
Update1:ref s とs が引数でどのように処理されるかをテストするための簡単なコードを書きました。out実際には、少なくともints の場合は単純なポインターのように見えますがout、渡されたときに初期値にリセットされません。C 側はその値を読み取って変更できます。のように効果的に機能しrefます。このように使用するときに GC 関連の問題が発生する可能性があるかどうかはわかりません。
Update2:ref関数の結果でポインターの代わりに使用することも期待どおりに機能します。constはまだテストされておらず、プログラムを逆アセンブルせずにチェックする方法がわかりません。