D語言超強的編譯時檢測技術,強型別技術

2022-09-12 03:03:13 字數 1159 閱讀 9510

d語言引入了static if , static assert , template , is 等一些語句,使得d語言可以使用編譯時執行邏輯處理,同時也能進行編譯時測試,這使得編譯器在編譯時就可以對自定義的類,結構,引數進行動態檢測,這樣讓定義的東西有了強型別功能,牛b之作。

點開第一句,定位到:

這個錯誤提示是由**提供的,而不是編譯器。這段**相當於擴充套件了編譯器,牛b吧。擴大了c++中的#if,#else巨集處理方式。

讓編譯器更加智慧型。 一直在想c#中什麼時候才會有編譯檢測技術(強型別技術),即在編譯時發現問題,而不等到執行時,等到執行裡是個糟糕的事情。 這比像c#中依賴於繼承關係,和where條件的檢測技術強大多了。

以前覺得c#中的where條件編譯時檢測技術

很牛,現在才發現d語言的更牛。

剛開始在看《d語言程式設計》這本書時,看到static if語言,還只是以為僅僅是#if巨集的替代產品,沒想到它具有這麼強大的威力。真是太不可思議了。下面來看個標準庫中實現型別判斷的函式是如何實現的:

編譯時型別判斷函式的實現

這是乙個使用模板實現的編譯時檢測函式,檢測條件有4個

template isinputrange(r)

//can test for empty

r.popfront(); //

can invoke popfront()

auto h = r.front; //

can get the front of the range

}));

}

這個檢測函式不僅可以在編譯時進行條件檢測,還可以在程式中使用,用於判斷物件是否實現inputrange需要的函式,欄位和屬性,這就比c#中只依賴繼承關係的is語句更加強大。

看了d語言幾天,真是越來越喜歡d語言了,真是牛b的不行不行的。

d的兩個編譯時

兩個階段 ast與ctfe,ast為生成樹,ctfe為編譯時求值.其實很簡單啦.ast樹,必須通過語義給樹加上意義,然後求值函式才能求值,對不對?不然,光是樹,是沒用的.其中,模板變函式,遇見了,先造乙個ast的模板,然後例項化時,就填充這個ast,然後加入整個生成樹裡面.ctfe,在語義分析與 生...

D語言中的編譯器指令(Pragma)

pragma pragma 標誌符 pragma 標誌符,表示式列表 pragma pragma identifier pragma identifier,expressionlist 編譯器指令用來給編譯器傳遞如何使用產品提供商對d的特殊擴充套件的資訊。指令以 結尾,它們可以影響一條語句 一塊語句...

D語言中的嵌入彙編 LDC編譯器

toc ldc編譯器可支援兩種書寫方式,一種是gcc格式的,另外一種需要呼叫內建的函式模板進行實現 無返回的定義 void asm char asmcode,char constraints,arguments.單返回定義 template asm t 多返回定義 struct asmtuple t...