On 1/9/2013 9:26 AM, Rob T wrote:
You cannot guarantee memory safety with a GC either, depending on the definition of "memory safety".
GC is a necessary requirement for memory safety, but not sufficient.
For example, you can still access deallocated memory by mistake,
If you're not playing with pointers, then this is a buggy GC.
run out of memory due to accumulating persistent pointers left around by mistake,
Memory safety does not imply never running out of memory.
or free memory that was not supposed to be freed by mistake.
Then it's a buggy GC.
The GC implementation may fail due to bugs, deallocating live memory or failing to deallocate inactive memory.
Of course memory safety presumes a correctly implemented GC.
The only thing a GC can do for you, is free up the programmer from the tedium of managing memory. It also allows constructs that otherwise would be very difficult or impractical to implement. The effect can be very positive, but there are no guarantees of memory safety.
This is incorrect - see above. A bug free GC, and not "cheating" in using it, guarantees memory safety. This is a big deal.
