Jonathan Cunningham's contribution tempts me to follow up. As I have
not followed this discussion closely, please forgive any duplication.
Jonathan and Richard Hartman are correct in saying that GC means you
don't have to think so much about store management. But does this help?
The answer of course is that it depends on what you're doing. GC is a
high-level feature in the sense that it takes you further from the
machine; sometimes this is good, and sometimes not. To illustrate with
two extremes:
(a) Writing a knowledge-based system
Here one usually works in terms of the application domain, and it is
an immense overhead to have to consider store and other
machine-level issues.
(This is true even for an experienced programmer.)
Generally one uses something at the level of Prolog or higher.
(b) Writing an operating system
Here one is intimately concerned with the machine, and store issues
are paramount. Something at the level of C or assembler is usually
used.
Most cases are between these two extremes, and it is important to pick
the right kind of tool for the job. Pop11 and Lisp are interesting
instances of compromise, having many high-level features such as GC
while trying to give good access to the lower levels.
It's also common for an application to have different modules at
different levels. For example, because GUIs still tend to be approached
at a fairly low level, a programmer will often find herself needing
relatively low-level facilities for the user interface even if most of
the application has to be approached at a very high level. And this is
a relatively simple case - often many different levels are involved. In
such cases one should either use a mixed-level language like Pop11 or
Lisp, or a system like Poplog which allows code at a variety of
different levels to be closely-coupled.
Tom Khabaza, tomk@isl.co.uk
|