DMD front-end can be used as a library with Dub

Chris Wright via Digitalmars-d digitalmars-d at puremagic.com
Thu Sep 1 18:56:41 PDT 2016


On Thu, 01 Sep 2016 18:42:13 +0200, Rory McGuire via Digitalmars-d wrote:

> Thanks, for the GC stub, that will be great for playing with whether or
> not a little dmd app crashes after gc_annihilate(true).
> 
> Did I understand that right?

It sounds like this there's a special function `gc_annihilate` that 
immediately frees all memory that libdmd has allocated. It doesn't do any 
reference tracking or mark/sweep. libdmd disables the collector as dmdfe 
does.

You need to keep dmd in its own DLL. Otherwise, symbols between dmd and 
your application will be deduplicated or something and either you get a 
linker error or an arbitrary implementation is selected.

Another safe way of working is to use the GC as usual, but before you 
call into libdmd, you call GC.disable, and you wait until you've finished 
using the data structures it returns before calling GC.enable.


More information about the Digitalmars-d mailing list