comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Ranges and (non)static constraints
Date: Fri, 17 Nov 2006 18:58:00 -0500
Date: 2006-11-17T18:58:00-05:00	[thread overview]
Message-ID: <wccpsbld3sn.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: wCo7h.283942$1i1.122160@attbi_s72

"Jeffrey R. Carter" <spam.not.jrcarter@acm.not.spam.org> writes:

> Dmitry A. Kazakov wrote:
>> Actually it is not the machine which cannot, but the compiler. Why
>> should I
>> care if an integer would fit a machine word?
>
> I agree. GNAT has gone a little ways in this direction, providing 64-bit
> integers on 32-bit machines. If I ever get around to defining NINA, it
> will accept any range for integer types. Of course, if you make them too
> big, objects of the type may raise Memory_Exhausted. There would be ways
> to create integer types that correspond to those supported by the HW,
> where that's important.

What's NINA?

I think you're on the right track, here.  The goal should be (1) the
program can use arbitrarily large integers (up to the memory limit), as
in Lisp et al, and (2) if you don't need that, you don't pay any
efficiency cost (no distributed overhead).  I don't know of any language
that achieves both.

If I say:

    type T is range 1..1_000_000;
    X : constant T := ...;
    Y : constant T := ...;
    Z : constant T := (X + Y) / 2;

it is implementation dependent whether or not the calculation of Z
overflows.  That's bad.  (But no implementations overflow in that case,
so nobody cares, and people write such things all the time.)

If I say:

    type T is range 1..1_000_000_000_000;

some implementations fail at compile time, and some do not.  That's bad,
too.  I ought to be allowed to say, portably:

    type T is range 1..10**100;

>... And there'd be type Unbounded_Integer, providing
> use of the unbounded-integer library used by the compiler.

Well, I'll quibble with your names, here.  When God created the
integers, He didn't say they stop at 2**31-1 or 2**64 or whatever!
The term "integer" (or the abbreviation "int") ought to mean the true
unbounded integers.  Names like Unbounded_Integer and _universal_integer
are an abomination.  ;-)

- Bob



  reply	other threads:[~2006-11-17 23:58 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 [this message]
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
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