comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Why can't objects be static in Ada?
Date: Thu, 11 Apr 2019 17:49:06 -0500
Date: 2019-04-11T17:49:06-05:00	[thread overview]
Message-ID: <q8og92$1u7$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: b411a770-5e86-4d5e-9e43-e52843be724d@googlegroups.com

"Lucretia" <laguest9000@googlemail.com> wrote in message 
news:b411a770-5e86-4d5e-9e43-e52843be724d@googlegroups.com...
> Someone sent in a pull request to my bindings and had to change a few
>constants to functions because objects can't be static.

This is nonsense:

     Max : constant Integer := 10;

is an object, and it's static.

>For an example:
>
>   type Sizes is
>      record
>         Width  : Dimension;
>         Height : Dimension;
>      end record with
>     Convention => C;

This is a composite type. Only numeric types and strings (and the latter is 
a hack) can be static.

>   Zero_Size : constant Sizes := (others => Natural_Dimension'First);
>
> Why can't Zero_Size be compiled as static in this pre-elaborated package?

Because composite types are never static. A compiler that treated it as 
"static" would be wrong. OTOH, that doesn't prevent a compiler from 
evaluating it at compile-time.

And the categorization pragmas are an area where the original scheme was a 
failure. The idea that the properties of every operation of a type can all 
have the same restrictions is maddening. Hopefully, the Global aspect will 
fix this. There's no good reason (outside of Annex E issues) for declaring 
any package preelaborated, unless you like fighting errors a lot. C.4 is a 
load of hooey, it's not actually implementable on the margins, and there's 
no reason for any compiler to generate more code than necessary. Ergo, 
you'll most likely get the same code whether or not you declare something 
Preelaborated, so why bother with all of the hassles?

> This seems to be a major flaw in Ada imo.

"Preelaborated packages" are a minor flaw of Ada, but you never have to use 
them. And if you don't, the rest of it is irrelevant. So I see no "major 
flaw".

That said, I would have preferred allowing the declaration of user-defined 
static types, because it is annoying to write representation clauses as it 
stands. (Since X'Size is only static for numeric types, it's nearly useless 
in representation aspects. Which makes them more complex than necessary. But 
at worst, that is an annoyance.) It was deemed too complicated for too 
little benefit this time around. Feel free to bring it up again if you still 
care and don't mind waiting another 5+ years.

                                            Randy.





  parent reply	other threads:[~2019-04-11 22:49 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-11 12:40 Why can't objects be static in Ada? Lucretia
2019-04-11 12:56 ` Mark Lorenzen
2019-04-11 13:31   ` Lucretia
2019-04-11 22:49 ` Randy Brukardt [this message]
2019-04-12  1:56   ` Lucretia
2019-04-12  7:33     ` Dmitry A. Kazakov
2019-04-12 22:38     ` Randy Brukardt
2019-04-13  9:14       ` Lucretia
2019-04-12  6:59   ` Mark Lorenzen
2019-04-12  8:12     ` Simon Wright
2019-04-12 22:02     ` Randy Brukardt
2019-04-13 13:07 ` Jere
2019-04-13 13:48   ` Lucretia
2019-04-15 17:46     ` G. B.
2019-04-14  3:47 ` Keith Thompson
2019-04-16  0:08 ` sbelmont700
2019-04-16  1:40   ` Randy Brukardt
2019-04-16 12:11     ` Mark Lorenzen
2019-04-16 16:19       ` Simon Wright
2019-04-16 20:56       ` Lucretia
2019-04-16 21:07         ` Niklas Holsti
2019-04-16 21:16           ` Lucretia
2019-04-16 21:40             ` Niklas Holsti
2019-04-16 23:26             ` Randy Brukardt
2019-04-23 14:30           ` Mark Lorenzen
2019-04-16 23:09       ` Randy Brukardt
2019-04-22 20:05       ` Norman Worth
2019-04-16 20:54     ` Lucretia
2019-04-16 23:15       ` Randy Brukardt
2019-04-16 20:53   ` Lucretia
2019-04-18 13:32 ` sbelmont700
replies disabled

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