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