DIP 1021--Argument Ownership and Function Calls--Final Review
Olivier FAURE
couteaubleu at gmail.com
Mon Sep 23 08:34:35 UTC 2019
On Friday, 20 September 2019 at 21:51:17 UTC, Walter Bright wrote:
> D supports FP as a useful paradigm, not as a religion. It
> allows one to easily mix&match FP with imperative code.
>
> I figure we can do the same for ownership/borrowing, that's why
> it has a separate function attribute (@live) for it.
That really depends on what you mean by "mix-and-match".
If you mean as a transition path, where you try to eliminate most
of the non- at live code as fast as you can, then yes.
If you mean, like with const, some parts of the code use it, some
parts don't, but the latter can call the former while remaining
@safe, then no.
Given @live as you described it, non- at live functions calling
@live functions would have to be @system or @trusted, which isn't
a state you want half your codebase to be in.
eg:
@safe @live
SmartPtr!int createPtr() {
return SmartPtr!int();
}
@safe @live
void removePtr(ref SmartPtr!int ptr) {
ptr.reset();
}
@safe
int* identity(return ref int n) { return &n; }
@safe
void test() {
auto ptr = createPtr;
int* p = identity(ptr.get());
removePtr(ptr);
*p = 1; // Memory corruption
}
More information about the Digitalmars-d
mailing list