comp.lang.ada
 help / color / mirror / Atom feed
From: Jere <jhb.chat@gmail.com>
Subject: Re: Why can't objects be static in Ada?
Date: Sat, 13 Apr 2019 06:07:11 -0700 (PDT)
Date: 2019-04-13T06:07:11-07:00	[thread overview]
Message-ID: <842b24b2-4b9f-46ae-a173-87b70aac2959@googlegroups.com> (raw)
In-Reply-To: <b411a770-5e86-4d5e-9e43-e52843be724d@googlegroups.com>

On Thursday, April 11, 2019 at 8:40:40 AM UTC-4, Lucretia wrote:
> Someone sent in a pull request to my bindings and had to change a few constants to functions because objects can't be static. For an example:
> 
>    type Sizes is
>       record
>          Width  : Dimension;
>          Height : Dimension;
>       end record with
>      Convention => C;
> 
>    Zero_Size : constant Sizes := (others => Natural_Dimension'First);
> 
> Why can't Zero_Size be compiled as static in this pre-elaborated package?
> 
> This seems to be a major flaw in Ada imo.
> 
> Luke.

Out of curiosity, are you looking for something more akin to C++'s
constexpr [1][2] keyword?  Ada's static definition is kind of like that, 
but not as flexible or usable yet.  I'm hoping that at some point Ada 
does adjust the definition of static to be even more useful.  Most 
compiler's do make things that are static potentially
compile time, but I (think) I share your frustration in how limited
the definition actually covers, especially in places where it would
be obvious for the compiler to make that decision (well assuming the
language definition would allow it).  I think Ada202x is looking at
improving the breadth of situations for static functions (maybe someone
more versed can confirm this either way).

This is definitely one of the few outliers in my embedded code as
I work to move my old C++ embedded code into Ada designs.  It's really
frustrating to take such large hits on either performance (when dealing 
with small embedded boards) or better reusable design.  Granted it is 
just a few outliers and I can find workarounds, but the workarounds
occasionally can be more error prone and much more difficult to 
maintain.

[1]: https://www.geeksforgeeks.org/understanding-constexper-specifier-in-c/
[2]: https://en.cppreference.com/w/cpp/language/constexpr

  parent reply	other threads:[~2019-04-13 13:07 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
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 [this message]
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