comp.lang.ada
 help / color / mirror / Atom feed
From: barmar@think.COM (Barry Margolin)
Subject: Re: Garbage Collection
Date: 9 Jan 89 03:56:31 GMT	[thread overview]
Message-ID: <35278@think.UUCP> (raw)
In-Reply-To: 4041@hubcap.UUCP

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?

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.  Forgetting to
deallocate something also produces an incorrect program (in non-GC
environments), but the failure modes are less frequent.  Also, there's
a relatively simple way to fix the out-of-memory problem that results:
add more memory; finding dangling references is often much harder.

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.  The one ADT-style PL/I
program I was involved with (the Multics mail system utilities) solved
its problem by using reference counts (luckily, there are no potential
circular reference chains) in all the data structures.

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.  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.

By the way, for systems programming and performance purposes, the
Symbolics environment provides a number of manual
allocation/deallocation mechanisms.  A facility called "resources"
allows you to maintain a free-list of similar structures, and allocate
and deallocate from that list instead of from the heap.  This tends to
be used for large structures that are allocated and become garbage at
a very high rate, such as network packets and disk buffers.  There's
even a primitive for deallocating a structure from the heap, although
in the current implementation it does nothing if the structure isn't
the youngest object in its region of the heap, because it simply moves
the region's allocation pointer to the beginning of the object (if it
were to do this with a non-youngest object, it would deallocate
younger objects in the process); I've never actually seen this
facility used, though, and I think it's only there for compatibility
with PDP-10 MacLisp (the MacLisp GC put garbage onto a free-list, and
there was a primitive to add an arbitrary object to this).

Barry Margolin
Thinking Machines Corp.

barmar@think.com
{uunet,harvard}!think!barmar

  reply	other threads:[~1989-01-09  3:56 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 [this message]
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 ` 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 ` Gisle S�lensminde
1999-08-18  0:00 ` Pascal MALAISE
1999-08-20  0:00   ` David Botton
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
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