Jmenovitý typ systému - Nominal type system

Ve vědě o počítačích , je systém typu je nominální nebo jmenovaný systém typu (nebo jméno založené na typu systému ), pokud kompatibilita a rovnocennost datových typů je dán výslovných prohlášení a / nebo jménem typů. Nominální systémy se používají k určení, zda jsou typy ekvivalentní, a také pokud je typ podtypem jiného. Systémy nominálních typů kontrastují se strukturálními systémy , kde srovnání vycházejí ze struktury dotyčných typů a nevyžadují výslovná prohlášení.

Nominální psaní

Nominální typizace znamená, že dvě proměnné jsou kompatibilní s typem, právě když jejich deklarace pojmenují stejný typ. Například v C nejsou dva struct typy s různými názvy ve stejné překladové jednotce nikdy považovány za kompatibilní, i když mají shodné deklarace polí.

C však také umožňuje typedef deklaraci, která zavádí alias pro existující typ. Ty jsou pouze syntaktické a neodlišují typ od jeho aliasu pro účely kontroly typu. Tato funkce přítomná v mnoha jazycích může vést ke ztrátě bezpečnosti typu, když se (například) použije stejný primitivní celočíselný typ dvěma sémanticky odlišnými způsoby. Haskell poskytuje syntaktický alias ve stylu C ve formě type deklarace, stejně jako newtype deklaraci, která zavádí nový, odlišný typ, isomorfní s existujícím typem.

Nominální podtypování

Podobným způsobem nominální podtypování znamená, že jeden typ je podtypem jiného, ​​právě když je ve své definici výslovně deklarován. Jazyky s nominálním typem obvykle vynucují požadavek, aby deklarované podtypy byly strukturálně kompatibilní (ačkoli Eiffel umožňuje deklaraci nekompatibilních podtypů). Podtypy, které jsou strukturálně kompatibilní „náhodou“, ale nejsou deklarovány jako podtypy, se však za podtypy nepovažují.

C ++ , C # , Java , Objective-C , Delphi , Swift , Julia a Rust používají primárně jak nominální psaní, tak nominální podtypování.

Některé nominálně podtypové jazyky, například Java a C #, umožňují deklarovat třídy jako konečné (nebo zapečetit v terminologii C #), což naznačuje, že žádné další podtypování není povoleno.

Srovnání

Nominální psaní je užitečné při prevenci náhodného typu rovnocennosti, což umožňuje lepší bezpečnost typu než strukturální psaní. Cena je snížená flexibilita, protože například nominální typování neumožňuje vytváření nových super typů bez úpravy existujících podtypů.

Viz také

Reference

Zdroje

externí odkazy