On Saturday, August 20, 2011 16:50:32 Sean Eskapp wrote: > Since the compiler can clearly tell when a function is not const, safe, > pure, or nothrow, why can't they just be assumed, unless proven otherwise?
As of 2.054, @safe, pure, and nothrow are inferred for delegates and templated functions. This is because whether they can be @safe, pure, or nothrow depends entirely on the types that they're instantiated with. For normal functions, there is no such inferrence. It's not needed. As for just assuming attributes, the language was designed like pretty much every other C-based language (C++, Java, C#, etc.) in that unless a function is marked with an attribute, it doesn't have that attribute. It _could_ have been designed the other way around, but then all of your attributes become stuff like mutable, impure, and throw. It doesn't really buy you anything. It just changes what attributes you have to mark stuff with. And whether you'd be using more attributes or fewer attributes with such a scheme would depend entirely on the code. But such a scheme would be entirely foreign to most programmers of C-based languages. - Jonathan M Davis