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

In article <4050@hubcap.UUCP> billwolf@hubcap.clemson.edu writes:
>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...)

I had a feeling you'd say that.  Unfortunately, at the time, I
couldn't think of a better example.  Here's one (I hope):

There are several programs running in a common address space.  Call
them COMMAND_PROCESSOR, COMPILER, and EDITOR.  There is a global data
structure, COMPILER_WARNINGS; the operations on this database include
adding warnings, selecting warnings based on various criteria, and
deleting selected warnings from the database.  COMPILER adds warnings,
as one would expect.  EDITOR has operations that make use of the data
in COMPILER_WARNINGS; for instance, you can display the warnings for
the current file and have the editor position you to the appropriate
source line.  And COMMAND_PROCESSOR has a command to clear out
COMPILER_WARNINGS (which selects all warnings and then deletes them).

The natural way to implement the COMPILER_WARNINGS database is as an
array or list of pointers to warning structures.  The ADD operation
copies the pointer it's given, and is documented so that the caller
knows not to try to deallocate the object it added.  SELECT simply
returns newly allocated pointers to the selected warnings.  DELETE
objviously should deallocate the pointer and remove it from
COMPILER_WARNINGS, but what about pointer.all?

If someone has called SELECT and it has returned a pointer to a
particular warning, DELETE should not deallocate pointer.all, because
there is another handle to it.  EDITOR should be permitted to continue
to display and manipulate selected warnings even if they've since been
deleted from the global database.

Reference counts can be used to make this work.  Every time a warning
is selected, its reference count can be incremented, and it can be
decremented when it is DELETEd, and DELETE can deallocate pointer.all
when it drops below 0.  Callers of SELECT are required to DELETE all
the selected warnings when they are done with them.  There would also
need to be a different DELETE operation to specify that it should be
removed from the COMPILER_WARNINGS database, to be used by the
COMMAND_PROCESSOR command.  But I don't think this is what you are
advocating.

Can this be solved with only documentation?  Or is this an ugly
example that only a Lisp afficionado would think is clean?

Barry Margolin
Thinking Machines Corp.

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

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