More radical ideas about gc and reference counting
Tommi via Digitalmars-d
digitalmars-d at puremagic.com
Mon May 12 01:10:42 PDT 2014
On Monday, 12 May 2014 at 00:50:24 UTC, Walter Bright wrote:
> On 5/11/2014 1:59 PM, Timon Gehr wrote:
>> Borrowed pointers are not even superficially similar to near*.
>> They are
>> compatible with everything else, because they can store data
>> that was borrowed
>> from anywhere else.
>
> As long as those pointers don't escape. Am I right in that one
> cannot store a borrowed pointer into a global data structure?
Perhaps:
struct Test {
n: &'static int, // [1]
m: int
}
static val: int = 123;
static mut t: Test = Test { n: &'static val, m: 0 };
fn main() {
unsafe { // [2]
let p = &mut t.m;
*p = 456;
println!("{} {}", *t.n, t.m); // prints: 123 456
}
}
[1]: In order to create a static instance of 'Test', the 'n'
field (which is a borrowed pointer) must be specified as to be
pointing at a static immutable (int) variable.
[2]: Any use of static mutable data requires the use of an
'unsafe' block (similar to @trusted in D)
More information about the Digitalmars-d
mailing list