Ada is rich in the variety of its abstraction mechanisms. It has both a data abstraction mechanism (packages with private data types) that supports a functional programming style and a program abstraction mechanism (generic program units) that supports an object-oriented program style. Tradeoffs between data and program abstraction are examined and it is pointed out that Ada discourages program abstraction because program units are not first-class objects. It is shown how program units could be made into first-class objects by introducing closures as values for functions and records with function components as values for packages. Further unification by allowing types to be first-class objects conflicts with the requirement of compile-time type invariance. The relaxation of this requirement in a manner that preserves type consistency is examined and leads to a notion of value for types as tuples of operations. It is suggested in the conclusion that our understanding of abstraction for object-oriented languages and of other language design, implementation, and environment issues will have progressed sufficiently by 1985 to warrant the design of a successor to Ada by the late 1980s.
[1]
Henry Ledgard,et al.
Reference Manual for the ADA® Programming Language
,
1983,
Springer New York.
[2]
Alan J. Demers,et al.
"Type-completeness" as a language principle
,
1980,
POPL '80.
[3]
F. L. Bauer,et al.
Revised report on the algorithmic languageAlgol 60
,
1962
.
[4]
Craig Schaffert,et al.
Abstraction mechanisms in CLU
,
1977
.
[5]
Craig Schaffert,et al.
Abstraction mechanisms in CLU
,
1977,
Commun. ACM.
[6]
Robin Milner,et al.
A Metalanguage for interactive proof in LCF
,
1978,
POPL.
[7]
B. J. Mailloux,et al.
Revised Report on the Algorithmic Language ALGOL 68
,
1976,
SIGP.
[8]
Barbara Liskov,et al.
Guardians and Actions: Linguistic Support for Robust, Distributed Programs
,
1983,
TOPL.