comp.lang.ada
 help / color / mirror / Atom feed
From: Maciej Sobczak <see.my.homepage@gmail.com>
Subject: Re: Reconsidering assignment
Date: Mon, 11 Jun 2007 14:12:09 -0700
Date: 2007-06-11T14:12:09-07:00	[thread overview]
Message-ID: <1181596329.198235.320830@w5g2000hsg.googlegroups.com> (raw)
In-Reply-To: <f4k5s1$9rr$1@jacob-sparre.dk>

On 11 Cze, 20:57, "Randy Brukardt" <r...@rrsoftware.com> wrote:

> > >    X : Integer := 1 + 1;

> > It's a compile-time expression with the value 2.
> > Not very complex. ;-)
>
> Sorry, Dmitry is right; you seem to have missed his point. In order for this
> to be "a compile-time expression", you need complex preference rules in your
> type system. (That is, that "compile-time expressions" are preferred over
> types that would cause some other kind of expression.)

Hm... indeed, that must be the case - there must be some logic to
allow the compiler to actually figure out that it is a compile-time
expression. Granted, such a logic might be a good candidate for the
optimizer (who wants function calls where the result can be immedately
available), but at the same time this is easiest to do when the type
system itself is very minimal.

I think there is time for some conclusions.
The major points I've learned in these discussions:

- Constraint_Error cannot be easily excluded with the use of legality
rules that are applied only locally. What I mean here is the rules
that can be checked only based on the static properties of names that
the compiler encounters in each expression (a type system, basically),
without information flow analysis and such.
- Unconstrained types in Ada can be used to "parameterize" whole
subprograms, even though these subprograms don't need to be proper
generics. Interestingly, no "implicit instantiation" is needed here
neither.

Thanks to all contributors and to Dmitry in particular.


Still (heck, that doesn't seem to be the end of discussion :-) ), the
earlier idea of expressing restrictions for subprogram parameters
looks interesting to me. The point is that subprogram overloading
operates on each parameter in isolation, whereas such restrictions
could add the possibility of selecting more convoluted subsets of the
whole relation. This is similar to treating the whole set of
parameters as a single record type and then constraining this single
record type for the purpose of overloading.
If the restriction is based on run-time properties of parameters, then
it doesn't provide anything that cannot be achieved with explicit if/
else at the beginning of the subprogram.
Consider:

procedure P(X, Y : Real) with X*X + Y*Y <= 1;
procedure P(X, Y : Real);

The idea was to have some assistance from the language for the proper
selection of overloaded P (one is for arguments that fall withing the
unit circle, and the other is for the rest). Here it doesn't give
anything fundamentally new, this can be achieved with if/else in a
single procedure.
On the other hand, restrictions for compile-time properties might be
more useful and can be for example an interesting optimization tool.
In C++ such effects are achieved with so called type traits and
(partial) template specializations. I wouldn't mind having this in
Ada.

--
Maciej Sobczak
http://www.msobczak.com/




  reply	other threads:[~2007-06-11 21:12 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-06 21:33 Reconsidering assignment Maciej Sobczak
2007-06-06 22:52 ` Ray Blaak
2007-06-07  7:15   ` Maciej Sobczak
2007-06-07 16:34     ` Ray Blaak
2007-06-07  7:10 ` Stefan Lucks
2007-06-07  7:32   ` Maciej Sobczak
2007-06-07 11:11     ` Stefan Lucks
2007-06-07 16:28   ` Ray Blaak
2007-06-07  9:27 ` Dmitry A. Kazakov
2007-06-07 16:54   ` contracted exceptions (was Re: Reconsidering assignment) Ray Blaak
2007-06-07 20:04     ` contracted exceptions Robert A Duff
2007-06-07 21:11       ` Ray Blaak
2007-06-07 23:44         ` Robert A Duff
2007-06-08  2:19       ` Randy Brukardt
2007-06-08  7:39         ` Dmitry A. Kazakov
2007-06-08  8:53           ` Ray Blaak
2007-06-08 12:08             ` Dmitry A. Kazakov
2007-06-08 17:31               ` Ray Blaak
2007-06-08 18:00                 ` Dmitry A. Kazakov
2007-06-08 18:20                   ` Georg Bauhaus
2007-06-08 18:56                     ` Dmitry A. Kazakov
2007-06-08 19:15                   ` Simon Wright
2007-06-09  0:14                     ` Randy Brukardt
2007-06-09  2:44                       ` Larry Kilgallen
2007-06-09  8:21                     ` Dmitry A. Kazakov
2007-06-09 12:32                       ` Simon Wright
2007-06-09 18:38                         ` Dmitry A. Kazakov
2007-06-09 21:04                           ` Simon Wright
2007-06-10  9:21                             ` Dmitry A. Kazakov
2007-06-10 11:49                               ` Simon Wright
2007-06-10 15:20                                 ` Dmitry A. Kazakov
2007-06-11  4:13                                   ` Ray Blaak
2007-06-11  7:58                                     ` Dmitry A. Kazakov
2007-06-11 17:06                                       ` Ray Blaak
2007-06-11 19:57                                         ` Dmitry A. Kazakov
2007-06-10 18:14                                 ` Georg Bauhaus
2007-06-10 18:12                               ` Georg Bauhaus
2007-06-11  7:55                                 ` Dmitry A. Kazakov
2007-06-11 14:15                         ` Bob Spooner
2007-06-11 15:14                           ` Georg Bauhaus
2007-06-11 15:20                             ` (see below)
2007-06-11 16:39                               ` Georg Bauhaus
2007-06-11 19:50                           ` Simon Wright
2007-06-08 11:26         ` Martin Krischik
2007-06-08 12:02         ` Robert A Duff
2007-06-08 11:22     ` contracted exceptions (was Re: Reconsidering assignment) Martin Krischik
2007-06-08 17:44       ` Ray Blaak
2007-06-08 12:10     ` contracted exceptions Robert A Duff
2007-06-08 15:56       ` Stefan Lucks
2007-06-08 20:27         ` Pascal Obry
2007-06-09  0:19           ` Randy Brukardt
2007-06-09 18:04             ` Robert A Duff
2007-06-09 18:37               ` Dmitry A. Kazakov
2007-06-09 20:43                 ` Robert A Duff
2007-06-10  9:21                   ` Dmitry A. Kazakov
2007-06-11 19:18                   ` Randy Brukardt
2007-06-12  6:55                     ` Jean-Pierre Rosen
2007-06-08 17:40       ` Ray Blaak
2007-06-09 18:14         ` Robert A Duff
2007-06-08 19:18       ` Simon Wright
2007-06-09 22:37   ` Reconsidering assignment Maciej Sobczak
2007-06-10  9:21     ` Dmitry A. Kazakov
2007-06-11  9:04       ` Maciej Sobczak
2007-06-11 13:09         ` Dmitry A. Kazakov
2007-06-11 18:57     ` Randy Brukardt
2007-06-11 21:12       ` Maciej Sobczak [this message]
2007-06-12  8:31         ` Dmitry A. Kazakov
2007-06-12  9:31           ` Georg Bauhaus
2007-06-12 10:03             ` Dmitry A. Kazakov
replies disabled

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