forked from kinaba/dlang-ref-jp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathD1toD2.dd
More file actions
104 lines (83 loc) · 3.42 KB
/
D1toD2.dd
File metadata and controls
104 lines (83 loc) · 3.42 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
Ddoc
$(D_S $(TITLE),
$(P D言語に対して行われた変更の中で、
D1 から D2 へとソースコードを移行する際に影響するものは多くあります。
このドキュメントは、
どのようにコードを修正すればよいかのガイドです。
言語に対する変更点の一覧は、
$(LINK2 features2.html, >D 2.0 の新機能) のページをご覧下さい。
)
$(P このドキュメントはまだ不完全です。)
$(UL
$(LI 言語機能
$(UL
$(ITEMR new_keywords, 新しい予約語)
$(ITEMR global_variables, グローバル変数)
$(ITEMR static_arrays, 静的配列は値型)
$(ITEMR immutable_string, 文字列リテラルはimmutable)
)
)
$(LI Phobos ライブラリ
$(UL
)
)
)
$(ITEM new_keywords, 新しい予約語)
$(P D2 には以下の予約語が追加されています:
$(D_KEYWORD pure),
$(D_KEYWORD nothrow),
$(D_KEYWORD shared),
$(D_KEYWORD immutable)。
D1のコードがこれらの単語を使っていた場合は、リネームが必要です。
また、アンダースコア ( _ ) 2つで始まる変数名も、
すべてリネームが必要です。
)
$(ITEM global_variables, グローバル変)
$(P グローバル変数は、デフォルトでは、スレッドローカル記憶域に保存されるようになりました。
これをグローバル領域に戻すには $(D_KEYWORD __gshared)
記憶域クラスを指定します:)
---
int foo = 7; // D1 のコード
$(B __gshared) int foo = 7; // D2 で同じ事をする場合
---
$(P グローバル変数が暗黙に全てのスレッドで共有されるべきか、
各スレッド別の記憶領域に格納されるべきかは、
注意深く判断して下さい。
)
$(ITEM static_arrays, 静的配列は値型)
$(P D1では、関数引数に静的配列を指定した場合、参照渡しが行われました。
つまり、その静的配列の先頭を指すポインタが、
実引数として渡されました。
これはすなわち、関数内で配列の内容に変更を加えた場合、
呼び出し側にもその変更が見えるということです。
D2 では、静的配列のコピーが実引数として渡されます。
関数内での配列内容への変更は、
別のコピーへの変更ですから、
呼び出し側には見えません。)
$(P D1と同じ意味を保った動作にするには、予約語 $(D_KEYWORD ref)
を引数宣言に追加します:)
---
void foo(int[3] array); // D1 のコード
void foo($(B ref) int[3] array); // D2 で同じ事をする場合
---
$(ITEM immutable_string, 文字列リテラルは immutable)
$(P D1の文字列リテラルの型は $(D char[]) でしたが、
D2 では $(D immutable(char)[]) で、別名として
$(D string) に alias されています。
コードの移植には、通常、ソースコード全体を検索して以下の置換を実行する必要があります:)
$(TABLE1
$(TR $(TH from)$(TH to))
$(TR $(TD char[])$(TD string))
$(TR $(TD wchar[])$(TD wstring))
$(TR $(TD dchar[])$(TD dstring))
)
$(P Thこれで問題の大部分は解決するでしょう。
解決しなかった部分、つまり実際に書き換え可能な文字列が必要な部分では、
いくらかの作業が必要です。
)
)
Macros:
TITLE=D1 コードの D2 への移植
WIKI=D1toD2
ITEMR=$(LI $(LINK2 #$1, $+))
ITEM=<hr><h3><a name="$1">$+</a></h3>