The non allocating D subset

Piotr Szturmaj bncrbme at jadamspam.pl
Fri Jun 7 08:09:44 PDT 2013


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
>> <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.

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.


More information about the Digitalmars-d mailing list