Migrating an existing more modern GC to D's gc.d

David Bennett davidbennett at bravevision.com
Tue Apr 10 08:37:47 UTC 2018


On Tuesday, 10 April 2018 at 08:10:32 UTC, Jonathan M Davis wrote:
>
> Yes. They expect it to work, and as the language is currently 
> designed, it works perfectly well. In fact, it's even built 
> into the language. e.g.
>
>     int[] foo() pure
>     {
>         return [1, 2, 3, 4];
>     }
>
>     void main()
>     {
>         immutable arr = foo();
>     }
>
> compiles thanks to the fact that the compiler can guarantee 
> from the signature of foo that its return value is unique.
>

Oh is that run at runtime? I thought D was just smart and did it 
using CTFE.

>
> We also have std.exception.assumeUnique (which is just a cast 
> to immutable) as a way to document that you're guaranteeing 
> that a reference to an object is unique and therefore can be 
> safely cast to immutable.
>

Can't say I've used std.exception.assumeUnique, but I guess other 
people have a use for it as it exists.

Would be nice if you could inject type checking information at 
compile time without effecting the storage class. But thats a bit 
OT now.

>
> Because of how restrictive shared and immutable are, you 
> frequently have to build them from thread-local, mutable data. 
> And while it's preferable to have as little in your program be 
> shared as possible and to favor solutions such as doing message 
> passing with std.concurrency, there are situations where you 
> pretty much need to have complex shared objects. And since D is 
> a systems language, we're a lot more restricted in the 
> assumptions that we can make in comparison to a language such 
> as Java or C#.
>

Yeah i agree that any solution should keep in mind that D is a 
systems language and should allow you to do stuff when you need 
to.

Oh, I just had a much simpler idea that shouldn't have any 
issues, I'll see if that makes the GC faster to allocate. 
(everything else is the same)


More information about the Digitalmars-d mailing list