comp.lang.ada
 help / color / mirror / Atom feed
From: Adam Beneschan <adam@irvine.com>
Subject: Re: Hiding the value of Constants
Date: Tue, 7 Jul 2009 08:51:35 -0700 (PDT)
Date: 2009-07-07T08:51:35-07:00	[thread overview]
Message-ID: <0549aae1-d200-4c81-aa92-8d18df6cf0d4@b25g2000prb.googlegroups.com> (raw)
In-Reply-To: 5b49f256-f779-4030-a50d-5f31fd08ddff@26g2000yqk.googlegroups.com

On Jul 7, 3:41 am, Hibou57 (Yannick Duchêne)
<yannick_duch...@yahoo.fr> wrote:

> As some one are talking about Funny_Types, here is a funny thing
> (thinking about it when I saw this solution) : Ada defines enumeration
> contants as parameterless functions (just like you propose for these
> constants).
>
> RM 2005 3.5.1 says:
>
> > 6 {enumeration literal} Each enumeration_literal_specification is the
> > explicit declaration of the corresponding enumeration literal: it
> > declares a parameterless function, whose defining name is the
> > defining_identifier or defining_character_literal, and whose result
> > type is the enumeration type.
>
> But this is with some restrictions (ex. one may not get the adress of
> such a function)
>
> This has some conscequences on the name resolution of an enumeration
> literal reference vs of a constant reference. Sometimes I wish both
> will be one day handled the same (enumeration literals and constants

I believe the reason enumeration literals are actually functions is so
that you can use the same enumeration literal in more than one
enumeration type and not have to worry about name conflicts.  The
overloading rules will allow the compiler to figure out which one is
meant.  There are additional bonuses, such as being able to use an
enumeration literal as the actual for a generic instantiation that
expects a function.  How useful that is in practice, I don't know.

I'm not sure why you would want enumeration literals to be treated
like constants, though.  I don't know of any advantage to making them
officially "constants"; that is, I can't think of any language rule
off the top of my head where a constant would be allowed but a static
function such as an enumeration literal couldn't.  In effect, I
believe you can use them anywhere a constant could be used, and in
some places where constants can't.  If you mean that you'd like
constants to be treated like static functions, so that you can
overload them:

    Max : constant Integer := 15;
    Max : constant Float := 15.0;

that's an intriguing idea.  Not intriguing enough for me to have to
make all the necessary changes to our compiler, but intriguing
nonetheless....

                                -- Adam





  reply	other threads:[~2009-07-07 15:51 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-07  8:48 Hiding the value of Constants Rick
2009-07-07  8:54 ` xavier grave
2009-07-07  8:58   ` AdaMagica
2009-07-07  9:41 ` Georg Bauhaus
2009-07-07 10:41   ` Hibou57 (Yannick Duchêne)
2009-07-07 15:51     ` Adam Beneschan [this message]
2009-07-07 16:26       ` Hibou57 (Yannick Duchêne)
2009-07-07 18:48       ` Dmitry A. Kazakov
2009-07-07 19:05         ` Adam Beneschan
2009-07-07 19:53           ` Dmitry A. Kazakov
2009-07-07 20:28             ` Adam Beneschan
2009-07-07 20:57               ` Dmitry A. Kazakov
2009-07-08 10:25                 ` Georg Bauhaus
2009-07-08 12:20                   ` Dmitry A. Kazakov
2009-07-09 23:04 ` anon
2009-07-10  6:37   ` AdaMagica
2009-07-11 19:06     ` anon
2009-07-11 19:26       ` Georg Bauhaus
2009-07-11 21:53         ` anon
2009-07-11 22:03           ` Albrecht Käfer
2009-07-11 22:15           ` Ed Falis
2009-07-15  9:30             ` anon
2009-07-11 23:31           ` Egil
replies disabled

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