英語版
このページの英語版を見る

core.runtime

ランタイム・モジュールは、Dランタイム・コードに固有の情報を公開する。
Authors:
Sean Kelly

ソース runtime.d

void* rt_loadLibrary(const char* name);
Runtime.loadLibraryとのCインターフェイス
int rt_unloadLibrary(void* ptr);
Runtime.unloadLibraryとのインターフェイスで、boolの代わりに1/0を返す。
int rt_init();
Runtime.initializeのCインターフェイス、boolの代わりに1/0を返す
int rt_term();
Runtime.terminateとのインターフェイスで、boolの代わりに1/0を返す。
struct UnitTestResult;
この型は、モジュール単体テストハンドラがテスト結果を示すために返す。 結果を返す。
size_t executed;
テストされたモジュールの数
size_t passed;
ユニットテストに合格したモジュールの数
bool runMain;
メイン関数を実行すべきかどうか?テストが失敗した場合は無視される。 が失敗した場合は無視される。
bool summarize;
結果の要約を表示すべきか?
const bool opCast(T : bool)();
ユニットテストが実行された後、実行を続けるべきかどうかの単純なチェック。 が実行された後も実行を続けるべきかどうかをチェックする。bool が返されることを期待していたレガシーなコードでも動作する。
Returns:
テストが完了した後も実行を続けるべき場合はtrue、そうでない場合はfalseを返す。 を返す。
enum UnitTestResult pass;
単体テストが合格し、mainが実行されるべきであるという単純なリターン・コード。
enum UnitTestResult fail;
ユニットテストが失敗したという単純なリターン・コード。
alias ModuleUnitTester = bool function();
レガシー・モジュール単体テスト・ハンドラ
alias ExtendedModuleUnitTester = UnitTestResult function();
モジュール単体テストハンドラ
struct CArgs;
プロセス開始時に供給された未処理の引数を保存する。 引数カウント。
int argc;
引数のカウント。
char** argv;
文字列のC配列としての引数。
struct Runtime;
この構造体は、呼び出し元コンテキストの基礎となるランタイム・モジュールに関連するすべての機能をカプセル化する。 モジュールに関連するすべての機能をカプセル化する。
static bool initialize();
ランタイムを初期化する。 この呼び出しは、標準のプログラム初期化処理が実行されない場合に使用される。 標準のプログラム初期化プロセスが実行されない場合に使用される。 これは 共有ライブラリやCプログラムにリンクされたライブラリでよくあることである。 ランタイムがすでに正常に初期化されている場合、これは真を返す。 initializeを呼び出すたびに、必ず対になって terminate.
Returns:
初期化に成功した場合はtrueを、初期化に失敗した場合はfalseを返す。
static bool terminate();
ランタイムを終了する。 この呼び出しは、標準的なプログラム終了処理が実行されない場合に使用する。 標準のプログラム終了処理が実行されない場合に使用される。 これは 共有ライブラリやCプログラムにリンクされたライブラリでよくあることである。 ランタイムが正常に初期化されなかった場合、この関数は偽を返す。
Returns:
終了に成功した場合はtrue、失敗した場合はfalseを返す。
static @property string[] args();
プロセスの開始時に供給された引数を返す。
Returns:
このプロセスが開始されたときに提供された引数。
static @nogc @property CArgs cArgs();
プロセス開始時に供給された未処理のC引数を返す。 Cライブラリにargcとargvを供給する必要がある場合に使用する。
Returns:
A CArgsこのプロセスの開始時に供給された引数を持つ構造体。

例:

import core.runtime;

// char**引数を必要とするCライブラリ関数
extern(C) void initLibFoo(int argc, char** argv);

void main()
{
    auto args = Runtime.cArgs;
    initLibFoo(args.argc, args.argv);
}

void* loadLibrary()(scope const char[] name);
指定されたライブラリ名でダイナミック・ライブラリを検索し、呼び出し元のアドレス空間に動的にロードする。 呼び出し元のアドレス空間にロードする。 ライブラリにD ランタイムが含まれていれば、現在のランタイムと統合される。
Parameters:
char[] name ロードするダイナミック・ライブラリーの名前。
Returns:
エラー時にはnull。
bool unloadLibrary()(void* p);
pによって参照されているダイナミック・ライブラリをアンロードする。 Dランタイムが含まれている場合、そのランタイムの必要なファイナライズまたはクリーンアップが実行される。 が実行される。
Parameters:
void* p アンロードするライブラリへの参照。
static @property void traceHandler(TraceHandler h, Throwable.TraceDeallocator d = null);
デフォルトのトレース機構を、ユーザーが提供するバージョンで上書きする。 A トレースは、例外がスローされたコンテキストを表し、例外が発生するとトレースハンドラが呼ばれる。 トレースハンドラが呼ばれる。 このルーチンに与えられるポインタは このルーチンに与えられるポインタは、トレースが発生するベース・アドレスを示す。 与えられたポインタがNULLの場合、トレース・ルーチンは、トレースを開始する適切な呼び出しコンテキストを決定しなければならない。 トレースを開始する適切な呼び出しコンテキストを決定しなければならない。
deallocatorが設定されている場合は、例外が確定したときにtraceinfoとともに呼び出される。 と共に呼び出される。deallocatorが例外に設定されるのは、以下の場合だけである。 デフォルトのハンドラがトレース情報を生成するために使われた場合のみ、例外にデアロケータがセットされる。
Parameters:
TraceHandler h 新しいトレースハンドラ。 例外バックトレースを無効にするにはnullに設定する。
Throwable.TraceDeallocator d 新しいトレース・デアロケータ。nullでない場合、これは 例外の破棄時にトレース情報と一緒に呼び出される。 ハンドラが TraceInfo を生成するために使用される場合のみ。
static @property TraceHandler traceHandler();
現在のトレースハンドラを取得する。
Returns:
現在のトレースハンドラ、または何も設定されていない場合は null。
static @property Throwable.TraceDeallocator traceDeallocator();
現在のトレースデアロケータを取得する。
Returns:
現在のトレースデアロケータ、または何も設定されていない場合は null。
static @property void collectHandler(CollectHandler h);
デフォルトの collect ハンドラを、ユーザーが提供するバージョンで上書きする。 この このルーチンは、非決定的な方法--通常はガベージコレクションサイクルの間--で最終化された各リソースオブジェクトに対して呼ばれる。 このルーチンは、非決定的な方法--通常はガベージコレクションサイクル中--で最終化される各リソースオブジェクトに対して呼び出される。 提供されたルーチンがtrueを返した場合、オブジェクトのdtorは通常通り呼び出される。 が呼び出されるが、もしこのルーチンが偽を返せば、ctorは呼び出されない。 は呼び出されない。 デフォルトの動作は、すべてのオブジェクトのdtorが呼び出されることである。
Parameters:
CollectHandler h 新しいコレクト・ハンドラ。 デフォルトのハンドラを使用するには null を設定する。
static @property CollectHandler collectHandler();
現在のコレクト・ハンドラを取得する。
Returns:
現在の collect ハンドラ、または何も設定されていない場合は null。
static @property void extendedModuleUnitTester(ExtendedModuleUnitTester h);

static @property void moduleUnitTester(ModuleUnitTester h);
デフォルトのモジュール・ユニット・テスターをユーザーが指定したバージョンでオーバーライドする。 このルーチンは、プログラムの初期化時に 1 回呼び出される。 このルーチンの戻り値 このルーチンの戻り値は、テストがエラーなしで実行されたかどうかをランタイムに示す。 を示す。
ハンドラには2つのオプションがある。bool 。 はレガシー・サポートのために残しておく。ハンドラーからtrue を返すことは、拡張バージョンから を返すことと同じである。 拡張バージョンからUnitTestResult.pass を返すのと同じである。 ハンドラからfalse を返すことは、拡張バージョンから を返すことと同じである。 UnitTestResult.fail を返すのと同じである。
どのようにセットアップすべきかについては、UnitTestResult のドキュメントを参照のこと。 のドキュメントを参照のこと。
runModuleUnitTests デフォルトの のドキュメントを参照するか、以下の例を読んでほしい。
Parameters:
ExtendedModuleUnitTester h 新しいユニットテスター。 デフォルトの テスターを使う。

例:

shared static this()
{
    import core.runtime;

    Runtime.extendedModuleUnitTester = &customModuleUnitTester;
}

UnitTestResult customModuleUnitTester()
{
    import std.stdio;

    writeln("Using customModuleUnitTester");

    // デフォルトのmoduleUnitTesterと同じことを行う:
    UnitTestResult result;
    foreach (m; ModuleInfo)
    {
        if (m)
        {
            auto fp = m.unitTest;

            if (fp)
            {
                ++result.executed;
                try
                {
                    fp();
                    ++result.passed;
                }
                catch (Throwable e)
                {
                    writeln(e);
                }
            }
        }
    }
    if (result.executed != result.passed)
    {
        result.runMain = false;  // mainを実行しない
        result.summarize = true; // 表示失敗
    }
    else
    {
        result.runMain = true;    // すべてのUTに合格した
        result.summarize = false; // ひた隠しにする。
    }
    return result;
}

static @property ModuleUnitTester moduleUnitTester();
現在のレガシー・モジュールのユニット・テスターを取得する。
このプロパティは使用されるべきではないが、レガシーな目的のためにサポートされている。
拡張ユニットテストハンドラが設定されている場合、このハンドラは無視される。 は無視される。
Returns:
現在のレガシー・モジュールのユニット・テスタ・ハンドラ、または何も設定されていない場合はNULL を設定する。
static @property ExtendedModuleUnitTester extendedModuleUnitTester();
現在のモジュール・ユニット・テスターを取得する。
このハンドラは moduleUnitTester" プロパティによって設定されたレガシーモジュールユニットテスターを上書きする。
Returns:
現在のモジュール・ユニット・テスター・ハンドラ、または何も設定されていない場合は null を設定する。
void dmd_coverSourcePath(string path);
カバレッジ・レポートのソース・ファイル・パスを設定する。
Parameters:
string path 新しいパス名。

注釈: これはdmd固有の設定である。 これはdmd固有の設定である。

void dmd_coverDestPath(string path);
カバレッジ・レポートの出力パスを設定する。
Parameters:
string path 新しいパス名。

注釈: これはdmd固有の設定である。 これはdmd固有の設定である。

void dmd_coverSetMerge(bool flag);
カバレッジ・レポートを既存のデータとマージする。
Parameters:
bool flag カバレッジ・マージ・モードを有効/無効にする。

注釈: これはdmd固有の設定である。 これはdmd固有の設定である。

void trace_setlogfilename(string name);
プロファイル・レポートの出力ファイル名を設定する(-profileスイッチ)。 名前を空にすると標準出力に設定される。
Parameters:
string name ファイル名

注釈: これはdmd固有の設定である。 これはdmd固有の設定である。

void trace_setdeffilename(string name);
最適化されたプロファイル・リンカーのDEFファイルの出力ファイル名を設定する(-profileスイッチ)。 空の名前を指定すると、標準出力に出力される。
Parameters:
string name ファイル名

注釈: これはdmd固有の設定である。 これはdmd固有の設定である。

void profilegc_setlogfilename(string name);
メモリ・プロファイル・レポートの出力ファイル名を設定する(-profile=gc スイッチ)。 空の名前を指定すると、出力は標準出力に設定される。
Parameters:
string name ファイル名

注釈: これはdmd固有の設定である。 これはdmd固有の設定である。

UnitTestResult runModuleUnitTests();
このルーチンは、起動時にモジュールのユニットテストを実行するためにランタイムから呼ばれる。 ユーザーが提供するユニットテスターが設定されていれば、それが呼ばれる、 そうでなければ、すべてのユニットテストが順番に実行される。
拡張unittestハンドラーが登録されている場合、この関数はそのハンドラーからの結果を直接返す。 の結果を直接返す。
レガシーなブール値を返すカスタム・ハンドラが使用されている場合、falseUnitTestResult.fail にマップされ、trueUnitTestResult.pass にマップされる。 にマップされる。これはユニットテスト・システムのオリジナルの動作である。
unittestカスタム・ハンドラが登録されていない場合、以下のアルゴリズムが実行される。 が実行される(この動作は、以下の--DRT-testmode スイッチによって影響を受ける可能性がある)。 によって影響を受ける):
  1. 存在する全てのunittestを実行する。失敗したそれぞれについて、スタック トレースを表示して続行する。
  2. ユニテストがなかった場合、summarizeをfalseに設定し、runMainをtrueに設定する。 をtrueに設定する。
  3. そうでなければsummarizeをtrueに、runMainをfalseに設定する。
ランタイムがこの関数の戻り値をどのように扱うかについての詳細は、UnitTestResult のドキュメントを参照のこと。 のドキュメントを参照のこと。
スイッチ--DRT-testmode が実行ファイルに渡される場合、以下の3つの値のうちの1つを持つことができる。 には3つの値がある:
  1. "run-main":ユニットテストが実行されても(そしてすべてパスしても)、runMainはtrueに設定される。 をtrueに設定する。
  2. "test-or-main":ユニットテストが実行されても(そしてすべてパスしても)、runMainはtrueに設定される。 結果を要約し、その結果に関係なく終了する。これは デフォルトである。
  3. "test-only"の場合、テストがない場合でもrunMainはfalseに設定される。
このコマンドラインパラメータは、カスタムユニットテストハンドラには影響しない。
Returns:
ユニットテストの実行結果を示すUnitTestResult 構造体。
Throwable.TraceInfo defaultTraceHandler(void* ptr = null);
プラットフォーム用のデフォルトのThrowable.TraceInfo 実装を取得する。
この関数はトレースハンドラを返す。 トレースハンドラを返す。
重要: 返されたトレースはGCに割り当てられていない可能性がある。 を終了するときにdefaultTraceDeallocator を呼び出す必要がある。 TraceInfo
Parameters:
void* ptr (Windows のみ)スタックトレースを取得するコンテキスト。 null (デフォルト)の場合、現在のフレームから開始する。
Returns:
Throwable.TraceInfo スタックを繰り返し実行するのに適した実装、 またはnull 。 ファイナライザ(デストラクタ)から呼び出された場合は、トレースハンドラがアロケートするときに常にnull を返す。
Examples:
スタック・トレースを表示する簡単なプログラムの例
import core.runtime;
import core.stdc.stdio;

void main()
{
    auto trace = defaultTraceHandler(null);
    foreach (line; trace)
    {
        printf("%.*s\n", cast(int)line.length, line.ptr);
    }
    defaultTraceDeallocator(trace);
}
nothrow void defaultTraceDeallocator(Throwable.TraceInfo info);
deaultTraceHander によって生成された traceinfo をデアロケートする。
この関数を、defaultTraceHandler によって生成された TraceInfo に対して呼び出す。 この関数を呼び出す。必要であれば、手動で管理されている TraceInfo リソースをクリーンアップし、無効にする。この後、オブジェクト はもはや有効ではない。
Parameters:
Throwable.TraceInfo info TraceInfo 。これは、 によって返された値でなければならない。 defaultTraceHandler によって返された値でなければならない。