On Friday, 17 July 2015 at 17:36:08 UTC, Martin Nowak wrote:
On Friday, 17 July 2015 at 16:40:56 UTC, Jonathan M Davis wrote:
On Friday, 17 July 2015 at 12:43:33 UTC, Martin Nowak wrote:
=================== Attributes are hardly useful ======================

nothrow and pure - pure especially - help with reasoning about code. You actually lose out a fair bit with them IMHO when they're inferred, since a lot of their value is derived from the programmer knowing for sure that a function is nothrow or pure.

But I already know if a function is "logically" pure or not from what it does.

http.get -> impure
writeln -> impure
swap -> pure
reduce/map/filter/any algo -> pure
containers -> pure (no longer when they use std.allocator?)
gettime -> impure
random -> impure
format string -> pure
fib -> pure (even when using a TLS memorization)

Using global state in a non-obvious way is an indicator for bad code.

Yes, but being able to have the compiler guarantee it is useful, and we've already seen some benefits from it in terms of implicit casts. I don't think that we've gotten the optimization benefits out of it that we should though. And while it's usually obvious that there's no global state, it's not always obvious - especially when you're dealing with higher level functions - and you can inadvertently end up with global state if a function buried in the chain didn't behave. Honestly, I think that pure is the biggest win out of all of the various attributes.

- Jonathan M Davis

Reply via email to