我相信D有可能在其编译器套件中添加另一个很酷的特性,即不允许对纯函数进行非副作用调用。
例如
auto s = "a";
toStringz(a);错误应该就像
a == "";当前DMD中的错误为
Error: == has no effect in expression (s == "")这样的特性将防止程序员意外调用非静音算法时,他希望它具有就地(变异)的语义。这不需要使用GCC的__attribute((warn_unused_result))和__attribute((const))这样的属性显式地标记函数。
DMD的待办事项列表中是否有这样的功能?
发布于 2013-03-02 11:43:25
DMD没有官方的待办事项清单。它的开发主要是基于志愿者的工作,虽然一些增强请求在bugzilla中得到了“预先批准”标记,但是它并没有说明什么时候可以实现这个特性,或者什么时候会实现它。
考虑到现在有很多更严重的问题要解决,我很难想象在附近的几年里会有一些次要的事情发生。
此外,您的问题实际上看起来像提案,并且更适合官方的DMD/Phobos:http://d.puremagic.com/issues/。
发布于 2013-03-02 16:39:11
问题是D对模板的大量使用。您并不总是控制模板或它的参数。例如:
class Foo{
/*...*/
pure int foo(){
/*...*/
}
/*...*/
}
void bar(T)(T arg){
/*...*/
arg.foo();
/*...*/
}现在,您不能用bar参数调用Foo。这可以通过删除foo的纯净性(这可能会破坏代码和/或损害性能)或更改bar来存储foo()的结果来修复(这也很糟糕,因为它从不使用该值,因为foo的返回类型可能无效,甚至更糟--一个带有析构函数的struct (它的调用将被推迟到bar's执行的末尾)。当然,这只有在您可以更改Foo或bar时才有可能.
https://stackoverflow.com/questions/15173942
复制相似问题