comp.lang.ada
 help / color / mirror / Atom feed
From: "Stuart" <stuart@0.0>
Subject: Re: Ranges and (non)static constraints
Date: Mon, 20 Nov 2006 14:08:14 -0000
Date: 2006-11-20T14:08:14+00:00	[thread overview]
Message-ID: <4561b3d2$1_1@glkas0286.greenlnk.net> (raw)
In-Reply-To: pu08fww26xs9$.jctxs7a23inh.dlg@40tude.net

"Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
 news:pu08fww26xs9$.jctxs7a23inh.dlg@40tude.net...

> On Fri, 17 Nov 2006 13:30:34 -0000, Stuart wrote:
>
>> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
>> news:1msd2xaahtsgv.f8io255x4f0n$.dlg@40tude.net...
>>
>>> These are sufficiently different. Consider this example:
>>>
>>>   N : constant := 2**64; -- Legal in GNAT
>>>   type T is range 1..N;  -- Illegal in GNAT
>>>
>>> (This is not a bug)
>>>
>>> I would at least require the second be legal when the first is.
>>
>> Why?  The first is a named value declaration (rather than a constant 
>> object
>> declaration).  In the type declaration I think the semantics of Ada 
>> require
>> that the base type be a signed type, which thus introduces issues of
>> symmetry around zero.
>
> So? Let it allocate two 64-bit words! It is not my business, Ada is a
> higher-level language.

There is nothing in Ada that stops this, however compiler's typically draw a 
line somewhere.

Ada is a higher-level language - but it also acknowledges the practicalities 
of compiler design, efficient implementation and the 'broad spectrum' of 
what users may want to achieve.  Compiler writers set out their product for 
the market place they want.  There is nothing in Ada that prevents what you 
seem to be wanting - but compiler writers don't seem to be operating in that 
area.  Adopting a 'no compromise' approach they might say - "It's not my 
business, choose a compiler that does support it".

>> Unfortunately I am in a bit of a rush at the moment so I don't have a 
>> chance
>> to test an idea like:
>>    type T is mod N range 1..N-1;

> You mean:
>   type T is mod N;
>   subtype S is T range 1..N;

Well, almost
    subtype S is T range 1..N-1;

(my apologies - in my haste to go home I repeated the semantics which have 
already been shown to be inappropriate for various reasons).

> No, that won't work.

Because N is not a value in the modular type, or for some other reason?

Earlier I had noted:

> Surely there is System.Max_Int!
>    [ARM 13.7 (23)] The largest (most positive) value allowed for the
>   expression of a signed_integer_type_definition.
>
>  So you would have:
>    type Biggest_T is range 1..System.Max_Int;
>    subtype T is Biggest_T range 1..N;

There is also System.Max_Binary_Modulus, which (on the system I have checked 
with) is larger than System.Max_Int (2**32 vs 2**31 - 1).  But that then 
starts getting into other areas where Ada is treading a fine line between 
language concepts and practical implementations (note 
System.Max_Nonbinary_Modulus).

[So upon reflection the whole 'mod' thing is possibly a bad idea unless you 
consider the likely practical implementation issues - which DK seems to be 
trying to avoid].

However, from my point of view, Ada seems to be giving me - through these 
constants - the means to write practical routines, without 'undue' 
artificial constraints.  I can even set minimum levels of support by doing 
something like:

    type Biggest_T is range 1..System.Max_Int;
    subtype Minimum is Biggest_T range 1..10_000;
    subtype T is Biggest_T range 1..N;

I accept that at the very fringes I might need to play carefully with 
Max_Int and Max_Binary_Modulus, but then I consider that playing close to 
the edge is always fraught with danger - so I accept the risks with 
portability.

-- 
Stuart 





  parent reply	other threads:[~2006-11-20 14:08 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-11-16 11:02 Ranges and (non)static constraints Maciej Sobczak
2006-11-16 12:23 ` Martin Krischik
2006-11-16 13:23   ` Maciej Sobczak
2006-11-16 19:01     ` Jeffrey R. Carter
2006-11-18  0:02   ` Robert A Duff
2006-11-16 13:13 ` Dmitry A. Kazakov
2006-11-16 17:18   ` Jean-Pierre Rosen
2006-11-17  9:08     ` Dmitry A. Kazakov
2006-11-17 10:30       ` Stuart
2006-11-17 10:37       ` Jean-Pierre Rosen
2006-11-17 14:57         ` Dmitry A. Kazakov
2006-11-17 16:04           ` Jean-Pierre Rosen
2006-11-18  9:51             ` Dmitry A. Kazakov
2006-11-18 14:17             ` Stephen Leake
2006-11-17 20:05           ` Jeffrey R. Carter
2006-11-17 23:58             ` Robert A Duff
2006-11-18  9:47               ` Dmitry A. Kazakov
2006-11-19  2:27               ` Jeffrey R. Carter
2006-11-19 12:13                 ` Björn Persson
2006-11-19 22:51                 ` Robert A Duff
2006-11-20  3:51                   ` Jeffrey R. Carter
2006-11-21 21:02                     ` Robert A Duff
2006-11-20 17:35                   ` Adam Beneschan
2006-11-17 15:45         ` Maciej Sobczak
2006-11-17 16:45           ` Jean-Pierre Rosen
2006-11-17 10:39       ` AW: " Grein, Christoph (Fa. ESG)
2006-11-17 11:20         ` Dmitry A. Kazakov
2006-11-17 13:30           ` Stuart
2006-11-17 15:07             ` Dmitry A. Kazakov
2006-11-17 16:47               ` Jean-Pierre Rosen
2006-11-20 14:08               ` Stuart [this message]
2006-11-20 14:12                 ` Stuart
2006-11-20 15:48                   ` Dmitry A. Kazakov
2006-11-16 18:56   ` Jeffrey R. Carter
2006-11-16 20:00 ` Adam Beneschan
replies disabled

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