From: billwolf@hubcap.clemson.edu (William Thomas Wolfe,2847,)
Subject: Re: Garbage Collection
Date: 27 Dec 88 21:24:50 GMT [thread overview]
Message-ID: <3985@hubcap.UUCP> (raw)
In-Reply-To: 4195@enea.se
From article <4195@enea.se>, by sommar@enea.se (Erland Sommarskog):
[Erland describes a situation in which a user instantiates a tree
structure over an access type, and then considers the insertion
procedure with which the user inserts an object into the tree]
> According to Bill the data allocated to Reference [in the example,
> a pointer to the user's object] should be freed when
> we exit this procedure, but if Insert does what we think this is of
> course a severe error. Where did I go wrong? Did I plead guilty to
> structure sharing just because I inserted a pointer to a tree?
> Or does Bill mean that when Reference is inserted to the tree that
> Reference.all should be inserted to the tree, not the pointer itself?
> But what if I also insert the reference into another tree (or some other
> structure) and then modify the referred data (some counter, for instance)
> and want this change to appear in both places?
> Note also that in this example, there are no side effects. We are only
> dealing with local variables and paramerters. And still deallocation
> on block exit is completely wrong. (And there is no way the compiler
> could deduce that Insert really saves Reference somewhere.)
The user has supplied the limited private type STORED_OBJECT, and
defined assignment over this object. Let's assume that the tree
is implemented in terms of a record structure, one field of which
is a STORED_OBJECT. In the INSERT_ITEM procedure, the user sends
"in out TREE_TYPE; in STORED_OBJECT". The tree is modified as follows:
a new record is created to represent a new node of the tree. The
statement ASSIGN (NEW_NODE.STORED_ITEM, NEW_OBJECT) is executed,
along with whatever pointer manipulations are necessary to maintain
the structure of the tree.
Now we proceed to block exit. Since the tree and the new object are
*parameters* and not local variables, they are not subject to the
automatic destruction which applies to the block's local variables.
Since the user supplied an access type as the type of object to be
stored in the tree, the user bears full responsibility for making
responsible use of the fact that he/she is dealing with a tree of pointers.
> Several times in this discussion Bill Wolfe has claimed that
> garbage collection is a trouble-maker for maintainers. In what way?
When there is great difficulty deciding whether a given object
exists or not, the maintainer experiences great difficulty
pinning down the precise state of the program.
> Much worse for maintainence is when the system dies with "System
> access violation" or "segmentation fault" from time to time and you
> don't know why. The reason may be that an allocated area was erroneously
> released and then reused and the original data, that someone appearently
> is relying in, has been over-written. Or because an already deallocated
> was deallocated a second time.
There are basically two cases in which this can happen:
1) When an inexperienced ADT designer is in the process
of acquiring the mental discipline required of anyone
who programs pointer-based structures. To avoid this,
purchase ADTs from professional houses or use experienced
ADT designers. Otherwise, it's a cost of professional training.
2) When a user has engaged in S T R U C T U R A L S H A R I N G.
*** Don't engage in structural sharing ***
> Bill Wolfe said earlier that garbage collection encourages
> sloppy programming. Whether it is sloppy or not, I don't care,
Obviously.
> Why should a programmer waste time bothering about something that
> the computer could do much safer for him? After all, the
> programmer does not work for free.
DESTROY procedures are easy to write, need only be written once
per ADT, and can be reused indefinitely. GC costs us the
computer time required to repeatedly determine which storage
is in use and which is not, and this cost must be paid repeatedly
AT RUN TIME. Given that this PERMANENT, RUN_TIME COST can be
avoided by simply communicating the fact that a particular object
is no longer needed, GC is a rather costly crutch for lazy programmers.
Bill Wolfe
wtwolfe@hubcap.clemson.edu
next prev parent reply other threads:[~1988-12-27 21:24 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
1988-12-26 23:37 Garbage Collection Erland Sommarskog
1988-12-27 21:24 ` William Thomas Wolfe,2847, [this message]
1988-12-28 16:09 ` Snorri Agnarsson
1988-12-30 0:46 ` Bill Wolfe
1988-12-27 22:24 ` Bob Hathaway
1988-12-28 6:30 ` Procedural variables, abstraction mechanisms, ADTs William Thomas Wolfe,2847,
-- strict thread matches above, loose matches on Subject: below --
1999-08-18 0:00 garbage collection Ronald Ayoub
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
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 ` Matthew Heaney
1999-08-21 0:00 ` Robert Dewar
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
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-06 22:17 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,
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
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-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