Оглавление
- 1 Система структурного типа
- 1.1 Основы структурной типизации
- 1.2 Описание структурной типизации
- 1.3 Примеры использования структурной типизации
- 1.4 Полиморфизм и структурная типизация
- 1.5 Наследование и структурная типизация
- 1.6 Проверка совместимости типов
- 1.7 Пример в OCaml
- 1.8 Совместимость для расширяющихся принуждений
- 1.9 Полный текст статьи:
- 2 Система структурных типов
Система структурного типа
-
Основы структурной типизации
- Структурные типы определяют совместимость типов на основе их структуры, а не названия или места объявления.
- Они контрастируют с номинативными системами и утиной типизацией, где совместимость проверяется только во время выполнения.
-
Описание структурной типизации
- Элемент совместим с другим, если для каждого признака в типе второго элемента существует соответствующий признак в типе первого элемента.
- Определение не является симметричным и включает совместимость подтипов.
- Два типа считаются идентичными, если они совместимы друг с другом.
-
Примеры использования структурной типизации
- OCaml использует структурную типизацию для совместимости методов объектов.
- Go использует структурную типизацию для определения совместимости типа с интерфейсом.
- C++ демонстрирует структурную типизацию аргументов типа в шаблонных функциях.
- Haxe использует структурную типизацию, но не поддерживает подтипы классов.
-
Полиморфизм и структурная типизация
- Структурная типизация позволяет создавать специальные типы и протоколы, но может создавать закрытые абстракции.
- Недостаток заключается в возможности случайного создания типов с одинаковыми свойствами.
-
Наследование и структурная типизация
- В структурно-типизированных языках наследование не является подтипированием.
-
Проверка совместимости типов
- Проверка совместимости типов на основе структурной типизации является нетривиальной задачей.
-
Пример в OCaml
- Объекты в OCaml структурно типизированы по именам и типам методов.
- Классы служат только для создания объектов, а не для определения их типов.
- Эквивалентность типов определяется их структурой, а не названием или местом объявления.
-
Совместимость для расширяющихся принуждений
- Совместимость для расширяющихся принуждений также носит структурный характер.