8.5. ПАРАМЕТРИЗАЦИЯ
405
совокупность должна быть расширена операциями, используемыми с соот-
ветствующим формальным параметром этой процедуры. А есть еще случаи
динамики, когда при одних вычислениях формируется одна, а при других —
другая совокупность; есть и перегрузка операций, когда смысл имени опе-
рации зависит от того, с какими аргументами она вычисляется. И все это
осложняется в связи с внешними библиотечными процедурами, про которые
принципиально неизвестно, как они используют свои параметры.
Эти и подобные им рассуждения приводят к выводу о том, что нужно как-
то ограничить правила соответствия по сравнению с тем, что можно предпо-
ложить на первый взгляд. Таким образом, предлагается ограничиться потен-
циальной применимостью операций, нисколько не заботясь о том, с какими
операциями они фактически используются. Иными словами, вводятся следу-
ющие соглашения:
• используется статическая система типов переменных, которая в мо-
мент описания связывает описываемое имя с типом и никогда не по-
зволяет нарушать эту связь. В свою очередь, тип определяется как со-
вокупность значений и набор операций, вычислимых с этими значени-
ями;
• вводятся приведения значений типов, которые определяются как пра-
вила преобразования значения одного типа к значению другого. Эти
правила, вообще говоря, могут требовать вызова подпрограмм, перера-
батывающих исходное значение в значение целевого типа. Они опреде-
ляются только для разумных сочетаний пар типов (для каждого языка
своих). Они могут вызываться и неявно, в тех случаях, когда приве-
дение требуется по контексту, и явно, когда приведение указывается
программистом принудительно;
• значение фактического параметра, соответствующего in-параметру, при-
водится к типу, заданному для формального параметра, а значение фор-
мального out-параметра, вырабатываемое в ходе вычислений процеду-
ры, приводится к типу фактического параметра.
Благодаря этим соглашениям нет нужды знать реализации алгоритмов про-
цедур,т. е.тексты,задающие их), чтобы корректно (с точки зрения языка)вы-
зывать процедуры. Достаточно знать только типы формальных параметров.
Собственно говоря, одной из предпосылок определения типа набором опе-
раций, допустимых для его значений, было обеспечение с минимальными
затратами корректности вызовов процедур.