comp.lang.ada
 help / color / mirror / Atom feed
* 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-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

* 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

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