Go: A new system programing language
Walter Bright
newshound1 at digitalmars.com
Tue Nov 17 22:41:26 PST 2009
Sean Kelly wrote:
> Walter Bright Wrote:
>> Mixing D's gc world with manually managed memory isn't hard, as
>> long as the following rules are followed:
>>
>> 1. don't allocate in one language and expect to free in another 2.
>> keep a 'root' to all gc allocated data in the D side of the fence
>> (otherwise it may get collected)
>
> This may actually work in D 2.0. core.thread has thread_attachThis()
> to make the D GC aware of an external thread, and gc_malloc() is an
> extern (C) function. I haven't tested this extensively however, so
> if you're keen to try it, please let me know if there are any
> problems.
There's a more fundamental problem. There is simply no reliable way to
find all the static data segments in a program. I talked with Hans Boehm
about this, he uses some horrific kludges to try and do it in the Boehm
gc. This problem is on every OS I've checked.
Windows has the bizarrely useless ability to find the beginning of your
TLS data segments, but not the end! Useless.
The D runtime knows about D's allocated segments because I fixed the
object file generation to provide that information. But if it's some
other compiler, it's hosed.
Therefore, one has to keep on the D side of the fence roots to all data
structures passed to foreign languages. It's pretty easy to do, just
don't forget it!
More information about the Digitalmars-d
mailing list