D's New GC and Object Allocation Pools
Mike via Digitalmars-d
digitalmars-d at puremagic.com
Sun Oct 26 19:15:01 PDT 2014
On Sunday, 26 October 2014 at 23:20:21 UTC, Mike wrote:
> Language support for this kind of thing would be nice. `@weak`
> attribute[1] perhaps, or `virtual`/`final` module methods
> anyone? `final` by default please. :)
>
> [1] -
> https://gcc.gnu.org/onlinedocs/gcc-4.9.1/gcc/Function-Attributes.html#Function-Attributes
This is turning into a fun little exploration. After reading
this issue [1], I discovered that DMD already compiles all the
runtime hooks as weak references, so you only need to declare a
new `_d_newclass` implementation anywhere in your source code to
override `new`.
version(DigitalMars)
{
extern (C) Object _d_newclass(const ClassInfo ci)
{
// add your own `new` implementation here
}
}
void main(string[] args)
{ }
Compile with:
dmd test.d
No special compiler/linker flags or symbol names. Cool!
LDC has support for decorating functions with LLVM attributes [2]
that could potentially include creating `weak` symbols, but LDC
will have to decorate `_d_newclass` this way in druntime before
overriding with this technique will be possible.
GDC also has infrastructure for supporting such attributes [3],
but the `weak` attribute will have to be added to the list, and
decorations added to `_d_newclass` in the same way.
Maybe I'll submit some pull requests and see how they're received.
I still don't know how to call the default implementation, using
this technique, without copying the source code from druntime.
That's not a deal-breaker, but it stinks.
The only way I was able to override `destroy` was to copy the
entire object.di from druntime to my project folder and modify
the code there. That also stinks.
This little skirmish has opened up a few possibilities for my
work. Very interesting.
Mike
[1] - https://github.com/ldc-developers/ldc/issues/405
[2] -
https://github.com/redstar/ldc/commit/69f231f48f355b6399d67950f057bea72f0a64c3
[3] - http://wiki.dlang.org/GDC/Using_GDC#Attributes
More information about the Digitalmars-d
mailing list