From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,d1df6bc3799debed X-Google-Attributes: gid103376,public From: bobduff@world.std.com (Robert A Duff) Subject: Re: Language Design Mistakes (was "not intended...") Date: 1997/05/16 Message-ID: #1/1 X-Deja-AN: 241975432 References: <199705151433.OAA18453@sw-eng.falls-church.va.us> Organization: The World Public Access UNIX, Brookline, MA Newsgroups: comp.lang.ada Date: 1997-05-16T00:00:00+00:00 List-Id: In article <199705151433.OAA18453@sw-eng.falls-church.va.us>, John Walker wrote: >It is not at all clear that MIL-STD-1815 was merely a "draft" for >1815A. I have heard both that the differences between the two >versions were profound and crucial, *and* that they were relatively >modest. I have a copy of the Ada manual from July 1980. From the point of view of a programmer, the changes from this document to the final Ada 83 standard were modest -- the bulk of the functionality, and what it looked like, didn't change much. However, lots of bugs were fixed, and other minor changes were made. To a compiler writer, these changes are quite large. Here are a couple of the "bigger" changes (from both points of view): In Ada 80, you could say "raise T'Failure;", for any task T. This was a lot like "abort T;", except that T could handle it (using an exception handler). This feature has a lot in common with Ada 95's "select...then abort...". Ada 80 required the compiler to determine a "correct" elaboration order, by looking at which subprograms get called (directly and indirectly) during elaboration, and making sure the bodies of those subprograms are elaborated before the calls. One way to read this rule requires the compiler to predict (at link time) which calls will happen during elaboration (at run time). This is of course ludicrous, since it would require the compiler/binder to (1) solve the halting problem, and (2) predict the value of any input data read during elaboration. Therefore, I *suspect* that they meant for the compiler/binder to do a walk of the call graph. This rule was eliminated for Ada 83, and pragma Elaborate was added. Here's a "smaller" change: There was a rule that you couldn't have a record component that is an array with non-static bounds, *unless* those bounds are discriminants. This rule was eliminated between 1980 and 1983. >...It might be interesting from a historical perspective for >someone to describe the differences and their signficance, both for >the language and for its implementation. If anyone is aware of any >publications on the topic, I'd really like to hear about them. Well, if you can get ahold of it, the best thing to do is read the old document(s), instead of somebody's list of differences. The differences between Green and Ada 83 are much larger, and more interesting. E.g. the entire tasking model was completely redone. Another interesting thing to do is to read the Red manual. - Bob