Правила совместимости

Эквивалентность типов

Во многих случаях, например, для большинства бинарных операция или при переопределения методов, требуется эквивалентность типов.

Два типа Т1 и Т2 эквивалентны, если выполняется одно из условий:

  • типы Т1 и Т2 это один и тот же тип, возможно, переименованный, так как переименование типа не создает новый тип
  • типы Т1 и Т2 это типы векторов и типы их элементов эквивалентны
  • типы Т1 и Т2 это может быть типы и их базовые типы эквивалентны

Переименование типа не создает новый тип, таким образом, после описания:

тип Числа = Цел64 
пусть ч: Число = 1
пусть ц: Цел64 = 2
пусть с: Слово64 = 3

типы переменных ч и ц эквивалентны, так как это один и тот же тип. В то же время, типы переменных с и ц не эквивалентны, так как это разные типы.

Совместимость по присваиванию

Совместимость по присваиванию используется в следующих случаях:

  • инициализация констант и переменных с явным типом: пусть х: Т = выражение, выражение должно быть совместимо с типом Т
  • оператор присваивания: х := выражение
  • оператор вернуть выражение, выражение должно быть совместимо с типом результата функции
  • передача фактических параметров при вызове: Ф(аргумент1, ..., аргументN), аргумент должен быть совместим с типом параметра

Значение типа ТВ совместимо по присваиванию с целевым типом ТП (типом переменной, константы или параметра), если выполняется одно из условий:

  • ТП и ТВ эквивалентны
  • ТП это целый тип (Байт, Цел64, Слово64), а значение - это литерал целого типа, причем значение литерала входит в допустимый диапазон значений ТП
  • ТП и ТВ это типы векторов и типы их элементов эквивалентны
  • ТП это мб Т1, а значение есть ‘пусто’ или ТП это мб Т2 и типы Т1 и Т2 эквивалентны
  • ТП и ТВ это типы классов и ТВ является расширением ТП
  • переменная является полиморфным параметром

Добавить совместимость для протоколов и функциональных типов.