Недостаточность Паскаля
Jan. 22nd, 2025 05:34 pmНезабвенный С. И. Пирин в своё время постарался обеспечить возможность комплексирования Паскаля с другими языками программирования. Так, например, вызывать внешние процедуры со стандартным (фортрановским) соглашением о связях из Паскаля можно было, объявив их как FORTRAN; вместо EXTERNAL;. Также можно было выключать проверку числа и типа параметров этих процедур, описывая их с включённым псевдокомментарием (*=F+*).
Делать паскалевские процедуры входными, чтобы их можно было вызывать извне, можно было с помощью псевдокомментария (*=E+*). В инструкции указываются ассемблерные вставки, необходимые для работы с файлами.
Также можно было вызывать целиком паскалевские программы как процедуры без параметров.
Всё бы хорошо, да была забыта одна существенная деталь. Как известно из Мазного, в редакторе *EDIT можно было определять собственные обработчики, вызываемые с помощью *U:FILTER, где FILTER должна была быть определена как
К сожалению, Паскаль-компилятор не позволяет указать, что формальный параметр процедуры должен вызываться согласно фортрановскому соглашению о связях, поэтому при использовании Паскаля для написания *U-фильтров приходится городить огороды.
Делать паскалевские процедуры входными, чтобы их можно было вызывать извне, можно было с помощью псевдокомментария (*=E+*). В инструкции указываются ассемблерные вставки, необходимые для работы с файлами.
Также можно было вызывать целиком паскалевские программы как процедуры без параметров.
Всё бы хорошо, да была забыта одна существенная деталь. Как известно из Мазного, в редакторе *EDIT можно было определять собственные обработчики, вызываемые с помощью *U:FILTER, где FILTER должна была быть определена как
SUBROUTINE FILTER(IN, SERV)
DIMENSION IN(14),OUT(14)
EXTERNAL SERV
C обработка входящей строки в IN
С формирование исходящей строки/исходящих строк в OUT
С вызов
CALL SERV(OUT)
С для каждой из сформированных строк
RETURN
END
К сожалению, Паскаль-компилятор не позволяет указать, что формальный параметр процедуры должен вызываться согласно фортрановскому соглашению о связях, поэтому при использовании Паскаля для написания *U-фильтров приходится городить огороды.