More radical ideas about gc and reference counting
sclytrack via Digitalmars-d
digitalmars-d at puremagic.com
Sun May 11 14:43:05 PDT 2014
On Sunday, 11 May 2014 at 11:42:37 UTC, ponce wrote:
> On Sunday, 11 May 2014 at 08:59:42 UTC, Walter Bright wrote:
>>
>> D also cannot be performance competitive with C++ if pervasive
>> ARC is used and memory safety is retained. Rust is attempting
>> to solve this problem by using 'borrowed' pointers, but this
>> is unproven technology, see my reply to Manu about it.
>
> I work in a C++ shop and as I see it, resource management is
> becoming a solved problem:
>
> - resource owners holds a std::unique_ptr<T> on them. Resource
> release is taken care by C++ destructors normally. That means
> to be exception-safe, each resource type must better have its
> class.
> - resource users eventually "borrow" the resource by taking a
> raw pointer out of the unique pointer. What Rust would do with
> lifetimes here is ensure that the resource is still there since
> move semantics seems pervasive in this language. In C++ we
> ensure the resource holder outlive the users.
> - std::shared_ptr is not needed with such constraints. This
> means no cycles in the object graph. TBH I have yet to find a
> dependency scheme that can't be done that way.
>
> When I use D I can't help but think that releasing resources
> feels more manual and error-prone ("oops that resource should
> have been a struct not a class" and such traps).
>
> I do not have huge concerns about D GC, but I would be glad to
> have more support for owned pointers (ie. Unique!T in Phobos or
> better). I have no idea how to make it safe ie. ensure the
> resource outlive its users.
I like this owner/unique, borrow thing.
@ is managed (currently reference counted)
~ is owner
& is borrow
fn example3() -> int {
let mut x = ~X {f: 3};
let y = &x.f;
x = ~X {f: 4}; // Error reported here.
*y
}
According to Debian Rust is still too experimental to be packaged.
http://web.mit.edu/rust-lang_v0.8/doc/tutorial-borrowed-ptr.html
servo is written in Rust.
https://github.com/mozilla/servo
There is very little use of "@", it's mostly "&" and "~". Heck I
didn't find any @ while casually browsing the code. It's like
they are not using it at all.
I don't know Rust, it is the first day I look (read
documentation) at it.
More information about the Digitalmars-d
mailing list