W dniu 07.06.2013 17:01, Tyler Jameson Little pisze:
On Friday, 7 June 2013 at 14:46:30 UTC, Simen Kjaeraas wrote:
On Fri, 07 Jun 2013 16:39:15 +0200, Tyler Jameson Little
<[email protected]> wrote:
If the nogc marker could be used to overload functions then Phobos
may include both versions of the code - GC and non GC - as some code
may run faster under GC. The calling function would pick up the
right one.
I can't imagine how this would work without over-complicating the
syntax. Any ideas?
I don't understand what you mean. This is how that would work:
void foo() {} // #1, Not @nogc.
@nogc void foo() {} // #2.
void bar() {
foo(); // Calls #1.
}
@nogc void baz() {
foo(); // calls #2.
}
Ok, so it takes the @nogc flag from the calling function. I was thinking
it would involve including the attribute somewhere in the function call.
*facepalm*
In this case, I think this would work well. It seems attributes are
transitive, so the change to the language would be overloading based on
attributes. I'm not sure of all of the implications of this, but I
suppose it wouldn't be terrible.
I'm just not sure what this would do:
@nogc void foo() {} // #1
@safe void foo() {} // #2
@nogc void baz() {
foo();
}
Which gets called when -safe is passed? Is it a compile-time error, or
does it just choose one? I guess I don't understand the specifics of
attributes very well, and the docs don't even mention anything about
transitivity of attributes, so I don't know how much existing code this
would break.
What is the -safe option? I don't see it in DMD help.
@safe is specified without @nogc, but calling function is @nogc, so I
think that #1 should be chosen.