comp.lang.ada
 help / color / mirror / Atom feed
From: Georg Bauhaus <rm.dash-bauhaus@futureapps.de>
Subject: Re: why Ada type casting is different from other languages? newType(value) vs. (newType)value
Date: Sun, 13 Jul 2014 12:24:24 +0200
Date: 2014-07-13T12:24:24+02:00	[thread overview]
Message-ID: <53c25e58$0$6665$9b4e6d93@newsspool3.arcor-online.net> (raw)
In-Reply-To: <1cqb2iccfzox2$.f74qor2zqcub.dlg@40tude.net>

On 13.07.14 11:08, Dmitry A. Kazakov wrote:
> On Sun, 13 Jul 2014 12:01:26 +0300, Niklas Holsti wrote:
>
>> Ranting aside, the C form has the clear disadvantage that one must
>> remember precedence rules to understand what is being converted:
>>
>>    is (float)i the same as (float)i + j,
>>    or is it the same as (float)(i + j) ?
>>
>> In the Ada form, type(value), the parentheses nicely enclose the value
>> to be converted. Much better IMO.
>
> BTW, in Ada one need not remember precedence rules because all expressions
> where unary operation might be ambiguous are illegal:
>
>     not X and Y -- Illegal, brackets required
>     X and not Y -- That's OK


The bit about ambiguity is not meant to be a statement of a general truth?
Before the fact, is the following text unambiguous for a human reader?

    X : constant := 16#7F_FF#;

begin

    if not X in Unsigned_16'Range then  -- legal, brackets suggested
       raise Program_Error;
    end if;

(Yes, there are better ways to write this, but since you must know
them, the latter requirement wipes out some of the alleged advantage of Ada
in this regard, I think.)

I have read plausible justifications for the choice of type conversion syntax
of both Ada and C. But conceptually, I think that C++ has found a better
solution. It is more Ada like, perhaps, whenever C++ suggests to explicitly
state the intent:

    static_cast<float>(i + j)

seems pretty clear (even when it might be unnecessary). Ada's and C's
overloading of round brackets for several different things might be
tempting at first, but the temptation ceases once ease of understanding
the differences is considered more important. Of course, that's the time
when the phrase "every competent programmer ..." will be heard from all
camps, and then the ones about < and > !



  parent reply	other threads:[~2014-07-13 10:24 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-13  1:55 why Ada type casting is different from other languages? newType(value) vs. (newType)value Nasser M. Abbasi
2014-07-13  3:01 ` Shark8
2014-07-13  6:26 ` Jeffrey Carter
2014-07-13 14:33   ` Dan'l Miller
2014-07-13  9:01 ` Niklas Holsti
2014-07-13  9:08   ` Dmitry A. Kazakov
2014-07-13 10:20     ` AdaMagica
2014-07-13 10:24     ` Georg Bauhaus [this message]
2014-07-14 23:36       ` Randy Brukardt
2014-07-15 18:42         ` G.B.
2014-07-15 19:14           ` Niklas Holsti
2014-07-15 22:47             ` Georg Bauhaus
2014-07-15 19:19           ` Jeffrey Carter
2014-07-15 23:07             ` Georg Bauhaus
2014-07-15 22:00           ` Randy Brukardt
2014-07-13 14:42 ` Dan'l Miller
2014-07-14 15:25 ` Adam Beneschan
2014-07-14 16:24   ` G.B.
2014-07-14 17:41     ` Simon Wright
2014-07-14 19:41     ` Simon Clubley
2014-07-14 20:51       ` Dan'l Miller
2014-07-14 23:23       ` Randy Brukardt
2014-07-15 19:22 ` Marius Amado-Alves
replies disabled

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