* Convert an access to constant to access to variable
@ 2017-08-04 22:17 Victor Porton
2017-08-05 0:26 ` Randy Brukardt
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Victor Porton @ 2017-08-04 22:17 UTC (permalink / raw)
What is the proper way to convert an access to constant to access to
variable? (Yes, I know that then I need to be careful not to modify this
"variable".)
Maybe Unchecked_Conversion?
But:
1. Is Unchecked_Conversion guaranteed by the standard to work well in this
case?
2. Is there a simpler way than Unchecked_Conversion?
--
Victor Porton - http://portonvictor.org
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Convert an access to constant to access to variable
2017-08-04 22:17 Convert an access to constant to access to variable Victor Porton
@ 2017-08-05 0:26 ` Randy Brukardt
2017-08-05 1:00 ` Victor Porton
2017-08-05 1:37 ` Victor Porton
2017-08-05 17:27 ` Stephen Leake
2 siblings, 1 reply; 8+ messages in thread
From: Randy Brukardt @ 2017-08-05 0:26 UTC (permalink / raw)
"Victor Porton" <porton@narod.ru> wrote in message
news:om2rph$18jt$1@gioia.aioe.org...
> What is the proper way to convert an access to constant to access to
> variable? (Yes, I know that then I need to be careful not to modify this
> "variable".)
Well, it's not a proper conversion, so there isn't going to be a "proper"
way.
> Maybe Unchecked_Conversion?
That's one possibility.
> But:
>
> 1. Is Unchecked_Conversion guaranteed by the standard to work well in this
> case?
I think so. The rules for what must work are found in 13.9(5-10). I suppose
a compiler could represent access-to-constant and access-to-variable
differently.
In any case, your program is erroneous if it tries to write a constant. (But
you knew that.)
> 2. Is there a simpler way than Unchecked_Conversion?
The alternative (assuming the access-to-variable is a general access type)
is to use 'Access to convert:
Ptr.all'Access
Nope, that won't work, because Ptr.all is a constant, and the result here
has to be a variable in order to assign it into an access-to-variable.
You could certainly use Address_to_Access_Conversions, but whether that's
"simpler" is in the eye of the beholder. (It also requires an instantiation,
and usually an extra type conversion.)
Randy.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Convert an access to constant to access to variable
2017-08-05 0:26 ` Randy Brukardt
@ 2017-08-05 1:00 ` Victor Porton
2017-08-07 23:21 ` Randy Brukardt
0 siblings, 1 reply; 8+ messages in thread
From: Victor Porton @ 2017-08-05 1:00 UTC (permalink / raw)
Randy Brukardt wrote:
> "Victor Porton" <porton@narod.ru> wrote in message
> news:om2rph$18jt$1@gioia.aioe.org...
>> What is the proper way to convert an access to constant to access to
>> variable? (Yes, I know that then I need to be careful not to modify this
>> "variable".)
>
> Well, it's not a proper conversion, so there isn't going to be a "proper"
> way.
>
>> Maybe Unchecked_Conversion?
>
> That's one possibility.
>
>> But:
>>
>> 1. Is Unchecked_Conversion guaranteed by the standard to work well in
>> this case?
>
> I think so. The rules for what must work are found in 13.9(5-10). I
> suppose a compiler could represent access-to-constant and
> access-to-variable differently.
>
> In any case, your program is erroneous if it tries to write a constant.
> (But you knew that.)
>
>> 2. Is there a simpler way than Unchecked_Conversion?
>
> The alternative (assuming the access-to-variable is a general access type)
> is to use 'Access to convert:
>
> Ptr.all'Access
>
> Nope, that won't work, because Ptr.all is a constant, and the result here
> has to be a variable in order to assign it into an access-to-variable.
>
> You could certainly use Address_to_Access_Conversions, but whether that's
> "simpler" is in the eye of the beholder. (It also requires an
> instantiation, and usually an extra type conversion.)
Address_to_Access_Conversions seems not to solve my problem, because
function To_Address(Value : Object_Pointer) return Address
accepts only variable pointers not constant pointers. So I am unable to do
anything with my constant pointer.
It's bad! I can dealt with this only with a horrible workaround.
Hard to believe that there is no any way in Ada2012 to convert an access to
constant to an access to variable. I'm sure many people wanted this. How
such a feature may be missing?!
Should we develop and submit a language change proposal?!
Maybe A'Unchecked_Variable?
--
Victor Porton - http://portonvictor.org
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Convert an access to constant to access to variable
2017-08-05 1:00 ` Victor Porton
@ 2017-08-07 23:21 ` Randy Brukardt
0 siblings, 0 replies; 8+ messages in thread
From: Randy Brukardt @ 2017-08-07 23:21 UTC (permalink / raw)
"Victor Porton" <porton@narod.ru> wrote in message
news:om35c6$1jfb$1@gioia.aioe.org...
...
> Hard to believe that there is no any way in Ada2012 to convert an access
> to
> constant to an access to variable. I'm sure many people wanted this. How
> such a feature may be missing?!
You're the first person that has ever expressed such a need, to my
knowledge. So I'm pretty certain that the number of people needing this is
not "many".
This situation has never happened to me personally. That could be because
I've almost never written an access-to-constant (and when I have, it usually
didn't work and I ended up changing it).
In any case, this will be a tough sell to the ARG, since it is clearly
adding more ways to write erroneous programs. That's considered the wrong
direction for a language focused on safety.
Randy.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Convert an access to constant to access to variable
2017-08-04 22:17 Convert an access to constant to access to variable Victor Porton
2017-08-05 0:26 ` Randy Brukardt
@ 2017-08-05 1:37 ` Victor Porton
2017-08-05 17:27 ` Stephen Leake
2 siblings, 0 replies; 8+ messages in thread
From: Victor Porton @ 2017-08-05 1:37 UTC (permalink / raw)
Victor Porton wrote:
> What is the proper way to convert an access to constant to access to
> variable? (Yes, I know that then I need to be careful not to modify this
> "variable".)
>
> Maybe Unchecked_Conversion?
>
> But:
>
> 1. Is Unchecked_Conversion guaranteed by the standard to work well in this
> case?
>
> 2. Is there a simpler way than Unchecked_Conversion?
Maybe like this:
------------
X: constant T;
Y: T;
for Y'Address use X'Address;
------------
The representations of X and Y are guaranteed to be the same by the
standard, aren't them?
--
Victor Porton - http://portonvictor.org
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Convert an access to constant to access to variable
2017-08-04 22:17 Convert an access to constant to access to variable Victor Porton
2017-08-05 0:26 ` Randy Brukardt
2017-08-05 1:37 ` Victor Porton
@ 2017-08-05 17:27 ` Stephen Leake
2017-08-05 17:41 ` Victor Porton
2 siblings, 1 reply; 8+ messages in thread
From: Stephen Leake @ 2017-08-05 17:27 UTC (permalink / raw)
On Friday, August 4, 2017 at 5:17:26 PM UTC-5, Victor Porton wrote:
> What is the proper way to convert an access to constant to access to
> variable? (Yes, I know that then I need to be careful not to modify this
> "variable".)
why do you need to do this? Why do you need a variable view of an object, if you promise to treat it as a constant?
I can't think of a good reason.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Convert an access to constant to access to variable
2017-08-05 17:27 ` Stephen Leake
@ 2017-08-05 17:41 ` Victor Porton
2017-08-07 23:16 ` Randy Brukardt
0 siblings, 1 reply; 8+ messages in thread
From: Victor Porton @ 2017-08-05 17:41 UTC (permalink / raw)
Stephen Leake wrote:
> On Friday, August 4, 2017 at 5:17:26 PM UTC-5, Victor Porton wrote:
>> What is the proper way to convert an access to constant to access to
>> variable? (Yes, I know that then I need to be careful not to modify this
>> "variable".)
>
> why do you need to do this? Why do you need a variable view of an object,
> if you promise to treat it as a constant?
>
> I can't think of a good reason.
I need chars_ptr for interfacing with C.
There is no constant_chars_ptr.
(I need to generate chars_ptr from a char_array or rather from constant
char_array.)
--
Victor Porton - http://portonvictor.org
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Convert an access to constant to access to variable
2017-08-05 17:41 ` Victor Porton
@ 2017-08-07 23:16 ` Randy Brukardt
0 siblings, 0 replies; 8+ messages in thread
From: Randy Brukardt @ 2017-08-07 23:16 UTC (permalink / raw)
"Victor Porton" <porton@narod.ru> wrote in message
news:om500e$3iv$1@gioia.aioe.org...
...
> I need chars_ptr for interfacing with C.
>
> There is no constant_chars_ptr.
>
> (I need to generate chars_ptr from a char_array or rather from constant
> char_array.)
We did all of this sort of stuff just using Interfaces.C.To_Ada and various
types with convention C. I don't think I've ever used Interfaces.C.Strings
and Interfaces.C.Pointers outside of testing them. I think you are seeing
why...
Randy.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-08-07 23:21 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-04 22:17 Convert an access to constant to access to variable Victor Porton
2017-08-05 0:26 ` Randy Brukardt
2017-08-05 1:00 ` Victor Porton
2017-08-07 23:21 ` Randy Brukardt
2017-08-05 1:37 ` Victor Porton
2017-08-05 17:27 ` Stephen Leake
2017-08-05 17:41 ` Victor Porton
2017-08-07 23:16 ` Randy Brukardt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox