D言語製のプログラムは、メイン関数の呼び出しの事前に、ランタイムでの処理でいくつかの特殊なコマンドライン引数を解釈し、ランタイムの制御を切り替える機能が備わっている。
細かな挙動は調べればわかるが、一覧になっている場所がないので、ここにまとめる。
以下に挙げるもの以外にも隠しオプションが存在しているようだが、ドキュメント化されていないなものは除外した。
--DRT-testmode
単体テストの挙動を変更する。
https://dlang.org/phobos/core_runtime.html#.runModuleUnitTests
myprog --DRT-testmode=run-main
--DRT-testmode=test-or-main
デフォルトの挙動。
単体テストが存在する場合は単体テストを実行して、要約を表示して終了する。(メイン関数は実行されない)
単体テストが存在しない場合は、メイン関数を実行する。
--DRT-testmode=run-main
単体テストがすべて成功した場合、メイン関数を実行する。
--DRT-testmode=test-only
単体テストがすべて成功した場合であっても、メイン関数は実行しない。
--DRT-covopt
カバレッジの挙動を変更する。
https://dlang.org/articles/code_coverage.html
myprog --DRT-covopt=merge:1 --DRT-covopt=dstpath:cov
--DRT-covopt=merge:<cond>
-
<cond>=
1
: 現在のカバレッジ結果を既存のレポートにマージ -
<cond>=
0
: 既存のレポートを上書きする。
--DRT-covopt=srcpath:<path/to/dir>
<path/to/dir> にはソースファイルを配置するパスを設定する。
--DRT-covopt=dstpath:<path/to/dir>
<path/to/dir> にはカバレッジ結果のレポートを書き込む場所のディレクトリのパスを設定する(この指定先のディレクトリは事前に必ず存在していなければならない)。
--DRT-gcopt
ガベージコレクタの挙動を変更する。
https://dlang.org/spec/garbage.html#gc_config
app "--DRT-gcopt=profile:1 minPoolSize:16" arguments to app
--DRT-gcopt=disable:<cond>
プログラム開始時にGCの有効無効を選択して起動する。
-
<cond>=
0
: デフォルトです。プログラム開始時にGCが有効な状態で起動する。core.memory.GC.disable()
で無効化する。 -
<mode>=
1
: プログラム開始時にGCが無効な状態で起動する。core.memory.GC.enable()
で有効化する。
--DRT-gcopt=profile:<cond>
プログラム終了時にGCの使用状況分析結果を表示するオプション。
-
<cond>=
0
: デフォルト。結果を表示しない。 -
<cond>=
1
: 結果を表示します。
--DRT-gcopt=gc:<mode>
GCの実装を選択できます。
-
<mode>=
conservative
: デフォルト。保守的なGC。 -
<mode>=
precise
: 正確なGC。 -
<mode>=
manual
: マニュアル実行。core.memory.GC.collect()
でGC実行。
--DRT-gcopt=initReserve:<N>
<N> MBのメモリを予約した状態でプログラムを起動する。
--DRT-gcopt=minPoolSize:<N>
<N> MBのメモリプールサイズを初期化した状態でプログラムを起動する。
--DRT-gcopt=maxPoolSize:<N>
メモリプールサイズの最大を <N> MBで指定する。
--DRT-gcopt=incPoolSize:<N>
メモリプールサイズの増加ステップを <N> MBで指定する。
--DRT-gcopt=parallel:<N>
<N>個の追加スレッドを使用してマーキングを行います。
--DRT-gcopt=heapSizeFactor:<N>
<N>で目標とするヒープサイズと使用メモリの比率を指定する。
--DRT-gcopt=cleanup:<mode>
プログラム終了時に回収されていないのオブジェクトの扱い方を指定する。
-
<mode>=
none
: 何もしない。 -
<mode>=
collect
: デフォルト。回収する。 -
<mode>=
finalize
: デストラクタを呼んでファイナライズする。
--DRT-oncycle
スタティックコンストラクタが循環してしまった場合の挙動を指定できる。
https://dlang.org/spec/module.html#order_of_static_ctor
--DRT-oncycle=abort
デフォルト。プログラムは強制終了する。
--DRT-oncycle=deprecate
abortと同じように動作するが、循環が検出されると、ランタイムは欠陥のある2.072以前のアルゴリズムを使用して、循環が以前に検出されたかどうかを判断する。古いアルゴリズムで循環が検出されなかった場合、実行は継続されますが、非推奨のメッセージが表示される。
--DRT-oncycle=print
検出されたすべての循環を表示し、実行は中止しない。循環が存在する場合、スタティックコンストラクタの順序は実装依存で、有効かどうかは保証されない。
--DRT-oncycle=ignore
実行は中止しない。循環が存在する場合、スタティックコンストラクタの順序は実装依存で、有効かどうかは保証されない。