D語言 DMD 0 168發布

2021-08-29 04:29:42 字數 1238 閱讀 9147

新特性:

1、給委託增加ptr屬性,指向委託所繫結的物件。

這是乙個語法糖,dg.ptr被轉化為cast(void*)dg,它只能作右值,所以除了能讀取它以外,在語法上禁止對它賦值。要想把委託繫結到不同的物件,你只能自己實現:

class

foovoid

bar()

}void

main()

void

**ptr 

=cast(

void**)

&dg;

foreach

(foo foo; foos)}

這種方式也不是我們所希望的,一般來說委託繫結到多個物件時,因為是取到某成員函式指標,再進行繫結。比如模擬乙個activesupport所擴充套件的乙個ruby.array#map用法:

import std.stdio;

class

foovoid

bar()

}class

array(t)

void

map(

void

function() func)}}

void

main()

是的,delegate內部儲存了2個指標,所以我們可以容易地hack它。

[注:上面的main函式中陣列直接量賦給棧物件也是這個版本中新增的內容,顯然只能用於static物件是很雞肋的。這裡簡單帶過不提。]

[注:上面這個map的模擬並不是activesupport的map擴充套件的全部用途,那個map還是收集返回值,這裡只演示呼叫語法。activesupport中擴充套件的map呼叫語法是map(&:to_s),就可以收集到陣列中所有元素呼叫to_s後的返回值。]

2、給內嵌內的例項增加outer屬性,指向外層物件。

import std.stdio;

class

outer

this

()void

foo()

}void

main()

這個特性可能應用並不是很廣吧。

3、mixin多個析構函式。

template a()

~this()}

template b()

}class

cvoid

main()

這些析構函式會和mixin相反的順序執行。我不明白的是,為什麼不讓mixin多個建構函式?為何不讓這些建構函式晚於被mixin的類(上面的c類)的建構函式,並按mixin進來的順序執行?

D語言 DMD 0 166發布

這一版本在強大的民意壓力之下取消了上一版的 隱式轉換表示式為委託 這一特性,取而代之的是乙個lazy關鍵字。取消的理由是這個轉換太隱晦了,最好是顯式地標示出這種轉換,所以引入乙個lazy關鍵字。d語言還在發展中,很多特性都在嘗試,這種修改也不是第一次了。首先看看這個lazy。void log cha...

TypeScript 2 5 發布,增加語言級重構

在 typescript 2.5 版本中,microsoft 專注於提高開發人員的生產力,其範圍已經超出了 編輯器所提供的常見功能。u0026 xd u0026 xd u0026 xd typescript 是基於編輯經驗開發的一種語言,因此我們團隊在編輯器 型別檢查器以及支援編輯器 如 vs co...

TypeScript 2 5 發布,增加語言級重構

在 typescript 2.5 版本中,microsoft 專注於提高開發人員的生產力,其範圍已經超出了 編輯器所提供的常見功能。typescript 是基於編輯經驗開發的一種語言,因此我們團隊在編輯器 型別檢查器以及支援編輯器 如 vs code 的語言服務方面投入了精力。它不僅僅是 vs 和 ...