Rust lifetimes and collections [OT]
bearophile via Digitalmars-d
digitalmars-d at puremagic.com
Wed Nov 19 08:54:45 PST 2014
It shows the tradeoffs of static enforcement of memory safety in
Rust:
http://cglab.ca/~abeinges/blah/rust-lifetimes-and-collections/
Some quotations:
>However it's fairly easy to make an incorrect program by
>overflowing an integer. Some would therefore assert that it
>should be unsafe to add two integers together. However "being
>able to write an incorrect program" isn't what Rust cares about.
>That's impossible to guarantee with any amount of analysis,
>static or dynamic, unless you hate mathematicians. Rust
>specifically constrains itself to memory safety.<
This shows the weak typing of Rust, and its weak static analysis
of valid index intervals:
>
let mut v = vec![1i32, 2, 3, 4, 5];
for i in range(0, v.len()) {
// Array litteral syntax will just crash the program if you
index out of bounds,
// instead of returning an Option.
let x = &mut v[i];
// do some work with x
}
That's all perfectly sound and good, but it's wasting tons of
time doing bounds checking! It's also totally unidiomatic.<
This is nice:
> fn split_at_mut(&mut self, mid: uint) -> (&mut [T], &mut [T]);
Bye,
bearophile
More information about the Digitalmars-d
mailing list