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
next prev parent 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