По сути, каждый параметр функции или процедуры имеет направление к нему.Возможные варианты: in
, out
, in out
(оба) или access
.Если вы не видите ни одного из них, по умолчанию используется значение in
.
in
означает, что данные могут поступать в подпрограмму от вызывающей стороны (через параметр).Вам разрешено читать из in
параметров внутри подпрограммы.out
означает, что данные могут выйти из подпрограммы таким образом, и, таким образом, вам разрешено присваивать значения параметру внутри подпрограммы.В общем, то, как компилятор выполняет передачу данных, зависит от компилятора, что согласуется с общей философией Ады, позволяющей вам указать , что вы хотите сделать, а не как вы хотите это сделать .
access
- это особый случай, и он похож на добавление «*» в определение вашего параметра на языках Cish.
Следующий вопрос, который обычно задают люди: «если я передам что-то большое как *Параметр 1018 *, он собирает все эти данные в стек или что-то в этом роде? "Ответ - «нет», если ваши авторы компиляторов не глупы.Каждый известный мне компилятор Ada пропускает объекты большего размера, чем помещается в регистр машины по ссылке.Это компилятор, а не детали вашего механизма передачи параметров, который принудительно не записывает данные обратно из процедуры.Опять же, вы говорите Аде, что вы хотите сделать, она находит наиболее эффективный способ сделать это.