Overload using nogc
Kapps via Digitalmars-d
digitalmars-d at puremagic.com
Sun Nov 23 00:57:14 PST 2014
On Friday, 21 November 2014 at 03:36:30 UTC, Jonathan Marler
wrote:
> Has the idea of function overloading via nogc been explored?
>
> void func() @nogc
> {
> // logic that does not use GC
> }
> void func()
> {
> // logic that uses GC
> }
> void main(string[] args) // @nogc
> {
> // if main is @nogc, then the @nogc version of func
> // will be called, otherwise, the GC version will be
> func();
> }
>
> This could be useful for the standard library to expose
> different implementations based on whether or not the
> application is using the GC.
If you need temporary allocations on the heap, and already have
an implementation using nogc anyways, it's better to do that even
for the GC version.
The only difference I can see would be in returning values, and
having whether the returned memory is managed by the GC or by the
caller be based off the overload seems extremely dangerous.
Template functions in particular could be either nogc or not with
inference, and making the caller nogc shouldn't make it suddenly
leak memory.
Instead consider passing in an allocator. Then it's explicit,
more flexible, and more different.
More information about the Digitalmars-d
mailing list