Migrating an existing more modern GC to D's gc.d
Steven Schveighoffer
schveiguy at yahoo.com
Tue Apr 10 11:48:01 UTC 2018
On 4/10/18 4:37 AM, David Bennett wrote:
> 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.
Well, D could be smart enough and call a runtime function that says it's
moving data from thread-local to shared (or vice versa).
>
>>
>> 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.
assumeUnique is a library function, it could be instrumented to do the
right thing.
I think it's possible to do this in D, but you need language support.
-Steve
More information about the Digitalmars-d
mailing list