manual memory management
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed Jan 9 12:16:04 PST 2013
On 1/9/13 12:09 PM, Mehrdad wrote:
> On Wednesday, 9 January 2013 at 19:34:19 UTC, Andrei Alexandrescu wrote:
>> At the end of the day if references are part of the language and
>> programs can build arbitrary reference topologies, safety entails GC.
>
>
> It looks like a non sequitur to me... wouldn't this work?
>
> A language X has a built-in data type called Reference, and no classes.
>
> The only thing you can do with it are using these functions:
>
> Reference CreateObject(Reference typename);
> Reference DeleteValue(Reference object, Reference field);
> Reference GetValue(Reference object, Reference field);
> Reference SetValue(Reference object, Reference field, Reference value);
>
> Given _just_ these functions you can build _any_ arbitrary reference
> topology whatsoever. There's no need for a GC to be running, and it's
> completely manual memory management.
>
>
> It's memory-safe too. What am I missing here?
What you're missing is that you define a store that doesn't model object
references with object addresses. That's what I meant by "references are
part of the language". If store is modeled by actual memory (i.e.
accessing an object handle takes you to the object), you must have GC
for the language to be safe. If store is actually indirected and gives
up on the notion of address, then sure you can implement safety checks.
The thing is everybody wants for references to model actual object
addresses; indirect handles as the core abstraction are uninteresting.
Andrei
More information about the Digitalmars-d
mailing list