On Borrow Checking
Dukc
ajieskola at gmail.com
Fri May 2 10:14:34 UTC 2025
On Tuesday, 29 April 2025 at 17:12:41 UTC, Walter Bright wrote:
> I was quite intrigued with the borrow checker, and set about
> learning about it. While D cannot be retrofitted with a borrow
> checker, it can be enhanced with it. A borrow checker has
> nothing tying it to the Rust syntax, so it should work.
That's right.
>
> So I implemented a borrow checker for D, and it is enabled by
> adding the `@live` annotation for a function, which turns on
> the borrow checker for that function. There are no syntax or
> semantic changes to the language, other than laying on a borrow
> checker.
There's a difference.
In Rust, as I understand it, if you have a function like
```Rust
fn free(ptr: MyCustomPointer)
{ // ...
}
```
it is 100% safe to use. The compiler will not let you double-free
or use after free, unless you use the `unsafe` block to do so.
But you can't have
```D
@trusted void free(MyCustomPointer ptr)
{ // ...
}
```
in D because it would be unsafe to use from a non-`@live`
function.
If we had a way to say that "this function can be called from
`@safe`, if and only if it's usage is guarded with `@live`" then
it would be equal to the Rust borrow checker.
More information about the Digitalmars-d
mailing list