From: billwolf@hubcap.clemson.edu (William Thomas Wolfe,2847,)
Subject: Re: Garbage Collection
Date: 9 Jan 89 16:22:52 GMT [thread overview]
Message-ID: <4050@hubcap.UUCP> (raw)
In-Reply-To: 35278@think.UUCP
From article <35278@think.UUCP>, by barmar@think.COM (Barry Margolin):
> In article <4041@hubcap.UUCP> billwolf@hubcap.clemson.edu writes:
>> ASSIGN (TEMP, SOME_OPERATION (SOME_ADT));
>> ACCESS_AN_INTEGER := new INTEGER := SIZE_OF (TEMP);
>> -- notice the allocation...
>> DO_SOMETHING_WITH (TEMP, SOME_ADT, ACCESS_AN_INTEGER);
>> DO_SOMETHING_ELSE_WITH (TEMP, ACCESS_AN_INTEGER);
>> --
>> -- notice failure to deallocate ACCESS_AN_INTEGER.all...
>
> But what if DO_SOMETHING_WITH and/or DO_SOMETHING_ELSE_WITH makes a
> copy of its third parameter in some permanent data structure? If
> ACCESS_AN_INTEGER.all were to be deallocated at this point, you would
> end up with a dangling pointer. Or should these routines be required
> to also copy THIRD_ARGUMENT.all, too?
Some of you appear to be laboring under the false impression that
when one passes a pointer into a procedure, one will have no idea
what is to be done with that pointer. Let me assure you that before
I pass a pointer into *any* procedure, that procedure had damn well
better declare its intentions with respect to that pointer. Some
possibilities are:
-- The pointer must be the sole pointer to the object in question.
-- This procedure then claims sole possession of that object;
-- the pointer you pass in will therefore be read and then set to null.
-- The pointer will be maintained as a reference to the object in qu
-- question. The caller is responsible for ensuring that the object
-- is not destroyed without first making a call to REMOVE_OBJECT
-- in order to destroy this reference to the object in question.
-- The pointer must be the sole pointer to the object in question.
-- This procedure will read the object pointed to, and then destroy it;
-- the pointer you pass in will therefore be read and then set to null.
***********************************************
** The answer, my friends, is DOCUMENTATION. **
***********************************************
> My understanding is that the Ada designers didn't originally espouse
> manual deallocation (hence the name UNCHECKED_DEALLOCATION) because it
> is an easy way to write erroneous programs, and there's no way to
> statically check for this error at compile time.
Failure to deallocate is a logic error; like other logic errors,
they are best detected by desk checking (primary line of defense),
and by using a debugger as a last resort.
> I've used both GC and non-GC languages. I've done lots of programming
> in PL/I, and now I'm a Lisp programmer. Personally, I've had few
> problems with dangling pointers in PL/I, but most of the programming
> didn't make use of ADT-style programming.
Personally, I've had no problems with dangling pointers in Ada,
due to the complexity management provided by the ADT paradigm.
> But I've also seen the freedom allowed by a garbage collector in the
> Symbolics Lisp Machine software. It means that unrelated programs can
> share data structures without preplanning.
You mean "without documentation". Thanks, but no thanks.
A fundamental assumption
> of manual deallocation is that when the allocator of a structure is
> through with it, so is everyone else. But when references to these
> structures are passed around the references may be copied. Unless you
> want to require everyone to copy those structures you can't assume
> that the allocator knows when it's safe to deallocate.
Sure I can, provided the lost art of documentation is practiced
from time to time... (Gee, I sure hope I don't ever have to
program with YOUR colleagues...)
Bill Wolfe
wtwolfe@hubcap.clemson.edu
next prev parent reply other threads:[~1989-01-09 16:22 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
1989-01-06 22:17 Garbage Collection Erland Sommarskog
1989-01-08 18:40 ` William Thomas Wolfe,2847,
1989-01-09 3:56 ` Barry Margolin
1989-01-09 16:22 ` William Thomas Wolfe,2847, [this message]
1989-01-09 19:00 ` Barry Margolin
1989-01-10 2:50 ` William Thomas Wolfe,2847,
1989-01-11 9:22 ` Barry Margolin
1989-01-11 16:01 ` William Thomas Wolfe,2847,
1989-01-11 18:21 ` Barry Margolin
1989-01-12 2:43 ` William Thomas Wolfe,2847,
1989-01-15 7:14 ` Barry Margolin
-- strict thread matches above, loose matches on Subject: below --
1999-08-18 0:00 garbage collection Ronald Ayoub
1999-08-18 0:00 ` Pascal MALAISE
1999-08-20 0:00 ` David Botton
1999-08-18 0:00 ` Gisle S�lensminde
1999-08-18 0:00 ` tmoran
1999-08-18 0:00 ` Keith Thompson
1999-08-19 0:00 ` Tucker Taft
1999-08-19 0:00 ` Robert Dewar
1999-08-19 0:00 ` Robert Dewar
1999-08-20 0:00 ` tmoran
1999-08-20 0:00 ` Keith Thompson
1999-08-20 0:00 ` Matthew Heaney
1999-08-20 0:00 ` Keith Thompson
1999-08-21 0:00 ` Robert Dewar
1999-08-21 0:00 ` Matthew Heaney
1999-08-21 0:00 ` Matthew Heaney
1999-08-21 0:00 ` Robert Dewar
1999-08-21 0:00 ` Brian Rogoff
1999-08-21 0:00 ` Robert Dewar
1999-08-18 0:00 ` Robert I. Eachus
1999-08-19 0:00 ` Gautier
1999-08-19 0:00 ` Robert I. Eachus
1999-08-20 0:00 ` Keith Thompson
1999-08-20 0:00 ` Robert Dewar
1996-10-24 0:00 Garbage Collection H Brett Bolen
1989-01-10 19:16 Erland Sommarskog
1989-01-11 16:10 ` William Thomas Wolfe,2847,
1989-01-05 23:26 Erland Sommarskog
1988-12-31 0:04 Erland Sommarskog
1989-01-05 8:13 ` William Thomas Wolfe,2847,
1988-12-28 19:20 Erland Sommarskog
1988-12-30 0:52 ` Bill Wolfe
1988-12-26 23:37 Erland Sommarskog
1988-12-27 21:24 ` William Thomas Wolfe,2847,
1988-12-28 16:09 ` Snorri Agnarsson
1988-12-30 0:46 ` Bill Wolfe
1988-12-27 22:24 ` Bob Hathaway
1988-12-18 20:12 Erland Sommarskog
1988-12-20 19:04 ` Bill Wolfe
1988-12-13 20:07 Erland Sommarskog
1988-12-15 19:13 ` William Thomas Wolfe,2847,
1988-12-07 15:22 Collective response to := messa ron
1988-12-11 19:11 ` Garbage Collection William Thomas Wolfe,2847,
1988-12-12 5:29 ` John Gateley
1988-12-12 18:19 ` William Thomas Wolfe,2847,
1988-12-13 1:02 ` Alexander Klaiber
1988-12-13 18:37 ` William Thomas Wolfe,2847,
1988-12-13 23:36 ` Alexander Klaiber
1988-12-14 3:26 ` William Thomas Wolfe,2847,
1988-12-14 17:16 ` Stephe Leake
1988-12-15 14:43 ` Thomas P. Morris
1988-12-14 23:30 ` John Gateley
1988-12-15 19:25 ` William Thomas Wolfe,2847,
1988-12-19 16:12 ` John Gateley
1988-12-20 19:34 ` Bill Wolfe
1988-12-13 20:22 ` William Thomas Wolfe,2847,
1988-12-14 6:40 ` Richard A. O'Keefe
1988-12-14 17:43 ` William Thomas Wolfe,2847,
1989-01-02 17:51 ` ryer
1989-01-05 8:31 ` William Thomas Wolfe,2847,
1989-01-06 16:58 ` ryer
1989-01-08 19:24 ` William Thomas Wolfe,2847,
[not found] <145@krafla.rhi.hi.is>
[not found] ` <272@fang.ATT.COM>
1988-03-29 13:47 ` From Modula to Oberon Denis Fortin
1988-03-30 15:32 ` Lawrence Crowl
1988-03-30 22:41 ` Hans Boehm
1988-03-31 6:27 ` Garbage Collection Richard Harter
1988-03-31 19:49 ` Hans Boehm
1988-04-01 5:43 ` Richard Harter
1988-04-01 18:43 ` Hans Boehm
1988-04-04 23:14 ` 00704a-Liber
1986-03-16 22:24 Garbage collection "Alexander L. Wolf"
[not found] <1979@mit-eddi.UUCP>
[not found] ` <2144@mit-eddie.UUCP>
1984-06-18 19:28 ` Abstraction In Ada Jon Mauney
1984-06-22 7:47 ` Doug Alan
1984-06-25 2:15 ` brad
1984-07-17 10:34 ` garbage collection Eric Smith
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox