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.3 required=5.0 tests=BAYES_00,HK_RANDOM_FROM, INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,cef1e23795181e0c X-Google-Attributes: gid103376,public From: cjrgreen@concentric.net (Christopher Green) Subject: Re: Alternate to Unchecked_Conversion - Portable? Date: 1999/02/24 Message-ID: <36d50d18.695962@nntp.concentric.net>#1/1 X-Deja-AN: 448212110 References: <36d05e39.0@news.pacifier.com> <36d2638e.6427631@nntp.concentric.net> <7avpi0$jke$1@nnrp1.dejanews.com> <36d3ba85.713118@nntp.concentric.net> <7b2l6s$vu3$1@nnrp1.dejanews.com> Organization: Concentric Internet Services Newsgroups: comp.lang.ada Date: 1999-02-24T00:00:00+00:00 List-Id: On Thu, 25 Feb 1999 04:57:04 GMT, robert_dewar@my-dejanews.com wrote: >In article <36d3ba85.713118@nntp.concentric.net>, > cjrgreen@concentric.net (Christopher Green) wrote: >> In >> this case, it is natural enough, though not fully >> portable, to declare an Ada array of the actual >> size and map it onto the C array with an address >> clause. > >In Ada 83, this is ALWAYS an incorrect approach, because >it is erroneous, which means the compiler need make no >attempt at all (e.g. in suppressing optimziation) to >make this "work". Such compilers (there are a few still in use) are, for reasons like this, virtually useless for the sort of programming in which address clauses, Unchecked_Conversion, or equivalence between C pointer types and Ada access types is important. Theoretical correctness and actual correct operation are different things. There are many compilers on which the address clause mapping does work as it "should". >> In Ada 95, the package Interfaces.C.Pointers is >> a better solution to this kind of problem. > >If you look at the implementation of this package, it >will almost certainly use unchecked conversion on pointers! True; however, the level of abstraction in using Interfaces.C.Pointers is higher, and the reduction in programming effort and improvement in port- ability may be worth any trade in efficiency. Furthermore, if the Unchecked_Conversions internal to the Interfaces.C.Pointers package don't do the right thing, you can at least blame the compiler vendor. If you code Unchecked_ Conversions on your own and they don't do the right thing on the platforms you must support, you're stuck. >-----------== Posted via Deja News, The Discussion Network ==---------- >http://www.dejanews.com/ Search, Read, Discuss, or Start Your Own -- Chris Green Advanced Technology Center Laguna Hills, California