你在D编程语言中做过或看过的最酷的有点实用的元编程黑客是什么?有点实际意味着排除例如编译时光线跟踪器.
任意精度类型它在编译时生成ASM代码(在编译器之前)
Scrapple工具中的DParse是一个模板化的解析器生成器.但是,ldc是唯一一个具有正常运行的编译时间GC的D编译器(但即便如此,它也有几个奇怪的随机崩溃).我玩了一点,你可以做一些有趣的事情,如配置文件解析和东西,但直到编译时GC完全运行,你不能做大事.
就彻头彻尾的最酷而言,我不得不说Kirk McDonald的PyD(和其他类似的绑定),因为它们在检测和处理许多不同类型以及复杂的代码生成方面做了大量的工作.
也就是说,PyD只获胜,因为BLADE在技术上使用CTFE,而不是模板.
从更个人的角度来看,D模板已经在我的研究项目中得到了广泛的应用.它是一个模拟框架,模块可以在其中定义自己的私有数据类型.向框架公开新的用户类型需要一行代码,该类代码为类型创建XML解析器以及关联的网络序列化/反序列化代码.
该d/Objective-C的大桥使用模板,让你操纵D. Cocoa对象
我最喜欢的是来自tools.base的ElemType和KeyType:
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; }
编译时间字符串散列.您可以使用它来混淆代码中的嵌入字符串.只需搜索"哈希".该页面上还有其他一些有趣的样本.
一个团结类型模板结构(它不会让你做出错误的单位.)
一个例子是D标准库中的位域设施,它从用户指定的布局开始生成用于位字段操作的代码.
该元组设备是另一个例子.它根据用户提供的类型和可选名称生成元组.除了注入命名字段外,其中没有很多生成的umph,但我认为这是一个说明性的例子.
在不了解Lambert的漏洞利用的情况下,我刚刚将memoize添加到标准库中 - 请参阅此处获取文档,此处查看代码,此处参阅相关新闻组讨论.
我工作的另一个工具是高阶函数,它将整数或实值函数制成表格(例如,提供快速指数).那尚未准备好发布了.
一旦在编译期间允许创建对象,就可以很容易地创建例如在编译期间执行所有自动生成的正则表达式引擎.
我会回答我自己的问题,因为当我问这个时,这个问题不存在.我给垃圾收集器编写了一个补丁,它使用模板和编译时内省来为任意复杂的用户定义类型生成指针偏移信息,以便进行精确的堆扫描,而不是在编译器中完成.