DIP1000 and immutable
jmh530
john.michael.hall at gmail.com
Tue Apr 27 14:28:12 UTC 2021
What is the motivation for DIP1000 also applying to immutable?
For instance, in the code (compiled with -dip1000), adapted from
the spec [1], you get the same errors with immutable function
parameters as you would with mutable ones. However, should it
ever matter if you escape an immutable?
```d
@safe:
void thorin(scope immutable(int)*) {}
void gloin(immutable(int)*) {}
immutable(int)* balin(scope immutable(int)* q)
{
thorin(q);
gloin(q); // error, gloin() escapes q
return q; // error, cannot return 'scope' q
}
void main() {
immutable(int) x = 2;
immutable(int)* ptrx = &x;
immutable(int)* ptrz = balin(ptrx);
}
```
I tried basically the same thing in Rust and it doesn't generate
errors (their borrow checker should be assuming scope by default).
```rust
#![allow(unused_variables)]
fn gloin(x: &i32) {
}
fn ballin(x: &i32) -> &i32 {
gloin(x);
return x;
}
fn main() {
let x = 2;
let ptrx = &x;
let ptrz = ballin(ptrx);
}
```
[1] https://dlang.org/spec/function.html#scope-parameters
More information about the Digitalmars-d-learn
mailing list