502 lines
20 KiB
Ada
502 lines
20 KiB
Ada
From: news@fedfil.UUCP (news)
|
||
Newsgroups: talk.origins
|
||
Subject: The other crusade
|
||
Message-ID: <133@fedfil.UUCP>
|
||
Date: 29 Nov 92 02:59:28 GMT
|
||
Organization: HTE
|
||
Lines: 494
|
||
|
||
|
||
|
||
This post has absolutely nothing to do with origins, but rather with
|
||
the one other crusade I occasionally indulge in on usenet, i.e. the
|
||
crusade to rid the earth of the Ada programming language. I am about as
|
||
universally loved in the Ada group as on t.o. and for the same basic
|
||
crime, preaching reality. I've had one such article published in the
|
||
C++ Journal, and a number of others which are favorites on usenet (comp.
|
||
lang.ada), and the following article is probably THE all time favorite.
|
||
|
||
Two reasons for bringing this up at all: to give t.o. readers just a tad
|
||
more than the one-dimensional view of myself which you'd get on t.o., and
|
||
two, as an exmple of the utility of comprehending something BEFORE it
|
||
becomes common knowledge. Not too many people would have told you that
|
||
Ada was not going to make it even two years ago; I've been telling
|
||
everybody who would listen that Ada couldn't make it for five years.
|
||
Traffic on comp.lang.ada now concerns the demise of the Army STANFINS
|
||
project at Fort Benjamin Harrison, the project which General Short
|
||
said Ada would live or die with.
|
||
|
||
................................................................
|
||
................................................................
|
||
|
||
|
||
I and a number of my associates, as well as a number of the most
|
||
prominent computer scientists of our age, most notably Charles Anthony
|
||
Richard Hoare, the inventor of the quick-sort process (Turing Award
|
||
Lecture, 1980), believe the Ada programming language to be not only a
|
||
major source of frustration and unnecessary cost to everybody involved
|
||
with it, but an actual threat to the security of the United States and
|
||
of any other nation which might become involved with it.
|
||
|
||
The following is from usenet:
|
||
|
||
|
||
From: Nigel Tzeng, NASA
|
||
|
||
|
||
>Oh yes...on the other front...executable size...we are sometimes space limited
|
||
>on the size of the programs we can have in the on-board systems...how do the
|
||
>C vs ADA sizes compare?
|
||
|
||
>This information is important to know...otherwise we cannot make an intelligent
|
||
>decision on which language to use in the future. NASA is trying to figure out
|
||
>if they should adopt ADA as the single official language. Developers at NASA
|
||
>need to know the hard data in order to decide whether to support such a stand.
|
||
|
||
Good thinking. With enough work and most Ada features turned off, Ada speeds
|
||
for some tasks should approach those of C. This has little or nothing to do
|
||
with the BIG problems of Ada, which are philosophical/economic in nature
|
||
and not easily amenable to technical solution. Executable size is a
|
||
symptom of one such problem.
|
||
|
||
|
||
From: Jim Harkins, Scientific Atlanta, San Diego, CA
|
||
|
||
>(Bill Wolfe) writes:
|
||
>> There is a great need for a single production programming language
|
||
>> which supports good software and code engineering practices.
|
||
|
||
>Yep, and there is great need for a single type of automobile. Any idiot can
|
||
>see that not only is it extremely dangerous for a person to go from driving
|
||
>a Hyndai Excel to a Ford Aerostar, as a nation we are wasting an awful lot
|
||
>of time both in learning new skills and in designing automobiles that differ
|
||
>in several respects. I think a good compromise would be the Ford Escort...
|
||
|
||
This is a REAL good analogy, but I'm afraid Jim doesn't carry it far
|
||
enough, simply because he can't conceive of it actually happening.
|
||
Problem is, the Ada crew CAN. You have to put yourself in their
|
||
shoes; they want to control the two extremes of programming, embedded
|
||
systems and mainframe/database work, and everything in between and,
|
||
hence, they need every feature in the world in their CORE LANGUAGE.
|
||
Letting people make up their own libraries for applications (as per C/UNIX)
|
||
would be too much like a free system. Logical consequence:
|
||
|
||
|
||
"My only problem with Ada at this point is the cost ($ and hardware
|
||
resources) of a compiler for my XT clone. Both IntegrAda and Janus require
|
||
more memory than DOS 4.01 leaves available. This is BAD DESIGN. There
|
||
is no excuse for a 551K executable in a PC (pass 2 of Integrada). Janus
|
||
Ada requires > 580K available to run, and rumor has it that the Integrada
|
||
compiler is a repackaged Janus compiler."
|
||
|
||
From a recent comp.lang.ada posting.
|
||
|
||
|
||
Everybody begins to realize: "Hey!, looks like Ada's the only
|
||
thing I'm ever gonna have, so I'd better see to it that everything I
|
||
ever plan on doing is part of Ada...", and we get Ada-9x, the language
|
||
which will include all the great features that Ada left out. Kind of like
|
||
quick-sand or one of those old Chinese finger traps... the more you
|
||
struggle, the worse it gets.
|
||
|
||
The good news is that, given the speed at which these things happen,
|
||
Ada-9x is probably 10 years away. The bad news is two-fold: first,
|
||
Ada-9x will probably break all existing Ada code and, second, the clunk
|
||
factor will likely be so great (1,000,000+ bytes for "HELLO WORLD" might
|
||
actually be achieveable), that no more working Ada code will ever be written
|
||
afterwards. Total paralysis.
|
||
|
||
Several times recently, Ada affectionados have posted articles
|
||
concerning the national information clearinghouse for Ada-9x, including
|
||
the phone-modem number (301) 459-8939 for Ada-9x concerns. This BBS
|
||
contains 744 recent user comments on Ada in it's present state; true life
|
||
experiences of actual Ada sufferers. These are grouped in bunches of 50
|
||
in self-extracting zip files (e.g. 101-150.exe) and may be downloaded.
|
||
For instance:
|
||
|
||
|
||
complaint #0300
|
||
|
||
|
||
PROBLEM:
|
||
|
||
Currently, to create and mature an Ada compiler, it takes from
|
||
3..5 years. For the new architectures of the future and rapid
|
||
compiler development, the language needs to be expressed in terms
|
||
that are easy to parse and to generate code.
|
||
|
||
The definition should be revamped so that the grammar in Ada to
|
||
conform to LR(m,n) for consistent/complete parsing rules -- the
|
||
most efficient and accurate compiler techniques. Move more
|
||
semantics to the grammar specification to rid the language
|
||
definition of so many special cases.
|
||
|
||
The solution proposed, unless I'm missing something, would break nearly
|
||
all existing Ada code, hence it isn't likely to happen. Doesn't say
|
||
much for the basic design of Ada either, does it?
|
||
|
||
Add the time to finish the 9x standard and the 2 - 3 year time between
|
||
first-compiler <--> compiler-which-anybody-can-stand-to-use, and you get
|
||
my ten year figure for 9x. Sort of; there may never actually be a 9x
|
||
compiler which anybody can stand to use.
|
||
|
||
Here's the rub: a casual reading of the 744 little "problems" would
|
||
lead one to believe that 1 out of every ten or so was a show-stopper, and
|
||
that nine of ten are just people whining for new features. This would
|
||
be a misinterpretation. In fact, it's probably all of those new
|
||
features which are the big serious problem, given past history. The ten
|
||
year problem, however, says that anybody figuring to use Ada starting
|
||
now had best get used to the more minor problems (the 1 out of 10).
|
||
These include:
|
||
|
||
|
||
complaint #0237
|
||
|
||
We cannot adequately configure large systems as the language now
|
||
stands. There are no standard means of performing the kind of
|
||
operations on library units generally considered desirable. These
|
||
include:
|
||
- creating a new variant or version of a compilation unit;
|
||
- mixed language working, particularly the use of Ada units by
|
||
other languages;
|
||
- access control, visibility of units to other programmers;
|
||
- change control and the general history of the system.
|
||
The inability to do these things arises out of a few loosely worded
|
||
paragraphs in the LRM (in 10.1 and 10.4), which imply the existence
|
||
of a single Ada program library, whose state is updated solely by
|
||
the compiler. This can be an inconvenient foundation on which to
|
||
build. The relationships between compilations in a project will be
|
||
determined by the problem and the organization of work, and any
|
||
automatic enforcement of a configuration control regime must come
|
||
from a locally chosen PSE. Ada especially, as a language with large
|
||
and diverse application, must have a separate compilation system
|
||
which gives the greatest freedom possible in this area.
|
||
|
||
|
||
IMPORTANCE:
|
||
|
||
ESSENTIAL
|
||
|
||
Ada was intended for use in large projects, involving many people,
|
||
possibly at different centers. These are precisely the projects
|
||
which will collapse if the programming support technology is
|
||
inadequate.
|
||
|
||
|
||
|
||
That is, Ada can't realistically be used for large systems.
|
||
|
||
|
||
complaint #0150
|
||
|
||
Due to the availability of virtual memory, most minicomputer
|
||
and mainframe programmers rarely consider the size of main memory
|
||
as a limiting factor when creating their programs. In contrast,
|
||
th size of main memory is a major concern of microcomputer
|
||
programmers. The most widely used microcomputer operating
|
||
systems, MS-DOS, does not have virtual memory capabilities.
|
||
Without the availability of special programming techniques to get
|
||
around this limitation, microcomputer programmers would have to
|
||
severely limit the functionality of their programs, and, it would
|
||
be impossible to create large, integrated information systems for
|
||
microcomputers. One of most widely used of these programming
|
||
techniques is the "chaining" capability provided in many
|
||
programming languages. "Chaining" gives a programmer the ability
|
||
to break down large integrated information systems into separate
|
||
executable programs, and, then, when the system is operated, swap
|
||
these programs in and out of main memory as the need arises.
|
||
"Chaining", in effect, simulates virtual memory. Ada does not
|
||
have the capability to chain programs. As a result,
|
||
microcomputer programmers who use Ada must severely limit the
|
||
functionality of their programs.
|
||
|
||
Importance (1-10)
|
||
|
||
1 - Microcomputer programmers who use Ada will have to
|
||
continue limiting the functionality of their programs.
|
||
Current Workarounds
|
||
|
||
Programmers must either limit the functionality of their Ada
|
||
programs or use a proprietary CHAIN command supplied by the
|
||
compiler manufacturer - which hurts portability.
|
||
|
||
|
||
I.e., Ada can't be used for small systems... klunk factor's too high.
|
||
|
||
|
||
Consider the one feature which might come remotely close to justifying
|
||
this giant klunk factor: object-oriented capabilities.
|
||
|
||
complaint #0599
|
||
|
||
|
||
PROBLEM:
|
||
|
||
Inheritance has become one of the standard attributes of
|
||
modern object-oriented programming languages (such as C++
|
||
and Smalltalk-80). Unfortunately, Ada is quite deficient in
|
||
its support for inheritance ( it is based primarily on
|
||
derived types, and then not particularly well), and this is
|
||
a valid criticism leveled at the language by critics (and C
|
||
bigots who, if forced to learn a new language, simply prefer
|
||
to learn C++). There are currently many proposals to add
|
||
full-blown inheritance (and other standard object-oriented
|
||
attributes, such as polymorphism) to Ada; the scope of this
|
||
revision request is much more modest, intended only to make
|
||
the derived type mechanisms that already exist work better.
|
||
|
||
IMPORTANCE: ESSENTIAL
|
||
|
||
If the lack of modern object-oriented attributes is not
|
||
addressed in Ada 9X, Ada will almost certainly become the
|
||
FORTRAN of the '90's.
|
||
|
||
CURRENT WORKAROUNDS:
|
||
|
||
Be thankful for what limited object-oriented support is
|
||
offered by the current language.
|
||
|
||
|
||
|
||
|
||
Consider Ada's original primary mandate: embedded systems:
|
||
|
||
|
||
complaint #0021
|
||
|
||
|
||
PROBLEM:
|
||
|
||
A high priority task may be suspended because it needs to rendezvous with
|
||
a low priority task. That low priority task does not get scheduled
|
||
promptly because of its priority. However this causes the high priority
|
||
task to be suspended also.
|
||
|
||
IMPORTANCE: (7)
|
||
|
||
This problem makes the use of task priorities extremely difficult to apply
|
||
correctly in a large system. It limits the ability to use task priorities
|
||
to improve throughput in a system.
|
||
|
||
|
||
complaint #0072
|
||
|
||
|
||
|
||
PROBLEM:
|
||
|
||
The Ada priority system has proved quite inadequate for the
|
||
needs of certain classes of hard realtime embedded systems.
|
||
These are applications where a high degree of responsiveness
|
||
is required.
|
||
|
||
For example, there is a major conflict between the fifo
|
||
mechanism prescribed for the entry queue and the need for the
|
||
highest priority task to proceed wherever possible.
|
||
|
||
|
||
complaint #0084
|
||
|
||
problem
|
||
|
||
Ada tasking involves too much run-time overhead for some high-performance
|
||
applications, including many embedded systems applications for which the
|
||
language was designed. This overhead not only slows down the program in
|
||
general, but may also occur at unpredictable times, thus delaying response at
|
||
critical times. To avoid the overhead, real-time programmers frequently
|
||
circumvent Ada tasking.
|
||
|
||
The problem is exacerbated by Ada's lack of support for those who do try to use
|
||
tasking in an efficient manner. There is no standard set of guidelines to
|
||
programmers for writing optimizable tasking code, or to language implementors,
|
||
for deciding which optimizations to perform. Also, there is no simple way for a
|
||
programmer who is concerned with writing portable high-performance code to
|
||
check that optimizations applied under one implementation will be applied under
|
||
different implementations.
|
||
|
||
The consequences of Ada tasking overhead have not gone unnoticed in higher
|
||
circles of government. A recent General Accounting Office report [1] noted that
|
||
Ada has limitations in real-time applications that require fast processing
|
||
speed, compact computer programs, and accurate timing control. All three of
|
||
these requirements are directly and adversely affected by Ada's current
|
||
tasking overhead.
|
||
|
||
|
||
complaint #0278
|
||
|
||
|
||
PROBLEM:
|
||
|
||
In the last 5 years, tomes have been written on the Ada tasking
|
||
model. It is too complex and has too much overhead for embedded
|
||
systems to utilize effectively. It also does not fit well with
|
||
architectures found in embedded systems, e.g., multiprogramming/
|
||
distributed processing. The control mechanisms are not
|
||
responsive to realtime needs. Applications programs are
|
||
responsible for housekeeping on context switches where the
|
||
process will not return to the previously selected context. The
|
||
model does not support the well-known basic scheduling
|
||
disciplines, e.g., preempt or nonpreempt and resume or nonresume,
|
||
see Conway's Theory of Scheduling. The problems with tasking
|
||
efficiency is not the maturity of the compilers, but in the
|
||
underlying model defined in the language and the validation
|
||
requirements for the compilers.
|
||
|
||
importance: very high, one of the major goals for the Ada 9x
|
||
|
||
current workarounds: Programming standards to avoid tasking or
|
||
only initiate a single task and to not use rendezvous of any kind
|
||
as they are too unpredictable and require too much overhead.
|
||
Allow the ACVC not to test this section so that the application
|
||
does not have to absorb a runtime system from a compiler vendor
|
||
that has little experience with the applications.
|
||
|
||
Or, write in a language like Modula-2 or object oriented C++ that
|
||
does not interfere in the target architecture.
|
||
|
||
|
||
|
||
i.e. Ada can't really be used for embedded systems, its original mandate.
|
||
How about something simple like string handling?
|
||
|
||
|
||
complaint #0163
|
||
|
||
Problem:
|
||
Strings are inadequate in Ada. It is very frequently the case that
|
||
the length of a string is not known until it is formed...after it
|
||
has been declared. This leads to ugly, clumsy constructions (blank
|
||
pad everything, keep track of length separately, play tricks with
|
||
DECLARE's and constant strings, etc.). The obvious solution of
|
||
writing a variable-length string package (see LRM, section 7.6) is
|
||
unsatisfactory: you are lead to a limited private type because
|
||
neither the standard equality test nor assignment are appropriate.
|
||
(you want the both to ignore everything beyond the actual length of
|
||
the strings) For limited private types, however, you have no
|
||
assignment statement at all. We implemented such a package and
|
||
found that using a procedure (SET) for assignment was error-prone
|
||
and hard-to-read. This even for experienced programmers and even
|
||
after getting beyond the initial learning curve for the package.
|
||
|
||
|
||
How about something REAL SIMPLE, like argc/argv?
|
||
|
||
complaint #355
|
||
|
||
|
||
PROBLEM:
|
||
|
||
It is difficult, in a standard manner, to get at the operating
|
||
system command line arguments supplied when the program is invoked.
|
||
|
||
|
||
IMPORTANCE:
|
||
|
||
(Scale of 1 - 10, with 10 being most important):
|
||
<<8>>
|
||
|
||
|
||
CURRENT WORKAROUNDS:
|
||
|
||
Look up in vendor-specific manuals the method of accessing the
|
||
command line parameters and access them differently on different
|
||
operating systems.
|
||
|
||
|
||
What about writing an OS in Ada (so that real "software engineers" won't have
|
||
to screw around with UNIX anymore)?
|
||
|
||
complaint #0186
|
||
|
||
|
||
It is difficult, if not impossible, to use Ada to write an operating
|
||
system. For example, a multiprocessor naval command and control
|
||
system might need basic software, comparable in complexity to a
|
||
minicomputer network operating system, to support fault tolerance,
|
||
load sharing, change of system operating mode etc. It is highly
|
||
desirable that such important software be written in Ada, and be
|
||
portable, i.e. be quite independent of the compiler supplier's Ada
|
||
run time system. Currently, it would be very difficult to do this
|
||
in Ada, because of the difficulty of manipulating tasks of arbitrary
|
||
type and parentage.
|
||
|
||
IMPORTANCE: 7.
|
||
|
||
|
||
CURRENT WORKAROUNDS:
|
||
|
||
Use operating systems written in C or assembler.
|
||
|
||
Write the operating system as an extension of the Ada run time
|
||
system - this is undesirable because it is non-portable and
|
||
unvalidated.
|
||
|
||
|
||
What about basic portability?
|
||
|
||
|
||
complaint #0365
|
||
|
||
|
||
Problem:
|
||
Implementation Options Lead to Non-Portability and
|
||
Non-Reusability.
|
||
|
||
Discussion: The LRM allows many implementation
|
||
options and this freedom has lead to numerous
|
||
"dialects" of Ada. As programs are written to rely on
|
||
the characteristics of a given implementation,
|
||
non-portable Ada code results. Often, the programmer
|
||
is not even aware that the code is non-portable,
|
||
because implementation differences amy even exist for
|
||
the predefined language features. Further, it is
|
||
sometimes not impossible to compile an Ada program with
|
||
two different implementations of the same vendor's
|
||
compiler.
|
||
|
||
Another kind of non-portability is that of the programmer's
|
||
skills, The user interfaces to Ada compilers have become so
|
||
varied that programmers find it very difficult to move from
|
||
one Ada implementation to another, Not only does the
|
||
command line syntax vary, but so do program library
|
||
structures, library sharability between users, compiler
|
||
capabilities, capacity limits. etc.
|
||
|
||
Importance: ESSENTIAL
|
||
|
||
Current Workarounds:
|
||
|
||
Significant amounts of code rewriting, recompilation, and
|
||
testing must be done to get a given Ada program to compile
|
||
and to run successfully using another compiler, if at all
|
||
possible, even on the same host-target configuration. It
|
||
is very difficult to write a truly portable Ada program.
|
||
|
||
Another possible solution to porting an Ada program is for
|
||
a customer to carefully choose a compiler to suit the given
|
||
Ada program, or perhaps collaborate with a vendor to tailor
|
||
the compiler to suit these needs.
|
||
|
||
Significant amounts of programmer retraining must occur
|
||
when a different Ada compiler is used.
|
||
|
||
|
||
|
||
Somehow, all of this is beginning to remind me of a song I used to hear in
|
||
the late 60's/early 70's (roughly paraphrased):
|
||
|
||
|
||
"ADA! - KUH! - Yeah!, what is it GOOD for, absolutely NOTHIN!, say
|
||
it again... ADA! - KUH! - Yeah..."
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
--
|
||
Ted Holden
|
||
HTE
|
||
|