The non allocating D subset

Tyler Jameson Little beatgammit at gmail.com
Fri Jun 7 08:01:27 PDT 2013


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 
> <beatgammit at gmail.com> 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.


More information about the Digitalmars-d mailing list