comp.lang.ada
 help / color / mirror / Atom feed
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

  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