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=3.8 required=5.0 tests=BAYES_00,INVALID_MSGID, RATWARE_MS_HASH,RATWARE_OUTLOOK_NONAME autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 1014db,4873305131bf4d94 X-Google-Attributes: gid1014db,public X-Google-Thread: 109fba,4873305131bf4d94 X-Google-Attributes: gid109fba,public X-Google-Thread: 103376,4873305131bf4d94 X-Google-Attributes: gid103376,public From: "Pat Rogers" Subject: Re: Porting Experiences (was Ada and Pascal etc ) Date: 1997/11/04 Message-ID: <01bce929$4a8cbe80$560b6dce@my-pc.neosoft.com>#1/1 X-Deja-AN: 286971289 References: <34557f2b.1934172@news.mindspring.com> <345BB35E.4488@dynamite.com.au> <63ftj9$r9g@bgtnsc02.worldnet.att.net> <345E3ACD.A15@gsg.eds.com> <63mcmm$r3s$1@helios.crest.nt.com> Organization: Software Arts and Sciences Newsgroups: comp.lang.ada,comp.lang.c,comp.lang.c++ Date: 1997-11-04T00:00:00+00:00 List-Id: Kaz Kylheku wrote in article <63mcmm$r3s$1@helios.crest.nt.com>... > In article <345E3ACD.A15@gsg.eds.com>, > Shmuel (Seymour J.) Metz wrote: > >Craig Franck wrote: > > > >> What is it about Ada that makes it portable? > > > >How about the ability to define variables by their range instead of > >using implimentation-dependent terms like long and short? That's > >certainly the most glaring deficiency in C with regard to portability. > > That depends on how you look at it. I'd say that it requires a little > more thought and skill to write portably with types that have sizes > that are not fully specified, but it's not impossible. > > C gives you a header, , which gives you the constants LONG_MIN > and LONG_MAX. These tell you what the implementation's least and > greatest values of type long are. These values are guaranteed to be > at least -2^31+1 and 2^31-1 respectively. > > If you assume that the long type has a range that is no larger than this, > you are OK. If you write your code under the assumption that the > range is LONG_MIN to LONG_MAX, you are also OK. That's missing the point. By having application-specific ranges for integers and accuracy for floating point types, an Ada programmer finds out *at compile time* that their new target cannot handle the program they are porting. Sure, we can all play with assuming what the portable ranges are, but compile-time checking finds them earlier and thereby cheaper, than hopefully having users detecting a bug. In Ada, we know predefined Integer is at least 16 bits, but best approach is to avoid it when possible, since the more portable alternative is available. In all honesty, I think the reason this point is missed by so many is that some languages cannot express ranges, so the concept of portability is differing. Another side of the issue is what can be done with the information that the compile-time info provides. For languages like C++ which can at least check ranges by overloading indexing and checking the range of the specified parameter, (and throwing an exception if violated), can the compiler optimize away the check in the static (compile-time-known) cases? Languages which know at compile time what the ranges can be and can do the flow analysis can remove unnecessary checks. (Ada is such a language.)