Ada Programming/Keywords/aliased
Description
[edit | edit source]If you come from C/C++ you are probably used to the fact that every element of an array, struct/record and other variables has an address. The C/C++ standards actually demand that. In Ada this is not true.
Ada is a self optimizing language — there is for example no register keyword like in C/C++. Ada compilers will use a register for storage automatically. Incidentally, most C/C++ compilers nowadays just ignore the register and allocate registers themselves, just like Ada does.
So if you want to take an access from any variable you need to tell the compiler that the variable needs to be in memory and may not reside inside a register. This is what the keyword aliased is for. Additionally it also serves as a hint to the reader of the program about the existence of pointers referencing the variable.
For variables
[edit | edit source]I : aliased
Integer := 0;
For type declarations
[edit | edit source]For the elements of an array
[edit | edit source]Declaring an array
as aliased
will only ensure that the array as a whole has an address. It says nothing about the individual elements of the array
— which may be packed in a way that more than one element has the same address. You need to declare the actual elements as aliased as well. You can read in Types/array how this is done. Here is just a short example:
type
Day_Of_Monthis
range
1 .. 31;type
Day_Has_Appointmentis
array
(Day_Of_Month)of
aliased
Boolean;
For the elements of a record
[edit | edit source]Just like arrays, declaring a record as aliased will only ensure that the record as a whole has an address. It says nothing about the individual elements of the record — which again may be packed and share addresses. Again you need to declare the actual elements as aliased as well. You can read in Types/record how this is done. Here is just a short example:
type
Basic_Recordis
record
A :aliased
Integer;end
record
;
See also
[edit | edit source]Wikibook
[edit | edit source]Ada Reference Manual
[edit | edit source]Ada Quality and Style Guide
[edit | edit source]
Ada Keywords | ||||
---|---|---|---|---|
abort
|
else
|
new
|
return
|
|
abs
|
elsif
|
not
|
reverse
|
|
abstract (Ada 95)
|
end
|
null
|
||
accept
|
entry
|
select
|
||
access
|
exception
|
of
|
separate
|
|
aliased (Ada 95)
|
exit
|
or
|
some (Ada 2012)
|
|
all
|
others
|
subtype
|
||
and
|
for
|
out
|
synchronized (Ada 2005)
|
|
array
|
function
|
overriding (Ada 2005)
|
||
at
|
tagged (Ada 95)
|
|||
generic
|
package
|
task
|
||
begin
|
goto
|
parallel (Ada 2022)
|
terminate
|
|
body
|
pragma
|
then
|
||
if
|
private
|
type
|
||
case
|
in
|
procedure
|
||
constant
|
interface (Ada 2005)
|
protected (Ada 95)
|
until (Ada 95)
|
|
is
|
use
|
|||
declare
|
raise
|
|||
delay
|
limited
|
range
|
when
|
|
delta
|
loop
|
record
|
while
|
|
digits
|
rem
|
with
|
||
do
|
mod
|
renames
|
||
requeue (Ada 95)
|
xor
|