В языке Oberon-2 параметры в процедуры можно передать с указанием VAR и без VAR. Когда переменная передается без VAR, то в процедуру фактически передается копия переменной. Если, например, это массив, то копирование, может занять относительно большое время. Если же передавать с помощью VAR, то это означает, что переменная может измениться.
В языке Component Pascal появились еще 2 возможности передать при помощи IN и OUT.
Меня интересует, почему Вирт и другие разработчики языка Oberon-2 не предусмотрели такую возможность? Может быть тогда просто эти IN и OUT не были изобретены или Вирт преднамеренное не внес эти фичи, считая их "синтаксическим сахаром".
Действительно, допустим мы пишем программу на Oberon-2 и нам надо передать массив в процедуру. Массив не должен изменяться. Но мы не хотим чтобы выполнялось копирование, так как это затратная операция, а также не хотим писать перед массивом слово VAR, так как массив не должен изменяться, а написав VAR мы тем самым запутываем программиста. Я думаю, что надо передавать эту переменную без VAR, чтобы не запутывать программиста, а компилятор просто должен соптимизировать вызов функции: проверить, что массив не может измениться и не выполнять его копирование при вызове функции, а просто использовать оригинальный массив.
Возможно, что Вирт думал о том, что копировать массив или нет, это должна быть забота компилятора и он должен это делать автоматически и не следует вносить в язык IN и OUT, так как в этом случае программист делает работу вместо компилятора.