Challenge: write a reference counted slice that works as much as possible like a built-in slice

Andrei Alexandrescu SeeWebsiteForEmail at erdani.com
Thu Nov 11 23:21:47 UTC 2021


On 2021-11-08 22:43, Paul Backus wrote:
> On Tuesday, 9 November 2021 at 01:14:24 UTC, tsbockman wrote:
>> Borrowing is required for a general-purpose RC type, so that the 
>> payload can actually be used without a reference to the payload 
>> escaping outside the lifetime of the counting reference. But, the 
>> effective lifetime of the counting reference is not visible to the 
>> `scope` borrow checker, because at any point the reference's 
>> destructor may be manually called, potentially `free`ing the payload 
>> while there is still an extant borrowed reference.
>>
>> With current language semantics, the destructor (and any other similar 
>> operations, such as reassignment) of the reference type must be 
>> `@system` to prevent misuse of the destructor in `@safe` code.
>>     https://issues.dlang.org/show_bug.cgi?id=21981
>>
>> The solution to this problem is to introduce some way of telling the 
>> compiler, "this destructor is `@safe` to call automatically at the end 
>> of the object's scope, but `@system` to call early or manually."
> 
> I believe it is also possible to make this `@safe` by doing borrow 
> checking at runtime, although it would introduce some overhead, and make 
> the API less ergonomic.
> 
> Maybe the best compromise we can reach in the current language is to 
> offer a `@safe` borrow-checked interface alongside an unchecked 
> `@system` interface.

This is interesting. Maybe you could add a little detail to the bug 
report or to this thread?


More information about the Digitalmars-d mailing list