From: Ted Velkoff <velkoff@erols.com>
Subject: Re: Design By Contract
Date: 1997/08/27
Date: 1997-08-27T00:00:00+00:00 [thread overview]
Message-ID: <3403C44F.2424@erols.com> (raw)
In-Reply-To: 3403940F.4154@pseserv3.fw.hac.com
W. Wesley Groleau x4923 wrote:
>
> Question for anyone who _really_ knows both Eiffel and Ada:
> Suppose Ada added Eiffel assertions and Eiffel added separate
> compilation of specs. Or even some sort of automated control that
> prevented changing contract without special privilege.
>
> What remaining feature of either language (or both) would be a
> significant advantage over the other and why?
>
In no particular order I offer my view of the remaining differences. To
the best of my ability I've responded with reason and judgement :-)
Concurrency.
Ada's tasking is certainly more mature and tested in fielded
products. There has been a lot of research done into concurrency in Ada
that benefited Ada95.
I personally find the SCOOP approach to concurrency proposed for
Eiffel to be quite elegant from the standpoint of the ordinary
programmer building a concurrent system. I think the jury's still out
on how well it can be implemented. There are some important issues
(like priority inversion, rate-monotonic scheduling, etc., among many
others) that need to be addressed in order to be applied to the
some of the kinds of systems that have been done in Ada.
Constrained genericity.
Constrained genericity is achieved in Ada typically by adding
generic function or procedure parameters to the parameter list.
Depending on the generic type, that list of parameters could be long.
I think the Eiffel approach, which says an actual parameter must
conform to (i.e. inherit from) some class, is simple and powerful, and
typically results in shorter parameter lists.
Multiple inheritance.
I've read the section on multiple inheritance in the Ada95
Rationale several times and I confess I have never been able to
understand the 2nd or 3rd examples. At the very least, it appears that
just emulating multiple inheritance in Ada95 is hard.
Of course the religious question is whether you believe in MI or
not. After not being sure for about a year, I've come to believe it is
extremely useful. I think Bertrand Meyer is correct in saying that MI
is not bad as long as it is implemented properly. Using MI in Eiffel is
really just no big deal.
Dynamic binding.
Someone please correct me if I'm wrong on this one, but I think
in Ada95, the programmer has to designate whether dynamic binding can be
applied by making a type "classwide" with 'Class. I think this is
comparable to C++ "virtual", but I think I read that the Ada compiler is
supposed to figure out which classwide calls are actually static in an
executable. The chief objection (if I have understood the Ada mechanism
correctly) might be that one might forget to make a type classwide that
a descendant would need to override, and require a change to the code.
In Eiffel, dynamic binding is the default. The programmer has
to do something special ("frozen") to make it impossible for descendants
to redefine.
Garbage collection.
There are many applications being done in Ada for which garbage
collection is not appropriate (hard real-time, etc.). I suspect that
there are many more applications being done in Ada that could benefit
from garbage collection.
Eiffel is of course garbage collected. There are also library
facilities for fine-grained control during execution.
Exception handling.
Ada is fairly permissive with exceptions. (Meyer has written
about this in several places.) The bad things that I have done and seen
done in Ada are to use exceptions as gotos, and sweep problems under the
rug.
Eiffel is much more restrictive about what can be done in
response to exceptions. It significantly reduces the chances of
programmers doing these sorts of things.
Tool environments.
Articles have appeared in Ada Letters that questioned the wisdom
of incorporating inheritance into Ada95, based on the fact that
comprehension of a class interface requires manually finding and
traversing the set of ancestors. This problem is of course not unique
to Ada. As far as I know, Eiffel environments are the only I know of
that support class flattening (i.e. generating the union of all features
of all ancestors). They also support push-button access to the list of
clients, suppliers, ancestors, descendants. I don't know how many times
in other languages (including Ada) I have really needed to find out
"who's calling this?" and had nothing better at my disposal than grep.
Of course these are not language issues - I'd love to see vendors of Ada
products add these kinds of capabilities.
Child packages.
At a minimum, the rules about child packages are complicated.
I'm personally unconvinced by the examples in the Ada95 Rationale for
their use. In particular, the example of complex numbers seems to be
more properly addressed by inheritance (i.e. tagged types). I would
worry that programmers using that as a guide would attempt to solve many
problems with child packages that should use inheritance instead.
Pointers to functions, aliases.
I sort of got the heeby-jeebies when I saw these introduced into
Ada95. They didn't appear any easier or safer to use than their
counterparts in C/C++. In Ada83, you could sort of see the argument for
subprogram pointers, but once inheritance and abstract subprograms were
introduced, they seemed out of context to me.
Eiffel doesn't have these things since they are tricky to use
and jeopardize reliability.
-- Ted Velkoff
next prev parent reply other threads:[~1997-08-27 0:00 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
1997-08-21 0:00 Critique of Ariane 5 paper (finally!) aek
[not found] ` <33FC66AD.9A0799D4@calfp.co.uk>
1997-08-22 0:00 ` Robert S. White
1997-08-22 0:00 ` Samuel Mize
1997-08-22 0:00 ` Samuel Mize
1997-08-23 0:00 ` Ken Garlington
[not found] ` <33FFA4B1.3543@flash.net>
1997-08-26 0:00 ` Nick Leaton
[not found] ` <3403940F.4154@pseserv3.fw.hac.com>
1997-08-27 0:00 ` Ted Velkoff [this message]
[not found] ` <5u3c6v$gtf$2@miranda.gmrc.gecm.com>
[not found] ` <34058808.3BF@pseserv3.fw.hac.com>
1997-08-28 0:00 ` Design By Contract Darren New
1997-08-28 0:00 ` Patrick Doyle
1997-09-06 0:00 ` Joachim Durchholz
1997-09-06 0:00 ` Patrick Doyle
[not found] ` <JSA.97Aug27180328@alexandria.organon.com>
1997-08-28 0:00 ` W. Wesley Groleau x4923
1997-09-03 0:00 ` Don Harrison
1997-09-03 0:00 ` Jon S Anthony
1997-09-04 0:00 ` Don Harrison
[not found] ` <EFM140.Fy9@syd.csa.com.au>
1997-08-28 0:00 ` Jon S Anthony
1997-08-29 0:00 ` Don Harrison
1997-08-29 0:00 ` Jon S Anthony
[not found] ` <EFqE8L.4Eq@ecf.toronto.edu>
[not found] ` <JSA.97Aug30145058@alexandria.organon.com>
1997-09-01 0:00 ` Patrick Doyle
1997-09-02 0:00 ` Don Harrison
1997-09-02 0:00 ` Jon S Anthony
1997-09-03 0:00 ` Don Harrison
[not found] ` <JSA.97Sep3201329@alexandria.organon.com>
1997-09-04 0:00 ` Paul Johnson
1997-09-05 0:00 ` Jon S Anthony
1997-09-08 0:00 ` Nick Leaton
1997-09-08 0:00 ` Matthew Heaney
1997-09-09 0:00 ` Paul Johnson
[not found] ` <5un58u$9ih$1@gonzo.sun3.iaf.nl>
1997-09-06 0:00 ` Building blocks (Was: Design By Contract) Joachim Durchholz
1997-09-08 0:00 ` Paul Johnson
1997-09-08 0:00 ` Brian Rogoff
1997-09-09 0:00 ` Veli-Pekka Nousiainen
1997-09-09 0:00 ` Veli-Pekka Nousiainen
1997-09-09 0:00 ` Jon S Anthony
1997-09-09 0:00 ` W. Wesley Groleau x4923
1997-09-09 0:00 ` Matthew Heaney
1997-09-09 0:00 ` Brian Rogoff
1997-09-09 0:00 ` W. Wesley Groleau x4923
1997-09-10 0:00 ` Robert A Duff
1997-09-12 0:00 ` Jon S Anthony
1997-09-10 0:00 ` Paul Johnson
1997-09-10 0:00 ` Matthew Heaney
1997-09-10 0:00 ` Darren New
1997-09-10 0:00 ` Robert Dewar
1997-09-12 0:00 ` Jon S Anthony
1997-09-12 0:00 ` Robert Dewar
1997-09-16 0:00 ` Brian Rogoff
1997-09-12 0:00 ` Paul Johnson
1997-09-14 0:00 ` Robert Dewar
1997-09-15 0:00 ` John G. Volan
1997-09-14 0:00 ` Robert Dewar
1997-09-14 0:00 ` Robert Dewar
[not found] ` <EFzLn7.481@ecf.toronto.edu>
1997-09-04 0:00 ` Design By Contract Jon S Anthony
[not found] ` <EFz0pD.E6n@syd.csa.com.au>
1997-09-05 0:00 ` subjectivity W. Wesley Groleau x4923
1997-09-05 0:00 ` subjectivity Matthew Heaney
1997-09-10 0:00 ` subjectivity Don Harrison
1997-09-12 0:00 ` subjectivity Jon S Anthony
1997-09-16 0:00 ` subjectivity Don Harrison
1997-09-16 0:00 ` subjectivity Jon S Anthony
1997-09-10 0:00 ` subjectivity Don Harrison
1997-09-10 0:00 ` subjectivity W. Wesley Groleau x4923
1997-09-10 0:00 ` subjectivity W. Wesley Groleau x4923
1997-09-11 0:00 ` subjectivity Don Harrison
1997-09-05 0:00 ` Design By Contract W. Wesley Groleau x4923
[not found] ` <JSA.97Sep4172912@alexandria.organon.com>
[not found] ` <EG0oz8.F6M@syd.csa.com.au>
[not found] ` <EG0rp7.GtL@syd.csa.com.au>
1997-09-05 0:00 ` Matthew Heaney
1997-09-05 0:00 ` Jon S Anthony
1997-09-05 0:00 ` Nick Leaton
1997-09-08 0:00 ` Jon S Anthony
1997-09-09 0:00 ` Nick Leaton
1997-09-10 0:00 ` Paul Johnson
1997-09-06 0:00 ` Patrick Doyle
1997-09-09 0:00 ` Robert A Duff
1997-09-09 0:00 ` Matthew Heaney
1997-09-02 0:00 ` Joerg Rodemann
1997-09-02 0:00 ` Jon S Anthony
1997-08-29 0:00 ` Patrick Doyle
1997-08-29 0:00 ` Jon S Anthony
[not found] ` <EFqDw0.3x7@ecf.toronto.edu>
[not found] ` <JSA.97Aug30145354@alexandria.organon.com>
1997-09-01 0:00 ` Patrick Doyle
1997-08-28 0:00 ` Robert Dewar
1997-08-29 0:00 ` Don Harrison
[not found] ` <349224633wnr@eiffel.demon.co.uk>
1997-08-27 0:00 ` Design by Contract Robert Dewar
1997-08-29 0:00 ` Don Harrison
[not found] ` <3406BEF7.2FC3@flash.net>
[not found] ` <3406E0F7.6FF7ED99@calfp.co.uk>
1997-09-02 0:00 ` Critique of Ariane 5 paper (finally!) Ken Garlington
[not found] <5u1627$1fak@info4.rus.uni-stuttgart.de>
[not found] ` <EFM1Lx.GD2@syd.csa.com.au>
1997-08-28 0:00 ` Design by Contract Robert Dewar
-- strict thread matches above, loose matches on Subject: below --
1997-08-07 0:00 Safety-critical development in Ada and Eiffel Ken Garlington
1997-08-12 0:00 ` Don Harrison
1997-08-12 0:00 ` Jon S Anthony
1997-08-13 0:00 ` Ted Velkoff
1997-08-13 0:00 ` Ken Garlington
1997-08-14 0:00 ` Nick Leaton
1997-08-18 0:00 ` Joachim Durchholz
1997-08-19 0:00 ` Ken Garlington
1997-08-21 0:00 ` Joachim Durchholz
1997-08-23 0:00 ` Ken Garlington
[not found] ` <JSA.97Aug25181856@alexandria.organon.com>
[not found] ` <34023A1F.41C67EA6@eiffel.com>
1997-08-25 0:00 ` Design by Contract Bertrand Meyer
[not found] ` <JSA.97Aug26151833@alexandria.organon.com>
1997-08-27 0:00 ` Patrick Doyle
1997-08-25 0:00 ` Bertrand Meyer
1997-08-25 0:00 ` Steve Stringfellow
1997-08-26 0:00 ` Don Harrison
1997-08-25 0:00 ` Bertrand Meyer
[not found] ` <3402d123.0@news.uni-ulm.de>
1997-08-26 0:00 ` Nick Leaton
[not found] ` <3402e51d.0@news.uni-ulm.de>
[not found] ` <3402E8C9.3384D976@calfp.co.uk>
[not found] ` <dewar.872631036@merv>
1997-08-27 0:00 ` Ted Velkoff
1997-08-27 0:00 ` Matt Kennel (Remove 'NOSPAM' to reply)
[not found] ` <34050F3C.5A3A@invest.amp.com.au>
1997-08-28 0:00 ` Robert Dewar
1997-08-29 0:00 ` Paul Johnson
1997-08-31 0:00 ` Matt Kennel (Remove 'NOSPAM' to reply)
1997-09-01 0:00 ` John F. Bell III
1997-09-02 0:00 ` Ken Garlington
1997-09-05 0:00 ` Robert Dewar
[not found] ` <dewar.872887402@merv>
1997-09-02 0:00 ` Ken Garlington
1997-09-03 0:00 ` Thomas Beale
[not found] ` <EFxx8q.2sw@ecf.toronto.edu>
1997-09-04 0:00 ` Thomas Beale
1997-09-05 0:00 ` Robert Dewar
1997-09-05 0:00 ` Ken Garlington
[not found] ` <340306E1.5FB64D70@XYZZYcalfp.com>
1997-08-28 0:00 ` Mark Bennison
[not found] ` <bengtk-2708972209500001@sl35.modempool.kth.se>
1997-08-28 0:00 ` Nick Leaton
1997-08-25 0:00 ` Bertrand Meyer
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox