I have a language lawyering question. According to ARM X'Address is the >address of the first array element. What is the address of empty array?
In the case of an array with bounds it could be the address following the bounds.
But what about a definite empty array? Of zero length (and presumably zero size). Would the compiler have to invent some address?
P.S. With GNAT:
type NUL is array (1..0) of Integer;
S : NUL;
S'Size is 8 and it has some address that holds the byte.
Talking about the dark matter in our Universe. This is what empty arrays
are constructed of! (:-))
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
Aliased objects should never have zero-size in Ada (or, at least, ever be allocated at the same address). I believe that is because of the required result of the equality operator. Specifically:
type NUL is array (1..0) of Integer;
A, B : aliased NUL;
type PNul is access Nul;
PA : PNul := A'Access; PB : PNul := B'Access;
if PA = PB then
Report.Failed ("Access to two distinct objects can not be equal");
end if;
If an object is not aliased, it is undefined whether 'Address will work reliably with it (it probably does in GNAT, it might not in Janus/Ada, etc.) If the objects ARE aliased, then 'Address works essentially the same as 'Access.
I personally find this a bit of overspecification in Ada, but since
zero-size objects are unusual, no one has thought it worth going through the effort to change. (And of course such a change would complicate static analysis.) We (the ARG) did discuss this topic at one point (I don't have
the AI number at hand).
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 399 |
Nodes: | 16 (2 / 14) |
Uptime: | 64:59:42 |
Calls: | 8,355 |
Calls today: | 15 |
Files: | 13,159 |
Messages: | 5,893,946 |
Posted today: | 1 |