Idea #1 on integrating RC with GC

Ola Fosheim Grøstad" <ola.fosheim.grostad+dlang at gmail.com> Ola Fosheim Grøstad" <ola.fosheim.grostad+dlang at gmail.com>
Thu Feb 6 16:29:59 PST 2014


On Thursday, 6 February 2014 at 11:44:34 UTC, Michel Fortin wrote:
> That thread about buildPath started like this: "Walter and I 
> were talking about eliminating the surreptitious allocations in 
> buildPath". But reference counting will do nothing to eliminate 
> surreptitious allocations. It can't be that problem you're 
> trying to address.

I think stuff like buildPath just shows how the language should 
be geared more towards compiler optimizations of allocation if 
performance is a real goal.

The efficient thing to do is to optimize a string concat into a 
stack allocation (alloca) if it is a throw-away, and just change 
the stack frame upon return, with some heuristics and alternative 
execution paths in order to avoid running out of stack space.

E.g.
a(){
     return buildPath(...) ~ "!";
}

Compiles to:

a:
    call buildPath(...)
    alloca(size_to_endof_path_returned_by_buildPath+1)
    *someaddr = '!'
    return (stackbufferstart,length)


buildPath:
    stackbuffer=alloca(sum_of_lengths)
    copy...
    return tuple(stackbufferstart,length)


More information about the Digitalmars-d mailing list