comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Does Ada support endiannes?
Date: Mon, 12 Dec 2011 19:33:05 +0100
Date: 2011-12-12T19:33:05+01:00	[thread overview]
Message-ID: <1c2ax12bptm2g.gifwv5vndpxe$.dlg@40tude.net> (raw)
In-Reply-To: 1kc5n51.ffg0umddufyfN%csampson@inetworld.net

On Mon, 12 Dec 2011 09:07:24 -0800, Charles H. Sampson wrote:

> Dmitry A. Kazakov <mailbox@dmitry-kazakov.de> wrote:
> 
>> On Mon, 12 Dec 2011 04:46:22 -0800 (PST), Gerd wrote:
>> 
>>> On 12 Dez., 12:27, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
>>> wrote:
>>> 
>>> Any suggestion on how to convert, others than using "/" and "mod"?
>> 
>> Why not to use them? It would be a bad idea trying to avoid them.
>> 
>> It won't give you much performance, because memory mapping would require
>> unpacking, alignment, checksum evaluation, stuff which would turn into
>> extra copying. So why not just:
>> 
>>    type Octet is new Unsigned_8;
>>    type Word is new Unsigned_16;
>>    type Octet_Array is array (Positive range <>) of Octet;
>> 
>>    procedure Get_Little_Endian (Data : Octet_Array; Index : in out Integer;
>>       Value : out Word) is -- No extra copying
>>    begin
>>       Value := Word (Data (Index)) + Word (Data (Index + 1)) * 256;
>>       Index := Index + 2;
>>    end Get_Little_Endian;
>> 
>> ...
> 
>      Don't you think this approach obscures what's going on, Dmitry,
> thereby negating one of the design goals of Ada?

No. The Ada's design goal was to allow the programmer to describe the
semantics the data types involved and to program in that terms.
Representation clauses rather defeat that idea than support it. The number
read from the wire must look and feel as a number rather than some messy
record, which cannot be a numeric parameter of a generic, has no 'Image, no
meaningful literals etc...

> Sure, most of us who
> have bit-twiddled in the bad old days can figure out what's going on, or
> at least convince ourselves that we've figured out what's going on, but
> I much prefer the clarity of something like
> 
>    type Single_Precision is -- old IBM single-precision
>       record
>          Negative : Boolean;
>          Characteristic : Seven_Bit_Integer;
>          Mantissa : Twenty_Four_Bit_Fixed_Point;
>       end record;
> 
>    A_Variable : Single_Precision;

And defining all arithmetic on it? Elementary functions including? I don't
remember the IBM layout, but are you sure that you have got the order of
fields right? What about the literals?

No, I would never do it this way. In a comparable case:

   http://www.dmitry-kazakov.de/ada/components.htm#IEEE_754

I read IEEE 754 representations into the native floating point rather than
messing up with representation clauses, even if the machine is natively
IEEE 754. I just don't care.

Granted, defining IEEE 754 as a record (Unchecked_Union?), denormalized
numbers, NaN, +/-Inf, hidden mantissa bit, must be a HUGE fun! 

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2011-12-12 18:33 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-12  8:57 Does Ada support endiannes? Gerd
2011-12-12  9:23 ` Niklas Holsti
2011-12-12 11:27 ` Dmitry A. Kazakov
2011-12-12 12:44   ` Gerd
2011-12-12 19:23     ` Jeffrey Carter
2011-12-13 14:25       ` Gerd
2011-12-13 14:19     ` Gautier write-only
2011-12-14 16:16       ` Gerd
2011-12-14 18:16         ` Dmitry A. Kazakov
2011-12-14 20:16         ` Gautier write-only
2011-12-15 11:27           ` Gerd
2011-12-15 13:01             ` Simon Wright
2011-12-15 13:37             ` Dmitry A. Kazakov
2011-12-15 20:12             ` Jeffrey Carter
2011-12-12 12:46   ` Gerd
2011-12-12 13:22     ` Dmitry A. Kazakov
2011-12-12 17:07       ` Charles H. Sampson
2011-12-12 18:33         ` Dmitry A. Kazakov [this message]
2011-12-14  5:19           ` Charles H. Sampson
2011-12-14  8:56             ` Dmitry A. Kazakov
2011-12-14  9:46               ` Simon Wright
2011-12-15  9:14               ` Charles H. Sampson
2011-12-15  9:46                 ` Dmitry A. Kazakov
2011-12-25 21:42                   ` Charles H. Sampson
2011-12-26 10:47                     ` Dmitry A. Kazakov
2011-12-27 10:38                       ` Georg Bauhaus
2011-12-27 12:35                         ` Dmitry A. Kazakov
2012-01-04  4:33                       ` Charles H. Sampson
2012-01-04 11:56                         ` Dmitry A. Kazakov
2011-12-12 13:33     ` Robert A Duff
replies disabled

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