On 26/12/16 19:00, Bernd Oppolzer wrote:

A thought without its being a direct comment on any part of what you've written. Programming texts from Wirth onwards tended to muddle pointers and dynamic memory allocation together, so in effect assumed that pointers would /only/ come out of the heap manager hence could be checked for consistency in that context. Early Pascal compilers neither had an addressof() function nor expected that the underlying OS would return a pointer as a syscall result.

When teaching/supporting I've found it useful to make the opposite assumption, i.e. starting off with a hypothetical OS call that returned a pointer and showing students what they could do with it, and only later introducing trees etc. on the heap.

Apart from that, I've certainly seen mark/release being the dominant mechanism in 1980s compilers, and even Turbo Pascal 3.0 (circa 1986) supports it with the explicit

"NOTICE that Dispose and Mark/Release use entirely different approaches to heap management - and never shall the twain meet! Any one program must use either Dispose or Mark/Release to manage the heap. Mixing them will produce unpredictable results."

Turbo Pascal 5.0 (circa 1989, and not long preceding Delphi) appears to adopt a complex scheme to handle both of the approaches, and observes

"Mark and Release cannot be used interchangeably with Dispose and FreeMem unless certain rules are observed [...] ."

--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]
_______________________________________________
fpc-other maillist  -  fpc-other@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-other

Reply via email to