More on Rust language
Walter Bright
newshound2 at digitalmars.com
Thu Nov 3 20:43:35 PDT 2011
On 11/3/2011 8:14 PM, bearophile wrote:
>> Mark-compact (aka moving) collectors, where live objects are moved together
>> to make allocated memory more compact. Note that doing this involves
>> updating pointers’ values on the fly. This category includes semispace
>> collectors as well as the more efficient modern ones like the .NET CLR’s
>> that don’t use up half your memory or address space. C++ cannot support
>> this without at least a new pointer type, because C/C++ pointer values are
>> required to be stable (not change their values), so that you can cast them
>> to an int and back, or write them to a file and back; this is why we
>> created the ^ pointer type for C++/CLI which can safely point into #3-style
>> compacting GC heaps. See section 3.3 of my paper
>> (http://www.gotw.ca/publications/C++CLIRationale.pdf ) A Design Rationale
>> for C++/CLI for more rationale about ^ and gcnew.<
>
> Tell me if I am wrong still.
You're wrong still :-)
> How do you implement a moving GC in D if D has
> raw pointers?
It can be done if the D compiler emits full runtime type info. It's a solved
problem with GCs.
> D semantics doesn't allow the GC to automatically modify those
> pointers when the GC moves the data.
Yes, it does. I've implemented a moving collector before designing D, and I
carefully defined the semantics so that it could be done for D.
Besides, having two pointer types in D would be disastrously complex. C++/CLI
does, and C++/CLI is a failure in the marketplace. (I've dealt with multiple
pointer types from the DOS daze, and believe me it is a BAD BAD BAD idea.)
More information about the Digitalmars-d
mailing list