comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Ada2012 Invariants and obaque types
Date: Tue, 21 Jun 2011 22:52:22 +0200
Date: 2011-06-21T22:52:22+02:00	[thread overview]
Message-ID: <h0xxgcuu0jt$.1egpe6nxhiili.dlg@40tude.net> (raw)
In-Reply-To: op.vxfxztmglzeukk@jellix.jlfencey.com

On Tue, 21 Jun 2011 21:34:31 +0200, Vinzent Hoefler wrote:

> Dmitry A. Kazakov wrote:
> 
>> 'Valid is a hack around missing value initialization enforcement or some
>> kludges to support Unchecked_Conversion. It cannot justify anything because
>> 'Valid itself lacks credibility.
> 
> How do you properly initialise and/or validate values coming from an untrusted
> external source (i.e. "bus")? Always using the full bit pattern and write the
> conversion routine yourself?

Yes, I always do exactly this, at least in order to make my program
portable. E.g. instead of querying the endianness of the machine and trying
to guess what kind of bit shuffling might be appropriate in order to map an
external representation onto the machine one through Unchecked_Conversion
(provided such mapping exists, which in real life could not be the case
when working with bus encodings), I just interpret bits as they are
described. It is safer, cleaner, easier to understand, requires no
preprocessing. If this could be slightly less efficient, I don't care.

BTW, what I do miss for this stuff is cross type checks. E.g.

   X : Integer := ...;

   if X in Unsigned_32'Range then

The problem is that both

   if X in Integer (Unsigned_32'First)..Integer (Unsigned_32'Last) then

or

   if Unsigned_32 (X) in Unsigned_32'Range then

might fail on different machines. I need a test if the value of the type T
can be converted to the type S. (For real types it can be a quite
non-trivial to test)

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



  reply	other threads:[~2011-06-21 20:52 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-21  8:53 Ada2012 Invariants and obaque types Martin
2011-06-21 10:27 ` Yannick Duchêne (Hibou57)
2011-06-21 10:36   ` Martin
2011-06-21 10:46   ` Martin
2011-06-21 18:42     ` Yannick Duchêne (Hibou57)
2011-06-21 10:43 ` Ludovic Brenta
2011-06-21 10:53   ` Martin
2011-06-21 11:14 ` Martin
2011-06-21 11:31 ` Robert A Duff
2011-06-21 11:48   ` Martin
2011-06-21 12:01   ` Martin
2011-06-21 12:13     ` Robert A Duff
2011-06-21 12:22       ` Martin
2011-06-21 12:54         ` Robert A Duff
2011-06-21 13:00           ` Martin
2011-06-21 12:08 ` Dmitry A. Kazakov
2011-06-21 12:17   ` Georg Bauhaus
2011-06-21 12:31     ` Dmitry A. Kazakov
2011-06-21 13:29       ` Georg Bauhaus
2011-06-21 14:42         ` Dmitry A. Kazakov
2011-06-21 18:37   ` Yannick Duchêne (Hibou57)
2011-06-21 18:53     ` Dmitry A. Kazakov
2011-06-21 19:34       ` Vinzent Hoefler
2011-06-21 20:52         ` Dmitry A. Kazakov [this message]
2011-06-21 21:50           ` Vinzent Hoefler
2011-06-22  7:55             ` Dmitry A. Kazakov
2011-06-21 21:18       ` Manuel Collado
2011-06-22  8:00         ` Dmitry A. Kazakov
2011-06-22 10:39 ` Egil Høvik
2011-06-22 13:57   ` Martin
2011-06-23 16:21 ` anon
replies disabled

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