原文
創(chuàng)新互聯(lián)公司-成都網(wǎng)站建設(shè)公司,專注成都做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)站營銷推廣,申請域名,網(wǎng)絡(luò)空間,成都網(wǎng)站托管有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問題,請聯(lián)系創(chuàng)新互聯(lián)公司。更改編譯器1,已棄用遺漏沖突的extern (D) @system
函數(shù)定義同一
模塊中多個
函數(shù)的定義,在DMD 2.095.0
后已算錯誤.
但是,盡管有同樣混雜
,兩個實現(xiàn)顯式
的和推導(dǎo)
的@系統(tǒng)
屬性有區(qū)別時,編譯器不發(fā)出錯誤.
void foo() {}
void foo() @system {} //無錯誤
現(xiàn)在已修復(fù).如果有沖突@系統(tǒng)
實現(xiàn),現(xiàn)在發(fā)出棄用
警告.
從DMD2.112
開始,與其他模塊內(nèi)函數(shù)
類型沖突一樣,產(chǎn)生多個
定義錯誤.
2,在重載集
上棄用
調(diào)用__traits(getAttributes)
在此版本之前,__traits(getAttributes)
可在單個函數(shù)和重載集
上同時調(diào)用.但是后者,編譯器只
為第一個詞法定義
的函數(shù)收集
.此行為易錯
.考慮:
module test;
@("gigi")
void fun() {}
@("mimi")
void fun(int) {}
void main()
{static foreach(attr; __traits(getAttributes, fun))
pragma(msg, attr);
盡管未指示實際查詢
重載,上面代碼打印"gigi"
.總是選擇第一個
重載.
從本版開始
,棄用__traits(getAttributes)
的該用法.如果要處理指定重載,可結(jié)合使用__traits(getOverloads)
和__traits(getAttributes)
:
@("gigi")
void fun() {}
@("mimi")
void fun(int) {}
void main()
{static foreach (t; __traits(getOverloads, test, "fun"))
static foreach(attr; __traits(getAttributes, t))
pragma(msg, attr);
//打印
gigi
mimi
3,棄用無效
非空增量語句
該最后for
語句不應(yīng)產(chǎn)生值.現(xiàn)在檢測并顯示
棄用消息.以下for
語句都會觸發(fā)
棄用:
// 無副作用的計算"j"
int j;
for (;; j) {...}
// 不必要的解引用
for (ubyte* sp;; *sp++) {...}
// 第一個句子是塊語句
// 最后句子是函數(shù)字面,而不是塊語句
for({j = 2; int d = 3;} j + d< 7; {j++; d++;}) {...}
注意:調(diào)用返回空
的函數(shù),即使函數(shù)
閑著,也不棄用
.這是模板
代碼.
4,現(xiàn)在可在棧上分配
賦值給域
數(shù)組變量
的數(shù)組字面.
以前,它們總是與垃集
一起分配,因此在@nogc
中或更好C
代碼不可用
.導(dǎo)致頻繁使用
以下方法:
void main() @nogc
{int[3] buffer = [10, 20, 30];
int[] arr = buffer[];
}
現(xiàn)在可用一行
來寫:
void main() @nogc
{scope int[] arr = [10, 20, 30];
}
具有以下限制
:
1,必須顯式
注解變量域,而不僅是推導(dǎo)
域
2,必須傳遞-preview=dip1000
,以避免在舊代碼中引入內(nèi)存破壞
.
3,注意,在@系統(tǒng)
及@信任
代碼中,編譯器不會驗證域
變量是否逃逸
.
4,數(shù)組字面
必須初化變量.隨后數(shù)組字面賦值仍然使用GC
.
5,數(shù)組
元素不能有析構(gòu)器
其中一些限制
可能會在未來取消.
5,靜斷
現(xiàn)在支持多個消息參數(shù)
條件
計算結(jié)果為假
時,后續(xù)式
都轉(zhuǎn)換
為串
然后連接.生成
的串診斷
與錯誤
一起打印出來.
enum e = 3;
static assert(false, "a = ", e);
打印:
`file.d(2)`:錯誤:靜斷:`a=3`
6,添加-preview=systemVariables
自接受DIP1035
系統(tǒng)變量以來,@safe
代碼無法再訪問
標(biāo)記為@system
的變量.為了避免代碼中斷
,編譯器從發(fā)出
棄用警告開始.預(yù)覽開關(guān)
會轉(zhuǎn)換為錯誤
,且在未來
版本默認(rèn)
啟用.
@system int* p;
struct S
{@system int i;
}
void main() @safe
{int x = *p; // 有開關(guān),算失敗,否則,發(fā)出棄用
S s;
s.i = 0; // 同上.
}
注意,目前僅限顯式
標(biāo)記為@system
的變量,尚未實現(xiàn)基于變量初化器
的推導(dǎo)@system
.
生成Throwable.TraceInfo
,默認(rèn)值現(xiàn)在是@nogc
的.工作方式:運(yùn)行時
現(xiàn)在有2個
跟蹤相關(guān)函數(shù),一個分配
,另一個
來釋放
跟蹤信息.兩者都通過相同的Runtime.traceHandler
函數(shù)來設(shè)置的.設(shè)置釋放
函數(shù)的第二個
參數(shù)是可選
的(因此不會影響
現(xiàn)有代碼).
拋Throwable
時,如果尚未
設(shè)置跟蹤信息
,運(yùn)行時用指定
函數(shù)來分配
跟蹤信息.如果釋放
函數(shù)為非空
,則復(fù)制
函數(shù)指針到可拋(Throwable)
對象中,并復(fù)制到infoDeallocator
新成員中.析構(gòu)
可拋(Throwable
)時,如果設(shè)置了infoDeallocator
成員,則會在info
成員上調(diào)用它.
默認(rèn)分配器和釋放器
現(xiàn)在使用C
的malloc
并自由分配和釋放TraceInfo
.現(xiàn)在除了TraceInfo
對象自身的分配
,幾乎
都已是nogc
了.
好處:
現(xiàn)在可在GC
收集例程
中運(yùn)行
時生成棧跟蹤
.InvalidMemoryOperationError
現(xiàn)在有棧跟蹤
.
鮮為人知的是,即使在@nogc
函數(shù)中,拋Throwable
也是在使用GC
,但現(xiàn)在(默認(rèn))不再是這樣.
已修復(fù)一些GC
掛起.
可能缺點(diǎn)是,在最終析構(gòu)Throwable
時釋放TraceInfo
,從而導(dǎo)致
潛在指針懸掛
.如果從Throwable
外復(fù)制info
,請確保不要讓它超出可拋(Throwable)
的生命期,或確保設(shè)置infoDeallocator
成員為null
.
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
本文題目:d的102版更改-創(chuàng)新互聯(lián)
鏈接分享:http://www.rwnh.cn/article38/dghesp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、用戶體驗、自適應(yīng)網(wǎng)站、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容