On Friday, 17 July 2015 at 12:43:33 UTC, Martin Nowak wrote:
- nothrow
Nice, the compiler must not emit exception handling code, but
the real
problem is how bad dmd's EH code is.
https://issues.dlang.org/show_bug.cgi?id=12442
State of the art EH handling is almost "zero cost",
particularly if
compared to other error handling schemes.
As others have pointed out, it's an important semantic
distinction. The performance gains (if any) are secondary.
- @nogc
Why is this needed on a per function level? If one doesn't
want to use
the GC it could be disabled on a per-thread or per-process
level.
We now have a GC profiler, which is a good tool to find
unwanted
allocations.
Of course we need to change many phobos functions to avoid
allocations, but @nogc doesn't help us to design better APIs.
Disagree here, too. Thread, process or module level is too
coarse. @nogc as an attribute allows to avoid the GC on those
levels, but can also be used in a much finer-grained way.
- pure
The compiler can reuse the result of a strongly pure function
call,
but compilers can do CSE [ยน] for ages. CSE requires inlining
to determine
whether a function has a sideeffect, but reusing of results
is almost
exclusively useful for functions that are small enough to be
inlined anyhow.
Agreed, that's probably unimportant.
The result of a strongly pure functions has unique ownership
and can
be implicitly cast to immutable. Nice insight, but is that any
good?
Yes, definitely. Uniqueness is an important property, and we just
don't utilize it properly yet. I believe what we have right now
is barely the beginning.
- @safe
Nice idea in theory, but why not do this as a compiler switch
for the
modules being compiled (with an @unsafe {} guard).
Not sure I understand the part in parentheses. Likely, module
level will be too coarse. Or do you mean we should have
@safe-by-default, but only opt out of it with an @unsafe block,
which however only works with a particular compiler switch? I
don't see much use for such a switch.
(Of course, there are various other problems with the current
concept and implementation.)
In general, I'm not sure why you choose to go the way of
abolishing the attributes. Didn't you have a concept for
inference that would mostly solve the problems?