From: billwolf@hubcap.clemson.edu (William Thomas Wolfe,2847,)
Subject: Re: Ada language revision
Date: 16 Nov 88 19:06:02 GMT [thread overview]
Message-ID: <3563@hubcap.UUCP> (raw)
In-Reply-To: 44449@beno.seismo.CSS.GOV
In view of the recent discussions re: appropriateness of revisions, I'm
hereby submitting the revisions I think appropriate for Ada 9X for general
discussion and/or flamage:
1) The assignment operator should be available for overloading
as part of an ADT specification (i.e., a limited private type
which is enclosed within a (usually generic) package). Currently, the
closest we can come is to define an ASSIGN procedure. Unfortunately,
this is not consistent with the use of := for other object types, and
worse yet, the ASSIGN procedure is not invoked during the evaluation of
in parameters, making it impossible to achieve anything other than a
shallow copy of a user-defined ADT which is used as a value parameter,
the disastrous implications of which should be readily apparent.
2) Similarly, there is no provision for defining the DESTROY procedure
over an abstract data type such that UNCHECKED_DEALLOCATION is required
to invoke it. Again, we have inconsistency with the predefined
objects, and there are unfortunate implications for space efficiency.
3) The rule that a limited private type cannot be a direct component of
another limited private type should be repealed. This makes it hard
to use one ADT as a building block in the construction of higher-level
ADTs. The standard workaround is to use an intervening pointer, with
negative implications for time and space efficiency upon each access.
4) It should be possible to overload generic packages with differing
generic parameter structures. For example, suppose I have two
generic linked list requirements: sometimes I need the ability to
INPUT and OUTPUT the list to a file, and sometimes I don't. If I
can't overload the package with differing generic parameter structures,
I'll have to include the procedures INPUT (LINKED_OBJECT) and
OUTPUT (LINKED_OBJECT) in every instantiation of a linked list;
even if I have no intention of ever calling the INPUT and OUTPUT
procedures for this particular type of linked list. Result: more work
on my part to define unnecessary INPUT and OUTPUT procedures which will
never be called, and possibly an unnecessarily large body of
instantiated code which contains code to handle procedures that I will
never call.
5) The rule that functions must have only in parameters should be
repealed. Data structures which are history-sensitive, such as tree
structures which secretly keep a "current item" pointer in order to
speed up groups of requests which all involve the same item, will
subtly change as a result of calls to the Boolean function ITEM_EXISTS;
this forces us to use an intervening pointer in order to implement
such a function with only in parameters, and suffer the resulting time
and space penalties upon each and every access to the structure.
6) Exceptions should be capable of being passed as parameters. Currently,
it is not possible to write a function ASSERT which takes a Boolean
expression and an exception, and raises the exception if the expression
turns out to be false. The workaround is to enclose every call to
ASSERT in a local block, with an exception handler specifying that
the desired exception should be raised in response to the exception
Assertion_Failed.
7) Arrays should be initializable via named association. It is very
tedious to write out 37 Falses simply in order to initialize the
38th element of a Boolean array to True before I can finally specify
that all other elements of the array are False.
8) Record types should have the attributes NUMBER_OF_FIELDS,
FIELD_NAME (Field Number), and FIELD_TYPE (Field Number). Not having
these attributes prevents the construction of a generic report
generator which will accept a record type as a generic parameter,
and provide a function GENERATE_REPORT which, given a file of those
records, will automatically generate a report in which the column
headers are labeled with the field names (with spaces substituted for
underscores), and automatically laid out across the page with the
appropriate spacing between columns. Assuming the availability of an
appropriate system call, the name of the source file could even be
used as the report title. But without being able to read that record
descriptor, the implementation of such a generic report generator is
very hard to achieve in any reasonably clean way.
Well, there they are. Now where was that fireproof outfit...?
Bill Wolfe
wtwolfe@hubcap.clemson.edu
next prev parent reply other threads:[~1988-11-16 19:06 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
1988-11-14 13:20 Ada language revision Stanley Roger Allen, AdaDude
1988-11-15 23:28 ` Wilmer Rivers
1988-11-16 19:06 ` William Thomas Wolfe,2847, [this message]
1988-11-17 15:34 ` Stephe Leake
1988-11-18 16:39 ` Steve Tynor
1988-11-18 19:22 ` Ron Guilmette
1988-11-23 22:22 ` William Thomas Wolfe,2847,
1988-11-29 15:35 ` Stephe Leake
1988-11-18 0:32 ` Ron Guilmette
1988-11-22 14:37 ` Stephe Leake
1988-11-23 13:37 ` Dennis Doubleday
1988-11-23 19:41 ` Steve Tynor
1988-11-23 21:14 ` Richard Pattis
1988-11-25 20:36 ` Robert Firth
1988-11-29 15:12 ` limited private types Stephe Leake
1988-12-01 23:06 ` Ron Guilmette
1988-12-05 1:48 ` Paul Stachour
1988-12-05 12:31 ` Reference Semantics William Thomas Wolfe,2847,
1988-12-06 0:29 ` Paul Stachour
1988-12-07 1:07 ` Reference Semantics, assignment overloading, etc Ray Trent
1988-12-08 17:36 ` Reference Semantics, assignment ryer
1988-12-06 16:56 ` limited private types ryer
1988-12-06 20:09 ` stt
1988-12-07 15:51 ` Stephe Leake
1988-11-21 15:40 ` Ada language revision stt
-- strict thread matches above, loose matches on Subject: below --
1988-11-28 22:19 Collective response to := messages Geoff Mendal
1988-11-29 14:39 ` Dennis Doubleday
1988-11-29 21:08 ` Ray Trent
1988-11-30 14:37 ` Stephe Leake
1988-12-01 14:54 ` David S. Rosenblum
1988-12-02 20:21 ` William Thomas Wolfe,2847,
1988-12-04 21:15 ` David S. Rosenblum
1988-12-04 23:27 ` William Thomas Wolfe,2847,
1988-12-05 14:46 ` David S. Rosenblum
1988-12-05 21:23 ` William Thomas Wolfe,2847,
1988-12-07 17:33 ` Stephe Leake
1988-12-07 16:03 ` Definition of pass by reference Robert Eachus
1988-12-07 17:15 ` Collective response to := messages Stephe Leake
1988-12-07 16:07 ` Stephe Leake
1988-12-09 3:15 ` David S. Rosenblum
1988-12-01 21:31 ` Ray Trent
1988-12-07 16:21 ` Stephe Leake
1988-11-30 16:29 ` David S. Rosenblum
1988-11-30 18:29 ` William Thomas Wolfe,2847,
1988-11-30 22:28 ` David S. Rosenblum
1988-12-01 3:09 ` William Thomas Wolfe,2847,
1988-12-01 15:16 ` David S. Rosenblum
1988-12-02 19:31 ` William Thomas Wolfe,2847,
1988-12-04 21:03 ` David S. Rosenblum
1988-12-05 2:34 ` William Thomas Wolfe,2847,
1988-12-05 14:07 ` David S. Rosenblum
1988-12-07 17:26 ` Stephe Leake
1988-12-06 19:16 ` Collective response to := messa stt
1988-12-09 3:39 ` David S. Rosenblum
1988-11-30 19:13 ` CORRECTION Re: Collective response to := messages David S. Rosenblum
1988-12-01 18:31 ` Ray Trent
1988-12-02 14:49 ` David S. Rosenblum
1988-12-05 17:33 ` Collective response to := messa stt
1988-11-30 18:24 ` Collective response to := messages Robert Eachus
1988-12-02 14:58 ` David S. Rosenblum
1988-12-02 19:34 ` Mark C. Adolph
1988-12-05 17:15 ` Collective response to := messa stt
1988-11-29 21:44 ` Collective response to := messages William Thomas Wolfe,2847,
1989-07-26 20:34 Memory Access Question tony
1989-07-27 13:06 ` richard a hammond
1989-07-27 18:53 ` Ray Trent
1989-07-28 0:48 ` Mike Murphy
1989-08-02 13:23 ` Mike Walsh
1989-08-02 20:20 ` Mike Murphy
1989-07-29 0:00 ` Brian Sullivan
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox