comp.lang.ada
 help / color / mirror / Atom feed
From: billwolf@hubcap.clemson.edu (William Thomas Wolfe,2847,)
Subject: Re: Garbage Collection
Date: 8 Jan 89 18:40:00 GMT	[thread overview]
Message-ID: <4041@hubcap.UUCP> (raw)
In-Reply-To: 4222@enea.se

From article <4222@enea.se>, by sommar@enea.se (Erland Sommarskog):
> [Still discussing Erland's example regarding automatic destruction
>  of a local environment upon block exit.  Erland now states precisely
>  that he is instantiating a tree which stores objects of type pointer;
>  in other words, we are dealing with a tree of pointers.  The example
>  continues with a situation in which a pointer is being inserted into
>  the tree.]
>
>         Procedure Put_something_in_tree(Tree : in out Tree_type;
>                                         Anything : Any_type) is
>         Reference : Some_access_type;                                
>         Begin                                 
>            Reference := new Some_type;
>            Do_something(Reference.all, Anything);
>            Tree_handler.Insert(Tree, Reference);
>         End;
>     
> Question: What happens with Reference.all when Put_something_in_tree
> is exited? I read your proposal as that it should be deallocated, 
> which would be disastrous. Or is this a misunderstanding from my 
> side? If it is not: is this code erroneous with your scheme? 

   It is a misunderstanding from your side.  I stated in the preceding
   version of the example (or maybe the first version, or both) that
   since Reference is a simple pointer, destruction of Reference consists
   only of eliminating the space occupied by the pointer, and does not
   imply destruction of what Reference points to.  Now let's consider: 

      procedure EXAMPLE (INPUT : SOME_ADT) is

         TEMP : SOME_ADT;    -- now TEMP happens to be *implemented*
                             --  as a pointer to TEMP's descriptor,
                             --  which in turn contains other pointers
                             --  to TEMP's value.  But since TEMP is
                             --  limited private, our user doesn't know that.

         ACCESS_AN_INTEGER : access INTEGER;   -- a local object
         
      begin
         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...
            --
      end EXAMPLE;  -- OK, now at this point we are done with TEMP.  It is a 
                    --   local variable, and therefore its DESTROY procedure 
                    --   will be automatically invoked.  We are also done with 
                    --   ACCESS_AN_INTEGER, so ACCESS_AN_INTEGER will also be 
                    --   destroyed.  But since ACCESS_AN_INTEGER is only a 
                    --   pointer, this leaves the integer value to become 
                    --   garbage!  We conclude that our user requires 
                    --   more programming experience, so that he/she 
                    --   might more completely comprehend the characteristics 
                    --   of the programming tool known as the pointer.

>   Side note: you said that the tree package should take a Destroy
> procedure. For what benefit? You can't automatically call it when
> your Destroy_tree is called. The caller might refer to the stored 
> objects in some other place. 

    You're forgetting that the caller completely controls what happens
    inside that caller-supplied DESTROY procedure!  If the caller so
    desires, the DESTROY procedure can consist of a null statement;
    then only the routine destruction of the space occupied by the
    pointer will occur, as an effect of the call to UNCHECKED_DEALLOCATION
    which destroys the space occupied by the record describing a given node.

    Secure in the knowledge that the caller is responsible for prescribing
    the destruction procedure, Destroy_Tree will in fact call Destroy
    automatically on each and every instance of a stored object.



                                        Bill Wolfe

                                wtwolfe@hubcap.clemson.edu

  reply	other threads:[~1989-01-08 18:40 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, [this message]
1989-01-09  3:56   ` Barry Margolin
1989-01-09 16:22     ` William Thomas Wolfe,2847,
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 ` 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 ` Gisle S�lensminde
1999-08-18  0:00 ` Pascal MALAISE
1999-08-20  0:00   ` David Botton
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