Но все- таки , если не трудно поясните почему невозможно в принципе проверить на этапе компиляции КОНКРЕТНЫЙ вызов этой функции (с конкретными параметрами) - ибо размеры фактических параметров(количество элементов в передаваемых массивах) известны на этапе компиляции..
эээ, мы же говорим об открытых массивах в качестве формальных параметров.
а открытые массивы потому и открытые, что их определение не завершено, это, если можно так сказать, обобщённые массивы, без них пришлось бы на каждую размерность писать свою персональную процедуру,
PROCEDURE( a, b : ARRAY 2 OF CHAR )
PROCEDURE( a, b : ARRAY 3 OF CHAR )
вместо этого мы пишем обобщенную процедуру
PROCEDURE( a, b : ARRAY OF CHAR )
Соответственно и длины массивов формальных параметров при компиляции процедуры типа
PROCEDURE( a, b : ARRAY OF CHAR );
BEGIN
a := b;
END
в присваивании мы проверить не сможем, потому что тип - открытый массив, у которых длину во время компиляции узнать невозможно в принципе, по причине отсутствия.
При вызове такой процедуры на этапе компиляции мы также ничего проконтролировать не сможем, иначе теряется смысл введения параметров-открытых(обобщённых) массивов.
Поэтому и остаётся или контроль в рантайме с трапами/остановами или копировать столько, сколько влезет.