comp.lang.ada
 help / color / mirror / Atom feed
* garbage collection
@ 1999-08-18  0:00 Ronald Ayoub
  1999-08-18  0:00 ` Robert I. Eachus
                   ` (3 more replies)
  0 siblings, 4 replies; 83+ messages in thread
From: Ronald Ayoub @ 1999-08-18  0:00 UTC (permalink / raw)


In the book "Programming in Ada 95" by Barnes he says:

If an allocated object becomes inaccessbile becasue no declard objects refer
to it directly or indirectly then the storage it occupies may be reclaimed
so that it can be reused for other objects. An implementation may (but need
not) provide garbage collection for this.

I need this to be clarified for me. If an implementation doesn't provide 
garbage collection then that storage is forever lost, is that correct? Or
does this mean that it may not be garbage collected but when a call to new
is executed it is at that time scene as available. Please clarify. This seems
like a real bad idea not to have some form of garbage collection inforced.

Ron




^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Garbage Collection
@ 1996-10-24  0:00 H Brett Bolen
  0 siblings, 0 replies; 83+ messages in thread
From: H Brett Bolen @ 1996-10-24  0:00 UTC (permalink / raw)



Hows that saying go?

   The smalltalk programer says garbarge collection is too important
   do be done by the programmer, while the c programmer say's its
   too important to be done by the machine.

Should we add:

   The ada programmer says garbage collection os too important
   to be done at all.

Or maybe we should change 'important' to 'complex'.

More flame food.

b\253
-- 
b\253              | Take Chances, Make Mistakes 
brettb@cpcug.org   | Get Messy    
brett bolen        |     - Ms Frizzle - MSB
Walrus Consulting  | http://www.cpcug.org/user/brettb




^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Garbage Collection
@ 1989-01-10 19:16 Erland Sommarskog
  1989-01-11 16:10 ` William Thomas Wolfe,2847,
  0 siblings, 1 reply; 83+ messages in thread
From: Erland Sommarskog @ 1989-01-10 19:16 UTC (permalink / raw)


This is where this discussion ends for my part. It has been going
on far too long. It seems quite obvious that no one here, at least
not me, will succeed in converting Bill Wolfe to believe that garbage 
collection is good. And it does not seem like he will convert anyone 
either.

I'm glad to hear that Reference.all will survive the block exit.
I am still a little puzzled, though. Assume that instead of a "simple 
pointer" we actually have a linked list, declared as (limited) 
private in some package. Then, it's Destroy routine will be called
at block exit. Now, I don't know how you folks write your Assign
procedures for linked lists, but I do simple pointer copying. (And
I assume that Bill Wolfe does the same, since he is so keen on that
his ADTs will be useful in a real-time environment. Copying value
and allocating memory for the new lists would be as harmful as
garbage collection, if not worse.) This means of course that my
implicit Destroy procedure must be just NULL(*). Then I have an another
for the user to call when is tired of his list.
  Excuse me, but is call-destroy-on-block-exit really a useful device? 
Seems like adding something to the langauge which you almost should never 
use. 

And same goes for the user to supply a Destroy procedure to the 
generic package. Since its body often will be NULL, its appearance
in the instantiating package is just white noise.

(*) This isn't really true. If the reference assignment also includes
updating of reference counters, we can check them in the Destroy
procedure. We have now drifted in to the land of poor man's garbage
collection, where to have to very careful everytime so we are not
doing something stupid.

Finally, Bill Wolfe has claimed that not having garbage collection
helps the programmer to understands all aspects of his code, both
time and space. Eh, there are some more aspects on the code than
so. For example, that it really does what it supposed to. It may very
elegantly sweep away all used memory and that, but tell us that
2 + 2 = 5. No good program. Fact is, in many applications, space is
seldom an important problem, if at all. All you want to be sure of
is that you really got rid all of you allocated, so that your interactive
user donesn't get a dump after five hours work.

And, oh, the world is not divided into ADT implementors and application
programmers. It just doesn't look that way.
-- 
Erland Sommarskog
ENEA Data, Stockholm              This signature is not to be quoted.
sommar@enea.se

^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Garbage Collection
@ 1989-01-06 22:17 Erland Sommarskog
  1989-01-08 18:40 ` William Thomas Wolfe,2847,
  0 siblings, 1 reply; 83+ messages in thread
From: Erland Sommarskog @ 1989-01-06 22:17 UTC (permalink / raw)


For the third time I asked Bill Wolfe how his idea with deallocation
on block exit. With his last answer, I realized that due to unclarity
from my side, he may have misunderstood my example. My apologies to
you all, and Bill in particular. 

So I try again, and see if I can get it right:
We have:
     Generic
        Data_type is limited private;
        with Assign, "<", ">"    -- What you expect 
     Package Binary_trees is
        Tree_type is private;
        Procedure Insert(Tree in out : Tree_type; Data : in Data_type);
        ...
     End Binary_trees;
     
     Package Use_trees is  -- Could be a procedure. Could be generic.
        Type Any_type;     -- Could also be generic parameter, or imported.
        Type Some_type;
        Type Some_access_type is access Some_type;
        Procedure Assign(A : in out Some_access_type; 
                         B : in     Some_access_type) is 
        Begin A := B End Assign; 
        -- Also add "<" ">" to mean comparison on Any_type here.
        Package Tree_handler is new Binary_trees(Some_access_type, Assign);
        ...
        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;
        ...
    End Use_trees;
    
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? 
  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. Or does your Destroy_tree have a special
parameter to control this? Seems like adding two parameters (one
generic and one routine) that aren't necessary, but clutters up the
user's code. The user can always traverse the tree and destroy what
he has there.
-- 
Erland Sommarskog
ENEA Data, Stockholm              This signature is not to be quoted.
sommar@enea.se

^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Garbage Collection
@ 1989-01-05 23:26 Erland Sommarskog
  0 siblings, 0 replies; 83+ messages in thread
From: Erland Sommarskog @ 1989-01-05 23:26 UTC (permalink / raw)


Mike Ryer (ryer@inmet.UUCP) writes:
>Currently, Ada neither requires nor precludes garbage collection.  For 
>example, the Symbolics Ada compiler provides it (as well they should), but
>none of the eight cross-compilers for the 1750A computer does (as they 
>shouldn't).
>
>What are you (any of you) proposing?  That ALL Ada compilers should have
>garbage collection?  Than no Ada compilers should be allowed to have it?
>Pragmas?

I know about nothing about 1750, but I assume it's typically used
for those "embedded systems" that Ada was intended for. I can agree
that garbage collection is virtually of no interest on such a machine
and not worth the development costs.
  On the other hand if I want to port my interactive program from VAX/VMS
to SunOS, I can't with the rules of today rely on garbage collection, 
but have to stick to Unchecked_deallocation.
  So it would be nice if garbage collection was required to be available, 
or at least recommended. How it should be controlled (on or off) is a more 
tricky question. Pragmas is maybe not the best of ideas since to some extent 
it applies to the entire system.
  Of course, if practice turns out that all compilers except those for 
strict real-time use have garbage collection, then such a rule in the
LRM is unnecessary. Unfortunately, this doesn't seems to be the case
today.
-- 
Erland Sommarskog
ENEA Data, Stockholm              This signature is not to be quoted.
sommar@enea.se

^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Garbage Collection
@ 1988-12-31  0:04 Erland Sommarskog
  1989-01-05  8:13 ` William Thomas Wolfe,2847,
  0 siblings, 1 reply; 83+ messages in thread
From: Erland Sommarskog @ 1988-12-31  0:04 UTC (permalink / raw)


I'm trying to get Bill Wolfe to explain how he his deallocation-on-
block-exit scheme would work in an example I had. For brevity I
deleted my example in my last article. Apparently that was a fatal
mistake, because the answer I got wasn't even close the question.
So, my apologies, I repeat the exmample with some clarifcations.

We have:
   Generic 
      Data_type is limited private;
      Procedure -- Assign, "<" and ">" 
   Package Tree_handler
      Tree_type is private;
      
Assume further that we instantiate this package with Some_access_type, 
it could be an imported limited type, it could be a locally defined.
Then we have the procedure:

    Procedure Insert_data_to_tree(Tree : in out Tree_type;
                                  Data_of_some_sort : in Any_type); 
    Reference : Some_access_type;
    Begin
       Reference := new Some_type;  -- Or subprogram call for external type
       Prepare(Reference, Data_of_some_sort);
       Insert(Tree, Reference);
    End Insert_data_to_tree;
    
The Assign procedure which we provide when we instantiate the tree handler 
is simply:
   Procedure Assign(A : in out Some_access_type; B : in Some_access_type) is
   Begin
      A := B;
   End Assign;
   
Now, what happens with Reference.all on exit of Insert_to_data_tree, with    
your scheme? (Assume there is no user-written DESTROY procedure.) Would
Reference.all be deallocated although there still is a living reference  
to it in Tree? Or will it be ignored in any case? Or are you having a
reference count hidden somewhere to save you? 

Another interesting issue is: When Tree drops from the stack what happens
with our little object at this occassion? The Tree's DESTROY procedure
cannot know anything about it, so we have to traverse the tree and deallocate
all referd objects ourselves. (And pray we haven't inserted some of them
in a queue somewhere else too!) With garbage collection...

>> I forgot: When the system chokes with "heap full" and you as a maintainer
>> is trying to find where all space is being wasted. With garbage collection
>> you at least know that all this memory is being used. Without, you don't 
>> know if it is just memory leakage or real overuse.
>
>     Advanced debugging tools should be used to address this issue.

So why can't these "advanced debugging tools" be used to "pin down
the exact state of the system" when we have garbage collection?

>   I'm quite aware of Eiffel, and I have just shown (in another article)
>   how reliance upon garbage collection is a sure way to get your ADT
>   rejected by users who are programming critical applications.  This

I assume with critical mean time-critical here. If the issue is 
reliability or space, garbage collection is only there to help you.

There is good chance that your ADT will be rejected anyway. The critical 
developper looks at you and says: "You use Unchecked_dellocation? Sorry, 
then I can't use your ADT. Memory fragmention will cause too great a 
time penalty when the system have lived for a while." So you return and 
implement a free-list and try again. The developper looks at you: "You 
have an internal task for the free-list?" "Eh, no" "You must have that,
else all will be a mess if two tasks access the list simultaneously."
So you end up with with adding this task, and your critical developper
is satisfied. (Reservation: My experience of tasking in Ada is not
that great. Possibly the SHARED pragma could help, but I doubt.)
  Then you come to me who is writing an interactive data-base application 
for VAX/VMS and give me your ADT. It looks nice so I use it. Some time
later my users complains: the reponse time is too long. What have
you done? Being equipped with good tools I re-link the system with 
PCA (a profiler for VMS) to find the bottle-neck. And I to my surprise 
I find that rendez-vous are taking place in the system. "Ah, that why 
it's slow, but where do they come from?" Soon your ADT is found to be 
guilty. And just a little later your ADT is edited to be taskless, and my 
users are happy again. (Until they get dumps because memory is full,
because I forgot to call one of your damned Destroy routines somewhere.)

The lesson to learn is that it is very hard to satisfy everyone. 
And you end up with two versions anyway. Given that there are
many shops who never will write an application were garbage
collection is unacceptable, ADTs relying on its presence will
still have a wide use. Probably more use than ADTs using tasks
to protect free lists. (I have reponse times to think of, but garbage 
collection is no problem. With the collector running as coroutine 
like in the Eiffel system, it can work while I'm waiting for input.)

There is a solution that gives us a possibility to use the same 
implementation of the ADT above. And that solution is, yes you guessed
it: garbage collection. You provide your ADT with a Destroy procedure
that your critical developper uses. (As long your block-exit scheme 
doesn't work properly, he has to call it explicitly. I doubt he 
would accept your idea anyway.) I, in my turn, give a damn about it. 
All I want is that the task should not be used, which you can have
a special call for. Then I just set the garbage_collection flag in 
my system configuration file. 

-- 
Erland Sommarskog
ENEA Data, Stockholm              This signature is not to be quoted.
sommar@enea.se

^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Garbage Collection
@ 1988-12-28 19:20 Erland Sommarskog
  1988-12-30  0:52 ` Bill Wolfe
  0 siblings, 1 reply; 83+ messages in thread
From: Erland Sommarskog @ 1988-12-28 19:20 UTC (permalink / raw)


I gave an example where I stored pointers in a tree, and tried
to make Bill Wolfe explain how this should work with his idea 
with deallocation on block exit. He answered, but I wouldn't 
say I'm satisfied... I still don't see where he is heading.

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

Well, assume that Assign the procedure I write for Some_access_type 
(the type I store in the tree) is simply A := B. With your scheme I 
can't but see that the object I allocated is deallocated when I exit  
my procedure, although I still have a reference to it, stored in
the tree.
  Bill, tell me, what is wrong here? My understanding of your proposal,
or the program I have written? If you think the latter, explain to me
how the compiler should detect the error I'm doing. Or do you really 
think such an error should remain undiscovered until run-time? And
does that rhyme with your eagerness for simplify maintenance?

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

You have just given an excellent argument for garbage collection.
With garbage collection, only the objects that have references
exist. Without, there may be other objects that are unreachable.
With garbage collection you are sure of that all initiated non-null
references point to actual objects. Without, you may by mistake
be pointing straight into free space, or right in the middle of
some completely other kind of object. 
  The only incertainty you have with garbage collection is whether 
a non-referred object has yet been returned to free memory, depending
on wether the garbage collector has come there or not. But since 
the object no longer is part of the system, this question is of 
little interest.

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

I forgot: When the system chokes with "heap full" and you as a maintainer
is trying to find where all space is being wasted. With garbage collection
you at least know that all this memory is being used. Without, you don't 
know if it is just memory leakage or real overuse.

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

1) You have several times stated that the callers of your ADTs 
are responsible for that their destroy procedures are called.
So it's not only to write them. You must remember to call them
too. And when you forget, it takes time find out where.

2) Much of this talk reminds of what hear from C programmers when
range and type checking is being discussed. And the same arguments  
apply. If all programmers were skilled enough to do everything
right we wouldn't need Ada or high-level langauges at all. Actually,
if everyone else is taking help of computers these days, why shouldn't
programmers do?
  Just like range and type checking, garbage collection is a device
that increases our thrust in that the system does what we intended.

3) I recommend you to read "Object-Oriented Software Construction"
by Bertrand Meyer. There he explains why garbage collection is
necessary in an object-oriented system. He also describes how the
garbage collector is implemented in the Eiffel system. (Eiffel is
an object-oriented language, devised by Mr. Meyer, and comemercially
available.) 
-- 
Erland Sommarskog
ENEA Data, Stockholm              This signature is not to be quoted.
sommar@enea.se

^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Garbage Collection
@ 1988-12-26 23:37 Erland Sommarskog
  1988-12-27 21:24 ` William Thomas Wolfe,2847,
  1988-12-27 22:24 ` Bob Hathaway
  0 siblings, 2 replies; 83+ messages in thread
From: Erland Sommarskog @ 1988-12-26 23:37 UTC (permalink / raw)


Bill Wolfe (wtwolfe@hubcap.UUCP) first said:
>>>     The deallocation of every object in the local environment is
>>>     performed as an automatic service when a procedure, function,
>>>     or local block is exited.  This is not garbage collection,
>>>     because the programmer has implicitly directed that the 
>>>     destruction be performed.  

I tried to understand:
>> I read this as "on block exit all memory allocated to variables
>> declared in that block should be deallocated". 
>>   Isn't this very dangerous? What if programmer copied the object to
>> a variable declared in a outer block? Or stored it in a table of some
>> sort in a subprogram call made in block? 

And Bill explains:
>   Not at all.  If a programmer assigns the value stored in some local
>   object to some nonlocal object, then we simply have a new value for
>   a nonlocal object, assuming we have not engaged in the foul practice
>   of structural sharing.  Those who engage in structural sharing will
>   get the run-time errors they deserve for engaging in such space-hacking. 


And I still don't understand. Let's say we have a tree handler
   Generic 
      Data_type is limited private;
      Procedure -- Assign, "<" and ">" 
   Package Tree_handler
      Tree_type is private;
Assume further that we instantiate this package with Some_access_type, 
it could be an imported limited type, it could be a locally defined.
Then we have the procedure:

    Procedure Insert_data_to_tree(Tree : in out Tree_type;
                                  Data_of_some_sort : in Any_type); 
    Reference : Some_access_type;
    Begin
       Reference := new Some_type;  -- Or subprogram call for external type
       Prepare(Reference, Data_of_some_sort);
       Insert(Tree, Reference);
    End Insert_data_to_tree;
    
According to Bill the data allocated to Reference 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.)

Several times in this discussion Bill Wolfe has claimed that 
garbage collection is a trouble-maker for maintainers. In what 
way? I can only see one: If the system due to a heavy use of memory
is spending a lot of time on garbage collecttion, something must be 
done. But in this case the problem is often quite easy to spot.
  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.
  Bill Wolfe is trying to outline some alternative, but I
think he has to think more about, until it is equally safe.
(And really, I don't think he should. He is just reinventing
the wheel.)
  
Bill Wolfe said earlier that garbage collection encourages  
sloppy programming. Whether it is sloppy or not, I don't care,
but obviously garbage collection is taking a lot of the burden
of the programmer's shoulder and the maintainer's too. 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.

So to conclude: I think Ada should require garbage collection
that could be disabled with a pragma for critical applications.
As it is now a portable application cannot rely on it, with
all the troubles explicit deallocation implies.
-- 
Erland Sommarskog
ENEA Data, Stockholm              This signature is not to be quoted.
sommar@enea.se

^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Garbage Collection
@ 1988-12-18 20:12 Erland Sommarskog
  1988-12-20 19:04 ` Bill Wolfe
  0 siblings, 1 reply; 83+ messages in thread
From: Erland Sommarskog @ 1988-12-18 20:12 UTC (permalink / raw)


Sworn enemy to garbage collection Bill Wolfe writes:
>     The deallocation of every object in the local environment is
>     performed as an automatic service when a procedure, function,
>     or local block is exited.  This is not garbage collection,
>     because the programmer has implicitly directed that the 
>     destruction be performed.  

I read this as "on block exit all memory allocated to variables
declared in that block should be deallocated". 
  Isn't this very dangerous? What if programmer copied the object to
a variable declared in a outer block? Or stored it in a table of some
sort in a subprogram call made in block? 
-- 
Erland Sommarskog
ENEA Data, Stockholm
sommar@enea.se
"Frequently, unexpected errors are entirely unpredictable" - Digital Equipment

^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Garbage Collection
@ 1988-12-13 20:07 Erland Sommarskog
  1988-12-15 19:13 ` William Thomas Wolfe,2847,
  0 siblings, 1 reply; 83+ messages in thread
From: Erland Sommarskog @ 1988-12-13 20:07 UTC (permalink / raw)


Bill Wolfe (wtwolfe@hubcap.clemson.edu) refuses to see the point with
garbage collection:
>   "Repeatedly" write sophisticated ADT deallocate routines??  The basic 
>   idea is to write an ADT once and use it forever (i.e., until the next 
>   language modification :-) ); where does "repeatedly" come in?

But you have to write the same boring code for every ADT you implement!
That was what ron@inmet was talking about.

>   Also, I disagree with the claim that a lot of effort is involved;
>   in my experience, DESTROY routines are among the easiest to code.
>   Usually, the ADT is defined recursively, lending itself to a very
>   easy recursive destruction procedure; after that, just destroy
>...

If it is just as easy as that. Let's say that you write a package for
double-linked lists. You provide a procedure for taking an element
out of a list. Should you free the memory allocated? You don't know
because the caller may or may not still keep an reference to the
element. He may be totally uninterested in it, but he may also want
to insert it in another list.  
  So you end up providing another procedure for deallocating the element,
which the user must to remember to call, unless he wants his memory
resources run low.
  And same goes for every ADT you define. You must provide a deallocation
routine that the user must remember to call. What worse is, the user  
may notice if he omits the call, because the implementation of the 
ADT is a static type, and the deallocation is void. And when he is
ready with his tests, you change the implementation, and his program
blows the memory.

Although you refuse to see it, garbage collection saves the programming
community from a lot of headache and true object-oriented programming
would be impossible without it.



-- 
Erland Sommarskog
ENEA Data, Stockholm
sommar@enea.se
"Frequently, unexpected errors are entirely unpredictable" - Digital Equipment

^ permalink raw reply	[flat|nested] 83+ messages in thread
* Re: Collective response to := messa
@ 1988-12-07 15:22 ron
  1988-12-11 19:11 ` Garbage Collection William Thomas Wolfe,2847,
  0 siblings, 1 reply; 83+ messages in thread
From: ron @ 1988-12-07 15:22 UTC (permalink / raw)



Garbage collection certainly does not come for free, but it is extremely
useful.  It frees the programmer from the need to repeatedly write
sophisticated ADT deallocate routines and to deal with the potentially
massive book-keeping requirements for determining whether an object is in
fact garbage.  In general, lack of GC forces a programmer to invest a lot of
effort addressing issues that are not fundamentally related to the problem
domain.  My experience has also shown that problems of "slow heap leakage"
are among the hardest errors to correct.

An earlier posting claimed that a programmer should know what is and isn't
garbage, and that GC is therefore not needed.  This argument would never be
made by a programmer with experience writing serious applications using both
GC'd and non-GC'd languages.  It's quite possible that those without GC'd
programming experience don't even recognize the additional burden for what
it is.

I am not saying that garbage collection should or shouldn't be added to Ada.
I haven't really thought about all of the issues; there are clearly pros and
cons.  However, the argument against GC loses much of its credibility if
it contains an outright denial of the many positive aspects of GC.

^ permalink raw reply	[flat|nested] 83+ messages in thread
[parent not found: <145@krafla.rhi.hi.is>]
* Garbage collection
@ 1986-03-16 22:24 "Alexander L. Wolf"
  0 siblings, 0 replies; 83+ messages in thread
From: "Alexander L. Wolf" @ 1986-03-16 22:24 UTC (permalink / raw)


I heard a rumor recently that none of the currently existing, production
quality (now we're *really* cutting the field down) Ada compilers does
garbage collection.

We are developing an Ada program that does a lot of string manipulation and
have found that the program requires a surprisingly large amount of memory
in which to run.  We are using DEC's compiler, which in almost every (other)
respect has proven outstanding.

I'd appreciate any insights...

                                                     Alex.

^ permalink raw reply	[flat|nested] 83+ messages in thread
[parent not found: <1979@mit-eddi.UUCP>]

end of thread, other threads:[~1999-08-23  0:00 UTC | newest]

Thread overview: 83+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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             ` Robert Dewar
1999-08-21  0:00               ` Matthew Heaney
1999-08-21  0:00             ` Matthew Heaney
1999-08-21  0:00           ` garbage collection [storage pools] Robert Dewar
1999-08-21  0:00             ` Simon Wright
1999-08-21  0:00           ` garbage collection Robert Dewar
1999-08-21  0:00         ` Brian Rogoff
1999-08-21  0:00       ` Robert Dewar
1999-08-21  0:00         ` Default Storage Pool (was Re: garbage collection) Simon Wright
1999-08-23  0:00           ` Robert A Duff
1999-08-18  0:00 ` garbage collection Pascal MALAISE
1999-08-20  0:00   ` David Botton
1999-08-18  0:00 ` Gisle S�lensminde
  -- strict thread matches above, loose matches on Subject: below --
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-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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox