forked from kinaba/dlang-ref-jp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathglossary.dd
More file actions
235 lines (201 loc) · 9.36 KB
/
glossary.dd
File metadata and controls
235 lines (201 loc) · 9.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
Ddoc
$(D_S 用語集,
$(DL
$(DT $(LNAME2 blit, $(ACRONYM BLIT, Block Transfer)))
$(DD BLT とも呼ばれます。blit は、
メモリをバイト毎にコピーすることを指します。
C では、memcpy という名前で呼ばれています。
この名前は DEC PDP-10 コンピュータの
BLT 命令に由来します。
)
$(DT $(LNAME2 ctfe, $(ACRONYM CTFE, Compile Time Function Evaluation)))
$(DD D の普通の関数を、
実行時ではなくコンパイル時に実行する機能のことを言います。)
$(DT code point) $(DD Unicode の用語で、$(LUCKY code point)
は論理的な一文字を指します。コードポイントの範囲は $(D 0)
から $(D 0x10FFFF) までです。$(D dchar)
型だけがコードポイントをそのまま格納できます; $(D char) や $(D wchar)
の配列は可変長のエンコーディング $(LUCKY UTF-8) や $(LUCKY UTF-16) を使っています。)
$(DT $(LNAME2 cow, $(ACRONYM COW, Copy On Write)))
$(DD COW はメモリ割り当て戦略の一種で、
配列に変更が加えられそうになったらコピーを行うというものです。
)
$(DT $(LNAME2 data_race, データ レース (Data Race))) $(DD あるスレッドがあるメモリ上の位置に対して読み書きしているときに、 同時に別のスレッドが同じ箇所を読み書きすること。
)
$(DT $(LNAME2 functor, ファンクタ (Functor))) $(DD ユーザー定義型 (struct または
class) で、関数呼び出し演算子 (Dの場合$(DC opCall))
が定義されており、関数と同じように使えるようなもののことを言います。
)
$(DT $(LNAME2 gc, $(ACRONYM GC, Garbage Collection)))
$(DD ガベージコレクション(ごみ集め)とは、
高尚に言うと自動メモリ管理のことです。メモリを割り当てて使って、
もう参照されなくなると、GCが自動的にそのメモリ領域を解放します。
対照的に、明示的メモリ管理を採用した場合は、
プログラマがメモリ割り当てとメモリ解放の対応関係に
ちゃんと注意しなければなりません。
)
$(DT 高階関数 (Higher-order function)) $(DD 他の関数を引数として受け取ったり、
返値として返したり、あるいはその両方を行う関数。
)
$(DT $(LNAME2 IFTI, $(ACRONYM IFTI, Implicit Function Template Instantiation)))
$(DD 関数テンプレートを、
テンプレート型引数を明示して渡さずともインスタンス化できる能力のことを指します。
この場合は、
実行時引数から自動的に型が推論されます。)
$(DT 不正(Illegal))
$(DD あるコードが不正であるとは、
Dの言語仕様に従っていないことを意味します。
例えコンパイラや実行時ライブラリがエラーを検出できなかったとしても、
不正なものは不正です。
)
$(DT 入力レンジ (Input range)) $(DD メンバ関数
empty, head, next が定義された型 (つまり、構造体やクラス):
入力レンジは狭義の1パス処理です: レンジのコピーの中にイテレーションの
状態を保存することはできません。$(LINK2
phobos/std_range.html,range) 参照。)
$(DT 実装定義の動作(Implementation Defined Behavior))
$(DD D言語の動作のうち、
定義は言語処理系の実装者に任されているもののことを言います。
実装定義の動作の例としては、ポインタのサイズがあります:
32bitマシンではポインタは4byteで、
64bitマシンでは8byteになるでしょう。
言語の実装定義の動作の部分を最小に押さえることで、
コードのポータビリティが最大になります。
)
$(DT $(LNAME2 nrvo, $(ACRONYM NRVO, Named Return Value Optimization)))
$(DD
$(P NRVO は、(この名前がついたのはもっと後ですが)
1991年頃に Walter Bright によって発明された、
構造体のコピー回数を最小化する技術です。
関数は通常、返値をレジスタで返します。
しかし、構造体の場合、ほとんどはレジスタに入らないサイズです。
これに対する普通の解決策は、
呼び出し側のスタックフレームにある構造体への $(I hidden pointer) を関数に渡して、
返値はそこにコピーするという方法です。
例えば:
)
---
struct S { int a, b, c, d; }
S foo()
{
S result;
result.a = 3;
return result;
}
void test()
{
S s = foo();
}
---
$(P これが下のように変換されます:)
---
S* foo(S* hidden)
{
S result;
result.a = 3;
*hidden = result;
return hidden;
}
void test()
{
S tmp;
S s = *foo(&tmp);
}
---
$(P この書き換えでは、余分な構造体オブジェクト $(D tmp) が一つできて、
構造体の中身は2回コピーされます。
NRVO が行うのは、変数 $(D result)
の参照は全て $(D *hidden) で置き換えられると判断することです。
$(D foo) はこのとき、
次のように書き換えられます:
)
---
S* foo(S* hidden)
{
hidden.a = 3;
return hidden;
}
---
$(P $(D foo) の呼び出し側でさらに強力な最適化を加えることで、
もう1つのコピーも消えて無くなり:)
---
void test()
{
S s;
foo(&s);
}
---
$(P 他のインスタンスを作って持ち回る代わりに、
結果は直接 $(D s) へと書き込まれるようになります。)
)
$(DT $(LNAME2 narrow strings, narrow strings)) $(DD
$(D char), $(D wchar) やその修飾付きバージョンの配列は、
すべて narrow string に分類されます。($(D string) と $(D
wstring) も含まれます。) 標準ライブラリ内のレンジに基づく関数は、
narrow string を特別に扱い、
UTFでエンコードされた文字の列として自動的にデコードします。)
$(DT $(LNAME2 opApply, opApply))
$(DD コレクションの要素を順々に処理するための特別なメンバ関数です。
この関数は
$(LINK2 statement.html#opApply, $(I ForeachStatement)) で使用されます。
)
$(DT $(LNAME2 opApplyReverse, opApplyReverse))
$(DD コレクションの要素を逆順に処理するための特別なメンバ関数です。
この関数は
$(LINK2 statement.html#opApplyReverse, $(I ForeachStatement)) で使用されます。
)
$(DT $(LNAME2 pod, $(ACRONYM POD, Plain Old Data)))
$(DD とは、隠しメンバを持たず、
仮想関数を持たず、継承もしておらず、
デストラクタもなく、
単純なビットごとのコピーで初期化や複製ができるデータ構造のことです。
D の構造体は POD です。
)
$(DT $(LNAME2 predicate, Predicate)) $(DD
Booleanの結果を返す関数やdelegateのこと。述語は、
零項 (nullary, 引数なし), 単項 (unary, 引数1つ), 二項 (binary,
引数2つ), n項 (n-ary, 引数n個) などの種類があります。
述語という名前は、
述語を引数として受け取る高階関数の説明によく登場します。
)
$(DT $(LNAME2 raii, $(ACRONYM RAII, Resource Acquisition Is Initialization)))
$(DD RAII とは、クラスオブジェクトのスコープが終わるところで
呼ばれるデストラクタを利用するテクニックです。
その呼ばれたデスクトラクタが、
そのオブジェクトが確保したリソースを解放します。
RAII は、短い区間でのみ使うリソースか、
解放される時点が明確である必要のあるリソースに対して用います。
D では、RAIIオブジェクトは $(D scope) 記憶域クラスを使って作成します。
)
$(DT $(LNAME2 sequential_consistency, Sequential Consistency))
$(DD あるスレッドである順序で書き込まれたデータが、
別のスレッドからは同じ順序で観測可能になること。
)
$(DT $(LNAME2 sfinae, $(ACRONYM SFINAE, Substitution Failure Is Not An Error)))
$(DD テンプレートの推論の結果 valid でない型が出てきた場合は、
コンパイルエラーとするのではなく、
単にその推論を失敗とする、という方針のことを言います。
$(LINK2 http://www.semantics.org/once_weakly/w02_SFINAE.pdf, SFINAE) 参照。
)
$(DT $(LNAME2 tmp, $(ACRONYM TMP, Template Metaprogramming)))
$(DD TMP は言語のテンプレート機能を使って、
実行時ではなくコンパイル時に処理を行うことをいいます。)
$(DT $(LNAME2 tls, $(ACRONYM TLS, Thread Local Storage)))
$(DD TLS とは、グローバルなデータ用の記憶領域を各スレッド毎に別々に割り当てたもののことを言います。
$(LINK2 http://en.wikipedia.org/wiki/Thread-local_storage, Wikipedia)
も参照のこと。)
$(DT $(LNAME2 undefined_behavior, $(ACRONYM UB, 未定義動作 (Undefined Behavior))))
$(DD 未定義動作は、不正なコードが実行されたときに発生します。
未定義動作の結果は、ランダムな値や、エラー的な挙動、
クラッシュ、失敗などなどになります。
バッファオーバーフローが未定義動作の例です。
)
)
)
Macros:
TITLE=用語集
WIKI=Glossary
D=<span class="d_inlinecode">$0</span>
LUCKY=$(WEB google.com/search?btnI=I%27m+Feeling+Lucky&ie=UTF-8&oe=UTF-8&q=$0,$0)
WEB=$(LINK2 http://$1,$2)
CATEGORY_APPENDICES=$0