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

用語集

目次
    ACC (Associated C Compiler)
    Dコンパイラは、Associated Cコンパイラに一致する。 たとえば、Win32ではImportCはDigital Mars Cコンパイラに一致し、 コマンドラインスイッチを使用してVisual Cコンパイラに一致させることができる -m32mscoff。 Win64では、"ImportC"はVisual Cコンパイラに一致する。 Posixターゲットでは、一致するCコンパイラはGnu CまたはClang Cである。
    BLIT(ブロック転送)
    BLTとも呼ばれるBLITは、メモリのバイト単位のコピーを指す。 C言語では、これはmemcpy操作と呼ばれる。 この名称は、 DEC PDP-10コンピュータのBLT命令に由来する。
    CTFE(コンパイル時関数評価)
    通常のD言語の関数を実行する能力を指し、 実行時ではなくコンパイル時に実行される。
    コードポイント
    Unicodeの用語では、コードポイントとは 論理的な文字である。コードポイントの範囲は0から0x10FFFF である。dcharのみがコードポイントを直接格納でき、char およびwchar の配列は 可変長エンコーディングのUTF-8およびUTF-16を使用する必要がある。
    COW(コピーオンライト)
    COWは、通常は大きな参照オブジェクトが 変更される場合にコピーされるメモリ管理戦略である。COWの一定のオーバーヘッドは 高くなる可能性があるが、そうでなければ多くの 事前コピーを行うアプリケーションでは望ましい場合がある
    データ競合
    2つ以上のスレッドが同じメモリロケーションに書き込みを行う。 プログラムの動作は、これらのメモリアクセスの任意のシーケンスに依存する可能性がある。
    ファンクタ
    関数呼び出し演算子(DではopCall )を定義するユーザー定義型(構造体または クラス)で、
    GC(ガベージコレクション)
    ガベージコレクションは、自動メモリ管理の一般的な名称である。 メモリは割り当てられ、使用される。 ガベージコレクションは、参照されなくなったメモリ領域を自動的に解放する。 これに対し、明示的なメモリ管理では、 プログラマーが各割り当てを free()の1つの呼び出しと慎重に一致させる必要がある。
    高階関数
    他の関数をパラメータとして受け取り 、関数を返す、またはその両方を行う関数。
    IFTI(Implicit Function Template Instantiation)
    テンプレート化された関数をインスタンス化する能力を指す。 テンプレートに型を明示的に渡す必要はない。 代わりに、型は実行時引数の型から自動的に推論される。 詳細は仕様を参照のこと。
    不正
    コードの構造が"D言語"の仕様を満たさない場合、そのコードは不正である。 コンパイラやランタイムがエラーを検出できない場合でも、これは真実である可能性がある 。
    入力範囲
    メンバー関数empty、head、nextを定義する型(すなわち、構造体またはクラス)。 入力範囲は、 厳密に1回のみの処理であると想定される。 反復処理の状態を範囲のコピーに保存する方法はない。rangeも参照のこと。
    処理系定義の動作
    これは、"D言語"の動作のバリエーションであり、 その言語の実装者に委ねられている。 処理系定義の動作の例としては、ポインタのバイト数がある。 32ビットマシンでは4バイト、 64ビットマシンでは8バイトとなる。 言語における処理系定義の動作を最小限に抑えることで、
    l値
    l値とは、アクセス可能なアドレスを持つ値を指す抽象的な用語である & 。典型的な lvalue の例としては、 変数、const またはimmutableで導入された定数(enum は除く)、および配列や連想配列の要素が挙げられる。ref を返す関数への呼び出しやポインタの参照式も lvalue である。lvalue は参照渡しにより関数に渡す(または関数から返す)ことができる。 lvalue は rvalue の対義語である。
    NRVO(名前付き戻り値最適化)

    NRVOは、1991年頃にウォルター・ブライト氏によって考案された(この用語は後に作られた)技術であり、 構造体データのコピーを最小限に抑えることを目的としている。 関数は通常、関数の戻り値を レジスタに返す。しかし、構造体の場合、戻り値が大きすぎて レジスタに収まらないことが多い。この問題に対する一般的な解決策は、 関数に呼び出し元のスタックフレーム内の構造体インスタンスへの隠しポインタを渡し、 戻り値はそこにコピーされる。 たとえば、

    struct S { int a, b, c, d; }
    
    S foo()
    {
        S result;
        result.a = 3;
        return result;
    }
    
    void test()
    {
        S s = foo();
    }
    

    は次のように書き換えられる。

    S* foo(S* hidden)
    {
        S result;
        result.a = 3;
        *hidden = result;
        return hidden;
    }
    
    void test()
    {
        S tmp;
        S s = *foo(&tmp);
    }
    

    この書き換えにより、一時オブジェクトtmp が追加され、 構造体の内容が2回コピーされる。 NRVOが行うのは、resultの唯一の目的が 戻り値を提供することであると認識することであり、resultへのすべての参照を *hidden で置き換えることができる。 foo は次のように書き換えられる。

    S* foo(S* hidden)
    {
        hidden.a = 3;
        return hidden;
    }
    

    foo への呼び出しに対してさらなる最適化を行い、 他のコピーを排除する。

    void test()
    {
        S s;
        foo(&s);
    }
    

    結果は、宛先s に直接書き込まれ、 2つの他のインスタンスを通過することなく、

    狭い文字列
    charwchar 、およびそれらの修飾バージョンを使用するすべての配列は、 ナロー文字列である。(これには、string および wstring も含まれる)。標準ライブラリの範囲指向関数は、 UTFエンコードされた文字を自動的にデコードすることで、ナロー文字列を特別に処理する。
    opApply
    コレクションを反復処理するために使用される特別なメンバ関数。 これは ForeachStatementで使用される。
    opApplyReverse
    コレクションを逆順で反復処理するために使用される特別なメンバ関数。 これは ForeachStatementで使用される。
    POD(Plain Old Data)
    隠しメンバを持たず、デストラクタを持たず、 単純なビットコピーで初期化およびコピー可能な構造体を指す。 詳細は「構造体」を参照のこと。
    述語
    ブール値を返す関数または デリゲート。 述語は、 引数を取らない)無引数、単項(引数1つ)、二項(引数 2つ)、またはn項(引数n個)である。 通常、 述語は高階関数の文脈で言及され 、パラメータとして述語を受け入れる。
    修飾子変換可能
    T は 型U に修飾子変換可能である。ただし、両者は修飾子のみが異なる場合に限られ 、T への参照は、言語規則に従ってU への参照に暗黙的に変換できる場合に限る 。
    RAII(リソース取得は初期化である)
    RAIIとは、 オブジェクトがスコープ外に出た際に 構造体またはクラス・オブジェクトのデストラクタが呼び出されるテクニックを指す。 デストラクタは、そのオブジェクトが取得したリソースを解放する。 RAIIは、不足しているリソースや 解放のタイミングが予測可能なリソースに対して一般的に使用される。 RAIIはscope ストレージクラスで宣言されたクラス変数に使用できる
    r値
    r値とは、アクセス可能なメモリアドレスを持たない式の結果として得られる値を指す抽象的な用語である。 このアドレスの欠如は 概念的なものであり、実装ではr値をアドレス指定可能なメモリに格納する自由がある。 r値は変更できず、参照渡し(または 関数からの戻り値)として渡すこともできない。r値は l値の対義語である。
    シーケンシャル一貫性
    あるスレッドで順序通りに書き込まれたデータが、 別のスレッドでも同じ順序で表示されること。
    SFINAE(Substitution Failure Is Not An Error)
    テンプレート引数の推論の結果、有効ではない型が生成された場合、 そのテンプレートの特殊化は それ以上考慮されない。コンパイルエラーではない。 SFINAEも参照。
    TMP(テンプレートメタプログラミング)
    TMPは、言語のテンプレート機能を使用して、 実行時ではなくコンパイル時にプログラムを実行する。
    TLS(スレッドローカルストレージ)
    TLSは、各スレッドにグローバルデータの独自のインスタンスを割り当てる。 Wikipediaも参照。
    UB(未定義の動作)
    未定義の動作は、不正なコード構造が実行された場合に発生する。 未定義の動作には、ランダムで予測不可能な結果、 クラッシュ、エラーなどが含まれる。 バッファオーバーフローは、未定義の動作の例である。
    UDA(ユーザー定義属性)
    ユーザー定義属性は、 コンパイル時のリフレクションに使用されるシンボルに付加されるメタデータである。
    UFCS(Uniform Function CallSyntax)
    Uniform function call syntax(統一関数呼び出し構文)とは、関数をあたかもそれが最初の引数のメソッドであるかのように呼び出すことができることを指す。 例えば、funct(arg) は、arg.funct() と表記できる。