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,9e2776c05028676e X-Google-Attributes: gid103376,public From: Ken Garlington Subject: Re: Why Ada is not the Commercial Lang of Choice Date: 1997/06/19 Message-ID: <33A98E20.4662@lmco.com>#1/1 X-Deja-AN: 251149992 References: <33a1c14d.155787285@news.mhv.net> <5o5hv9$dcd$1@goanna.cs.rmit.edu.au> <33A83DA9.67E@lmco.com> Organization: Lockheed Martin Tactical Aircraft Systems Newsgroups: comp.lang.ada Date: 1997-06-19T00:00:00+00:00 List-Id: Ole-Hjalmar Kristensen FOU.TD/DELAB wrote: > > Ken Garlington writes: > > > > > Paul Van Bellinghen writes: > > > > > > Claim: > > > It is much easier in C, for example, to output a data word to > > > an I/O device that is memory mapped. > > > > > > Supporting Evidence: > > > 1 One need only define a pointer > > > 2 and assign it the memory mapped address > > > 3 then store the desired data value to the contents of the pointer. > > > > In Ada, something like: > > > > Memory_Mapped_Address : constant := 16#0100040#; > > > > Memory_Mapped_Value : Interfaces.C.unsigned; -- just to keep type > > compatibility > > for Memory_Mapped_Value'Address use Memory_Mapped_Address; > > > > Memory_Mapped_Value := 16#00344556#; > > > > And the neat thing is, Memory_Mapped_Value will always be mapped to the > > area of memory you want! No worries about your pointer being corrupted > > -- > > because there isn't a pointer! Who knows, now that the compiler knows > > that the address is fixed, you might even get more efficient code! > > You don't need the pointer in C either. Just > > #define Memory_Mapped_Value (*(int *) 0x0100040) > > Memory_Mapped_Value = 0x00344556; > > has the same effect, except for the scope of Memory_Mapped_Value. Then why did the original poster include it? Maybe he wanted to be proven wrong :) Claim #2: As is usually the case, trying to prove the superiority of one language vs. another by small variantions in the number of lines of code required to implement a capability is a waste of time. > > > > > > > > > Example: > > > #define mem_map_addr B0100040 > > > unsigned int *p; > > > > > > p = (unsigned int *) mem_map_addr; > > > > > > *p = 0x00344556; > > > > Claim: The Ada does the same thing, in the same number of lines, and it > > does it > > more safety, more clearly, and (gasp) possibly more efficiently! > > > > -- > > LMTAS - The Fighter Enterprise - "Our Brand Means Quality" > > Who uses Ada? See http://www.lmasc.lmco.com/f22 > > For job listings, other info: http://www.lmtas.com or > > http://www.lmco.com > > Btw., I have been thinking about not being able to assign an explicit > value to the tag of a discriminant union. It will certainly be a > problem, if you intend to store your unions in a file, and read this > file with another Ada program compiled with another compiler. > This would work well in C, because you would typically use an enum > with explicit assignment of values. Now, I am aware that in C, the tag > field is not mandatory, so it's not really a fair comparison, but it > means that you cannot output the union directly. > > Yes, I am aware that it will not be portable from one kind of CPU to > another anyway, and that you can circumvent the problem by converting > to an external data representation, but there are instances where you > want to reduce the overhead as much as possible, for instance when > working in the lower layers of a DBMS. > > It seems to me that in Ada, (almost) all problems can be solved, > according to the standard, but in practice, the implementations are > different enough that it does not work in some cases. In C, the > standard does not guarantee that it works, but it will, in all but a > few cases. The actual difference in terms of what is portable isn't > all that great. > > That said, from my former experience with Ada, I would personally > rather build a system in Ada than in C/C++ if compilers and > development systems are available at a reasonable price. > The project I'm working on, originally intended to use Ada (about 7 > years ago), but reverted to C++ after seeing the following > difficulties: > > 1. EVERY potential customer asked why it was written Ada, and not in C++, and > it was clearly seen as a serious drawback. > 2. Compilers very very expensive, even compared to C++. > 3. Compilers were not available for all the target operating > systems. (it turned out that we now use only Unix anyway, but that's > another story) > > I am still convinced that it would have been better to use Ada. We > have had a fair share of bugs which would typically not have occured > if we were using Ada, especially in the homegrown multi-tasking > system. However, from measurements I have been doing, the homegrown > multitasking is also very much faster than using Ada tasks. Of course, > we could avoid using Ada tasks, but then much (not all) of the benefit > of Ada would disappear as well. And in case you wonder, the task > switching time becomes very significant when you are running 100 - > 1000 transactions per second. But I would rather get it right first, > then optimize. -- LMTAS - The Fighter Enterprise - "Our Brand Means Quality" Who uses Ada? See http://www.lmasc.lmco.com/f22 For job listings, other info: http://www.lmtas.com or http://www.lmco.com