什麼是最酷的有點實用元編程黑客你已經完成或看到在D編程語言完成?比較實用的方法是排除編譯時光線追蹤器等。D模板:最酷的破解
回答
的D/Objective-C Bridge使用模板,讓你操控可可對象D.
DParse在豬肉餅的工具是一個模板解析器生成。但是,ldc是唯一一個運行編譯時GC的D編譯器(但即使如此,它也有幾個奇怪的隨機崩潰)。我已經玩了一下,你可以做一些有趣的事情,如配置文件解析和東西,但直到編譯時GC完全運行,你不能做大事情。
我最喜歡的是ElemType和關鍵字類型從tools.base:
template ElemType(T) {
alias typeof((function() {
foreach (elem; Init!(T)) return elem; assert(false);
})()) ElemType;
}
template KeyType(T) {
alias typeof((function() {
foreach (key, elem; Init!(T)) return key; assert(false);
})()) KeyType;
}
Compile time string hashing。您可以使用它來混淆代碼中的嵌入字符串。只需搜索「散列」。該頁面上還有不少其他有趣的示例。
一個united type template struct(它不會讓你做出錯誤的單位)。
An arbitrary precision type它在編譯時產生ASM代碼(編譯器之前)
我會回答我自己的問題,因爲這個問題在我問到時不存在。我給垃圾收集器寫了一個補丁,它使用模板並編譯時間自省來爲任意複雜的用戶定義類型生成指針偏移量信息,以便進行精確的堆掃描,而不是在編譯器中完成。
我寫了一個memoize的()函數,它的標題是這樣的(代碼是有點長了粘貼在這裏):
汽車memoize的(TFunc)(TFunc FUNC);它的作用是給它一個函數的地址,它返回一個強類型委託(與原函數相同的簽名和返回類型),它緩存原函數的返回值,以便調用它兩次使用相同的參數只調用一次底層函數。例如,這是斐波那契數列的「遞歸」定義,它以線性而不是指數時間執行:
uint fib(uint n) {return n> 0? n> 1?(n - 1)+ memoize(& fib)(n - 2):1:0;記憶(& fib) }
您可以正常調用它,如:fib(1000);
編輯:我發佈的鏈接的前代碼相當可怕; this version is much more elegant。
將代碼發佈到github並分享它。那麼,如果你想。 – 2010-12-14 16:41:37
一個例子是D的標準庫中的bitfields工具,它生成從用戶指定的佈局開始的位字段操作代碼。
Tuple facility是另一個例子。它根據用戶提供的類型和可選名稱生成一個元組。除了注入已命名的字段外,沒有太多生成的umph,但我認爲這是一個說明性示例。
不知道蘭伯特的利用我只是說memoize的到標準庫 - 參見here的文檔,here的代碼,並here對相關新聞組討論。
我工作的另一個工具是一個高階函數,它將積分或實值函數列表(例如提供快速指數)。這還沒有準備好發佈。
一旦在編譯過程中允許創建對象,將很容易創建例如正則表達式引擎,在編譯過程中執行所有自動機生成。
混入閱讀並從Stream對象編寫簡單的結構:
template TStructReader() {
private alias typeof(*this) T;
static T opCall(Stream stream) {
assert(stream.readable);
T ret; stream.readExact(&ret, T.sizeof);
return ret;
}
}
template TStructWriter() {
private alias typeof(*this) T;
void write(Stream stream) {
assert(stream.writeable);
stream.writeExact(this, T.sizeof);
}
}
使用方法如下:
align (1) struct MyStruct {
... definitions here ...
mixin TStructReader;
mixin TStructWriter;
}
auto ms = MyStruct(stream);
ms.write(stream);
LuaD也廣泛使用元編程與Lua的無縫交互。 您可以使用單個命令註冊整個班級。
- 1. D編程模板
- 2. D中的模板實例化理解模板,模板混合模板,模板函數和範圍
- 3. 如何repruduce IE玉模板破解
- 4. jquery模板正在破解腳本
- 5. d模板:那種類型
- 6. 視覺d代碼模板
- 7. MultiWidget打破模板
- 8. 打破Silverstripe模板
- 9. C++模板和我最初的理解
- 10. 從延伸模板覆寫一個`include`d模板內的塊
- 11. Drupal:修改模板而不破解模塊
- 12. 我的模板模型破壞togglePanel()?
- 13. 有人可以解釋D語言模板速記形式嗎?
- 14. 破折號神社模板
- 15. emberjs itemController打破arrayControllers模板
- 16. 模板打破流星包
- 17. jquery.tmpl模板破XHTML驗證
- 18. 酷酷時的Groovy錯誤
- 19. 僅在Django模板中破解的UTF-8字符
- 20. Angular 2,模板錯誤破解簡單的網站
- 21. psexec -d選項打破vbscripts
- 22. 的Joomla菜單,破壞我的模板
- 23. Magento的電子郵件模板:塊模板繼承破
- 24. 破解N位RSA模數
- 25. IE問題最酷的DHTML日曆
- 26. 什麼是WPF最酷的功能
- 27. 設置Sinatra模板選項在本地工作,破解Heroku
- 28. 破損的電子郵件模板
- 29. 最新的Docker更新破解Heroku cli?
- 30. 破解密碼的最佳循環
給它一個D大小的語法(~200個生產)「僅」需要7分鐘和700MB來編譯。 (完全披露,我寫了dparse) – BCS 2008-11-04 18:42:01