Geniepro писал(а):
Rifat писал(а):
Меня интересует, почему Вирт и другие разработчики языка Oberon-2 не предусмотрели такую возможность? Может быть тогда просто эти IN и OUT не были изобретены или Вирт преднамеренное не внес эти фичи, считая их "синтаксическим сахаром".
В Ада-83 уже были IN и OUT -- вряд ли Вирт мог не знать об этом...
В Algol-W (1966 год), разработанном Виртом и Хоаром (буква W от Wirth
) были символы
value и
result, примерно соответствующие ключевым словам IN и OUT.
Семантика символа
result подразумевает, что для данного формального параметра неявно создаётся локальная переменная, с которой работает код процедуры. Затем, после завершения процедуры, значение этой неявной переменной присваивается фактическому параметру. Аналогично для
value — тоже неявная локальная переменная, соответствующая фактическому параметру, создаётся перед выполнением тела процедуры и инициализируется значением фактического параметра. Однако, для IN-, OUT- и VAR-параметров подразумевается передача в процедуру указателя на переменную (в т.ч. на компонент массива или записи), и при работе с формальным параметром подразумевается неявное его разыменование.
Таким образом
value точно соответствует передаче по значению,
result примерно соответствует OUT,
value result примерно соответствует VAR-параметрам.
Формальные параметры без символов
value и
result передавались по наименованию.
Передача параметра по наименованию — это такая особая алгольская магия, на сколько мне известно, нигде кроме Алгола-60 и Алгола-W не использовалась.
Да, «вряд ли Вирт мог не знать об этом…».