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=-0.8 required=5.0 tests=BAYES_00,INVALID_DATE autolearn=no autolearn_force=no version=3.4.4 Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!think.com!zaphod.mps.ohio-state.edu!swrinde!cs.utexas.edu!sun-barr!olivea!apple!netcomsv!jls From: jls@netcom.COM (Jim Showalter) Newsgroups: comp.lang.ada Subject: Re: Multitude of Problems Message-ID: <1991May20.084123.7009@netcom.COM> Date: 20 May 91 08:41:23 GMT References: <1991May20.015647.4051@grebyn.com> Organization: Netcom - Online Communication Services UNIX System {408 241-9760 guest} List-Id: >My own personal experience with Ada involved >writing various Ada/C interfaces (to get functionality which didn't >exist with Ada). More precisely, "to get functionality not available in either the Ada or C language definitions, but available via access to standard libraries". Of course, with this precision your statement loses its sting, don't you agree? >God knows what people in similar straits are going to >do when that option lapses. Not only is this option not going to "lapse", the Ada 9x language revision process is considering even more flexible and well-defined interface capabilities to other languages. For a language to actually define the method for interface to other languages is really quite rare: do you know of any similar features in C to accomodate a call to, say, a FORTRAN routine?--remember, your answer has to be a LANGUAGE feature, not some vendor-specific portable linker extension. >Beyond that, my experiences with Ada mostly >involve listening to horror stories from friends and compatriots >involved in large Ada projects. I've never heard so many people cry >so much over any one topic in my life. You need to qualify this in order for it to have much content. Were they complaining about Ada, the available tools, the problems inherent in any large project, or what? When were they doing this complaining?--if it was more than 5 years ago it is almost certainly all moot by now: the tools are industrial strength now, excellent books and training courses are available, key mappings (e.g. Ada/OO, Ada/2167A, Ada/SQL) have been established, there are considerably more talented Ada practitioners available now than there were, etc. Furthermore, it has been my experience that Ada winds up being the whipping boy on a lot of projects because it serves to underscore the wretched state of software engineering practice on so many projects. For example, because it is strongly and statically type-checked, constant change to package specs leads to incessant rebuilds of the system. It is easy to blame this on Ada, when in fact what is being highlighted is the need for a better architecture with a more stable set of interface definitions: clearly a software engineering problem, not a language problem. Besides, you act like there haven't been any horror stories in other languages, and yet here I have a large stockpile of them for C, C++, and Pascal. >>Anybody who doesn't want to use Ada has the freedom not to bid >>on any of the DoD's contracts. But do, please, stop WHINING about it. > >I prefer to try to "whine" about it BEFORE any American soldiers get >killed on account of it. Could you tell me, please, how a language with strong typing, direct support for abstraction, automatic constraint checking, built-in exception handling, a stable and international language definition, compiler validation, and some of the most powerful development tools in the world would be dangerous to American (and NATO, by the way) soldiers, particularly in comparison to C, which is weakly typed, performs no constraint checking, has no built-in error handling mechanism, and encourages bit-fiddling and address arithmetic? Ada is so well suited to life-critical problems with hard real-time constraints that it is the language of choice for the FAA's rewrite/upgrade of all air traffic control software in the U.S., and for the Space Station. It is also the language of choice in a number of process control applications (including nuclear power plants). It has consistently been chosen for applications where a mistake could be fatal...I guess when people's lives are on the line untyped pointer hacking seems a bit too risque. >>as for Mr. Holden's claim that "there are several FAR better answers out >>there in common usage, the most obvious of which is C++", this betrays >>is brute ignorance concerning Ada I warned you about at the start of >>his post. > >That's twice Showalter has accused me of ignorance within just a few >paragraphs. I've had one article concerning the Ada/C++ question >published in the C++ Journal; apparently, they took some of what I had >to say seriously. Yeah, and I published a scathing rebuttal of that article. I wasn't shocked that you wrote it, but I WAS shocked that they stooped to printing it. Apparently it is not a refereed journal. For those who were spared his article, Ted basically betrayed the same ignorance (there, I said it again!) of the facts he continues to display to this day. He quoted hearsay and gossip pulled from BBS's, he ignored all evidence supporting Ada (including success stories such as STANFINS-R), he indicated a complete lack of understanding of the challenges of large complex projects, and he ignored a number of significant issues related to the adoption of C++ by a development organization (e.g. tool maturity, lack of trained personnel, etc--basically the same things people complained about ten years ago with Ada). >>>Reality dictates that DOD cannot afford to proceed with Ada any further >>>than it has. Aside from the multitude of unbelievable problems which >>>are involved with Ada itself, > >>Note the cute rhetorical tactic: Mr. Holden raises the specter of Ada >>bogeymen but never actually commits to NAMING any of them. WHAT unbelievable >>problems? > >How could I not answer that? >Surely no reasonable person could begrudge me the opportunity to reply >to such a direct question. The man (Showalter) quite obviously has never >seen any of the following and certainly deserves to. >About a year ago, I put together a sort of a compendium on user reaction >to Ada which I still figure tells the whole story, or easily as much as >any rational person would ever need to know. Readers be the judge. > >.......................................................................... >.......................................................................... > > The Final Word on Ada > > > > 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. Uh, Ted? Your ignorance and zealotry are showing again. Those Ada features you want to turn off are little things like constraint checking, which are kind of important if you don't want to walk off the end of an array and start writing data where program should be, thereby causing your satellite to spiral slowly into the sun. You can certainly disable the checks, thereby making your Ada code a little more dangerous and, hence, a little more like C--but this is probably not a very bright idea in most cases. Damning something for running slower because it is running safer reminds me of the joke that ends "I could get the answer faster too, if I didn't have to be right". I'll sacrifice a little speed to keep from erroneous execution. I realize this may be an alien concept to a dyed-in-the-wool hacker, but even Hoare agrees that safety is important, so work with me, okay? Incidentally, your misinformation notwithstanding, NASA decided on Ada for the Space Station. >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. Letting people make up their own libraries for 40 years--with attendant loss of portability across applications--was part of the motivation for creating Ada in the first place. Whenever someone tells me they write in C/UNIX, the first question I ask is "Which one?". But more importantly, the claim that Ada is a big language is largely unfounded. Ada has two complex features not available in other languages, generics and tasking, but these are extremely powerful features with no clean workaround in other languages (generics by code copying and tasking by operating system calls leave a lot to be desired). Leaving aside generics and tasking, the remainder of the language is not really all that much more complex than Modula-2: basically a superset of Pascal with separation of specification and implementation, namespace control, and a better type model. Ada has about the same number of keywords and control structures as C++. True, the reference manual for the language is big, but that is because it is a precise definition of the language, something absent from most languages. >Logical consequence: > >>From a recent comp.lang.ada posting. > "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." This is a tools issue, not a language issue. If tool immaturity is sufficient reason to damn a language, then can I expect you to be fair and damn C++ as well? >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. You mean like C++ includes all the great features that C left out? Ted, would it be too much for me to at least insist on logical consistency and honesty in your arguments? So far you've attacked Ada for (obsolete) issues of tool maturity and for its planned evolution into the more complex language Ada 9x, and yet you fall strangely silent when those same issues could be just as equally applied to C++. Or are you just a bigot? >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 Actually, upward compatibility is sort of a Holy Grail for the 9x folks. >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. Ah. "Hello world." Funny you should mention that: I left a job at a large successful UNIX workstation vendor several years ago partly due to an argument over Ada and "Hello world". A developer dismissed Ada with a wave of his hand, saying "I don't want to take 20 minutes to write 'Hello world'.". I pointed out that 1) it didn't take 20 minutes to do that in Ada and 2) the issue wasn't small one line programs in the first place--the issue was large-scale software engineering on complex projects like, for example, maintaining and augmenting an operating system and attendant utilities, a process that was in a constant state of chaos using the existing methodology, tools, and language (whenever they succeeded in shipping a new build, it was more a testament to the power of the human will than to software engineering). Sadly (but not unexpectedly), the developer in question just didn't get it and went off to do another all-nighter in yet another battle to meet some deadline. I left for saner pastures. >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. You're missing something (why am I not surprised?). The removal of special cases should be largely upward-compatible, since all this means is that code that compiled previously under a more restrictive set of rules will compile now under a less restrictive set of rules. >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. Again, tools. You can buy a Rational Environment that solves all of the above problems, with no need to change the language at all. Sophisticated languages require sophisticated tools. This should not come as a surprise: C++ requires a browser to keep from going nuts locating classes, and yet C requires no such beast. Ada requires better support than is available from just an editor, batch compiler, and debugger. (Note: I no longer work for Rational and receive no money for plugging their stuff--their stuff is simply the best and deserves as much exposure as possible.) >That is, Ada can't realistically be used for large systems. Uh huh. You know, Ted--sometimes you say something so INCREDIBLY dumb I wonder if you're just pulling our collective leg. Ada has successfully been used on some of the largest and most complex software projects ever attempted, many of them over 1MSLOC in size. These succesful projects have ranged all over the spectrum of application domains, including MIS and AI. Or are you so completely ignorant of the facts that you truly believe that no projects have ever been successfully completed in Ada? >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. Chaining is not defined as part of the C ANSI standard, to the best of my knowledge. Is it? If not, then any chaining that is done for C programs is not an inherent part of C, is probably ALSO a proprietary and non-portable vendor-specific directive, and is therefore no better or worse than the equivalent support offered for Ada on PCs. Isn't it fairly standard for PC compiler vendors to kludge in this capability in some way? Turbo Pascal, for example, offers a chaining capability, but that certainly isn't part of any Pascal standard I'm aware of. Again, a tools issue. >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. I've addressed the issue of the relative importance of inheritance (particularly as supported by C++) to software engineering elsewhere. Suffice it to say that I think it represents about 5% of the true value of C++ over C. The remaining 95% is in the realm of additional features I term "software engineering oriented", such as strong typing, specification/implementation separation, opaque types, exceptions, data abstraction, and genericity--features already present in Ada for a decade. To damn Ada for the lack of inheritance is fair only if I can similarly damn C++ for the lack of concurrency. Incidentally, I'd be quite happy if Ada became the FORTRAN of the 90's. Indeed, I'd be overjoyed, since FORTRAN is by all measures an extremely successful language, far more so than C and C++ combined. Of course, I'm REALLY hoping it will be the COBOL of the 90's, in which case it would constitute 70% of all the software in the world. >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. Yep, this is a known problem, and it will be fixed. Gee, they made a mistake the first time around. Guess the language is a failure. >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. >People unfortunate enough to HAVE to use Ada for imbedded systems are >spending ten hours working around Ada and one hour trying to solve their >problem. The problem is that someday, somewhere along the line, one of >our pilots might have to actually fly something programmed like this against >something which has been programmed using real software tools. The complaints about tasking overhead and usability are largely unfounded. I know of many very successful projects with hard real-time constraints that have used tasking extensively and met all their performance goals (your claim that Ada "can't really be used for embedded systems" notwithstanding). Most complaints about tasking, on closer investigation, turn out to be due to lack of training and/or immature tools. The few issues that are real issues are being resolved. At least Ada provides a clear path toward such resolution, which is more than can be said for most languages. By the way, do you have any idea how insulting it is when you say something about Ada that implies it will kill soldiers? There are a lot of people committed to Ada precisely because they believe that it offers the BEST chance of AVOIDING such tragedies, and for you to mock them is rude and shocking in the extreme, particularly given your generally nonexistent grasp of the facts. One of the reasons I'm so adamant about Ada and so down on C is because I regard Ada as inherently safer than C, and I see that as a good thing. And I'm not alone. >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? Which, being heap allocated, work just EVER so well in embedded systems with tight memory constraints, right? Ada doesn't support variable length strings for the same reason it doesn't support variable length arrays--memory usage in embedded systems has to be determinable at compile time to the maximum extent possible. Besides, the "tricks" with declare blocks and constant strings are actually quite simple idioms I recommend to anybody using strings in Ada. >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)? Not a bad idea, actually--IBM didn't use Ada, but they DID rewrite UNIX from the ground up for their RS6000 because they deemed the existing implementation too erroneous to live with... But I digress. The real issue is that command line arguments are outside the language, just as they are in C. The only reason you THINK they're defined in C is that you're so used to arcg/argv that you don't realize that those are just conventions obeyed in UNIX. Write a C program on UNIX and try to port it to MS-DOS, and you'll see what I mean (unless the MS-DOS vender has been kind enough to already supply a workaround for you that acts like argv/argc). This complaint is silly and well outside the scope of the Ada language--if the complaint is that operating systems are not consistent across different platforms, I certainly agree that this is a problem, but what does that have to do with Ada? >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. Well, Rational did it, so it must be possible. >At a recent question and answer session for vendors involving a Navy >RFP for a project for which a POSIX compliant OS written in Ada was to >be required, the vendors informed the contract officer that the R would >draw no Ps with that requirement. This was in one of the Govt. computer >tabloids. Oh, to have been in on the bidding in this case! >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. Ada is not a 100% solution to this particular issue, and there are certainly a few issues (such as implementation-defined attributes) being addressed by Ada 9x, but try to remember your objective here: to beat Ada in comparison to other languages, not to find fault wherever you can with Ada. If you just want to find fault with Ada, I can trump you each time by saying "Yes, but it's far far worse in ." Try me: you claim that Ada is not 100% portable...I respond "Yes, but it's far far more portable than C". Your move. > 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. > >................................................................... Tools tools tools. Again all outside the scope of the language. Are all C compilers the same across platforms? Are the C compilers from the same VENDOR even the same across platforms? Not in my experience, and even in those rare cases where compiler consistency is maintained, you've now stuck yourself with one vendor (the very thing objected to above). Do I think it would be nice if tools were the same from platform to platform? Yes--but what does that have to do with Ada? >Quite aside from all of the above grief, a recent post to usenet >mentioned the fact that the Ada LRM quote regarding tasking reads >something like <...it shall not be the case that a lower priority task >shall be running and a higher priority task not...>, and that a totally >legit interpretation of this would involve simply running the higher >priority task to completion (or trying to) and then worrying about the >lower priority task. The fun would start when you tried to port an >application from that system to a "normal" one, whatever that might be >in the case of Ada. This is the Laurel and Hardy school of "software >engineering": powerful evidence that Strustrup and others who figure >tasking belongs in an OS and not in a language are correct. Uh huh--WHICH OS? See, in all of your atacks on tasking you've been beating up on Ada for failing to be totally portable across platforms, and yet I don't for the life of me see how you'd achieve this if you were writing code in C that was dependent on operating system calls to achieve its concurrency. Say you write it on Sun UNIX. Now you want it to run on DEC UNIX. Can you just copy it over, compile it, and run it? Doubtful--if all UNIX's are the same, what's the point of POSIX? But the problem is even worse--what if you want it to run on an MS-DOS platform? Are UNIX and MS-DOS the same? Don't think so. So what do you do? You rewrite at least some of your code (and, given the state of software engineering practice when it comes to architecture, layers, subsystems, and interfaces, you probably rewrite a LOT of your code because you sprinkled UNIX dependencies throughout its closure instead of confining them to a single layer exporting a virtual machine). So, Ada may not be 100% portable when it comes to supporting concurrency, but it is considerably better at it than languages that must call the underlying operating system to achieve concurrency. -- **************** JIM SHOWALTER, jls@netcom.com, (408) 243-0630 **************** *Proven solutions to software problems. Consulting and training on all aspects* *of software development. Management/process/methodology. Architecture/design/* *reuse. Quality/productivity. Risk reduction. EFFECTIVE OO usage. Ada/C++. *