comp.lang.ada
 help / color / mirror / Atom feed
From: Keith Thompson <kst-u@mib.org>
Subject: Re: where exactly c++,c fail and Ada gets thru'
Date: Thu, 27 Apr 2006 21:19:23 GMT
Date: 2006-04-27T21:19:23+00:00	[thread overview]
Message-ID: <lnk69apvhh.fsf@nuthaus.mib.org> (raw)
In-Reply-To: e2q55k$erp$1@sunnews.cern.ch

Maciej Sobczak <no.spam@no.spam.com> writes:
> Martin Krischik wrote:
>> Now say we have a suitable C++ range template:
>> typedef range<int, 1, 10> Y_Type;
>> typedef range<Y_Type, 1, 5> X_Type;
>> Y_Type F (X_Type X)
>>   {
>>   return X + 3;
>>   }
>> Y_Type G (X_Type X)
>>   {
>>   return X + 7;
>>   }
>> Now anyone up to the challenge to define:
>> template <typename Base_Type, Base_Type First, Base_Type Last>
>> range::operator = (Base_Type right)
>> template <typename Base_Type, Base_Type First, Base_Type Last>
>> range::operator + (Base_Type right)
>> template <typename Base_Type, Base_Type First, Base_Type Last>
>> range::range (Base_Type right)
>> in such a way that it works like Ada - inclusive the *realistic*
>> change that
>> the compiler will optimize away the range check in F ().
>
> The C++ standard does not define to what extent the compilers are
> allowed to optimize the resulting code.

Actually, I think it does; it just doesn't define to what extent
compilers are *required* to optimize.  (In C, allowed optimizations
are determined by what's loosely called the "as-if rule"; C++ is
probably similar.)

>                                         This is the quality of
> implementation issue and an area of competition between compiler
> vendors. Without any further checks I can claim that it is possible
> for the compiler to optimize it the way you want.
>
> And without any further checks I take the risk to claim that the Ada
> standard does not require any conforming compiler to optimize range
> checks away as you described (or please throw some references) -
> similarly, this is the QoI issue.
>
> So - what was your point?

Probably the point was that range checks are an intrinsic feature of
Ada, and any decent Ada compiler will optimize them as much as
practical.  In C++, on the other hand, any range checks would have to
be done as explicit user code, and a typical C++ compiler might be
less likely to recognize an idiom that it can optimize.

A sufficiently clever C++ compiler should be able, in most cases, to
optimize as well as a sufficiently clever Ada compiler (though I
suspect Ada's aliasing rules allow for better optimizations in some
cases).  I have no idea whether current C++ compilers are
"sufficiently clever".

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
San Diego Supercomputer Center             <*>  <http://users.sdsc.edu/~kst>
We must do something.  This is something.  Therefore, we must do this.



  reply	other threads:[~2006-04-27 21:19 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-24  4:19 where exactly c++,c fail and Ada gets thru' Ananth the Boss
2006-04-24  5:05 ` jimmaureenrogers
2006-04-24  7:45   ` Ananth the Boss
2006-04-24 19:17   ` Martin Krischik
2006-04-24 20:23   ` Simon Wright
2006-04-24 22:34     ` Keith Thompson
2006-04-24 22:33   ` Keith Thompson
2006-04-25  5:23     ` Jeffrey R. Carter
2006-04-26 17:48     ` Martin Krischik
2006-04-26 19:33       ` Keith Thompson
2006-04-26 15:10   ` Maciej Sobczak
2006-04-26 17:32     ` Martin Krischik
2006-04-27 10:07       ` Maciej Sobczak
2006-04-27 21:19         ` Keith Thompson [this message]
2006-04-28  7:00         ` Martin Krischik
2006-04-28 12:27           ` Maciej Sobczak
2006-04-29  7:03             ` Martin Krischik
2006-04-29 14:08               ` REH
2006-05-01 10:20                 ` Xcriber51
2006-05-01 13:55                   ` REH
2006-05-02  6:43               ` Maciej Sobczak
2006-04-27 16:48       ` REH
2006-04-28  7:49         ` Martin Krischik
2006-04-28 11:17           ` REH
2006-04-29  6:47             ` Martin Krischik
2006-04-24  8:13 ` Rod Chapman
2006-04-25  1:57 ` Steve
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox