Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В информатике система типов - это система номинальных или именных типов (или система типов на основе имен ), если совместимость и эквивалентность типов данных определяется явными объявлениями и / или именами типов. Именные системы используются, чтобы определить, эквивалентны ли типы, а также является ли тип подтипом другого. Системы номинальных типов отличаются от структурных систем , где сравнения основаны на структуре рассматриваемых типов и не требуют явного объявления.

Номинальный набор [ править ]

Номинальная типизация означает, что две переменные совместимы по типу тогда и только тогда, когда их объявления называют один и тот же тип. Например, в C два structтипа с разными именами в одной и той же единице перевода никогда не считаются совместимыми, даже если они имеют идентичные объявления полей.

Однако C также допускает typedefобъявление, которое вводит псевдоним для существующего типа. Они носят чисто синтаксический характер и не позволяют отличить тип от его псевдонима с целью проверки типа. Эта функция, представленная во многих языках, может привести к потере безопасности типов, когда (например) один и тот же примитивный целочисленный тип используется двумя семантически разными способами. Haskell предоставляет синтаксический псевдоним в стиле C в форме typeобъявления, а также newtypeобъявление, которое вводит новый, особый тип, изоморфный существующему типу. [1]

Номинальный подтип [ править ]

Подобным образом номинальное выделение подтипа означает, что один тип является подтипом другого тогда и только тогда, когда он явно объявлен таковым в своем определении. Языки с номинальным типом обычно требуют, чтобы объявленные подтипы были структурно совместимыми (хотя Eiffel позволяет объявлять несовместимые подтипы). Однако подтипы, которые структурно совместимы «случайно», но не объявлены как подтипы, не считаются подтипами.

C ++ , C # , Java , Objective-C , Delphi , Swift , Julia и Rust в основном используют как номинальную типизацию, так и номинальное выделение подтипов.

Некоторые языки с номинальными подтипами, такие как Java и C #, позволяют объявлять классы окончательными (или запечатанными в терминологии C #), указывая на то, что дальнейшее создание подтипов запрещено.

Сравнение [ править ]

Номинальная типизация полезна для предотвращения случайной эквивалентности типов, что обеспечивает лучшую безопасность типов, чем структурная типизация. Цена заключается в снижении гибкости, поскольку, например, номинальная типизация не позволяет создавать новые супертипы без модификации существующих подтипов.

См. Также [ править ]

  • Система структурного типа
  • Абстрактный тип
  • Система типов

Ссылки [ править ]

  1. ^ «Отчет Haskell 2010: Объявления и привязки: типы данных, определяемые пользователем» . Архивировано из оригинала на 2017-01-04 . Проверено 2 июня 2015 .

Источники [ править ]

  • Пирс, Бенджамин С. (2002). «§19.3 Системы номинального и конструктивного типов». Типы и языки программирования . MIT Press . С. 253–. ISBN 0-262-16209-1. CS1 maint: discouraged parameter (link)

Внешние ссылки [ править ]

  • c2.com: именная и структурная типизация