명목형식시스템

Nominal type system

컴퓨터 과학에서 유형 시스템은 명시적 선언 및/또는 유형의 이름에 의해 데이터 유형의 호환성과 동등성이 결정되는 경우 명목형 또는 명목형 유형 시스템(또는 이름 기반 유형 시스템)이다. 공칭 시스템은 형식이 동등한지 여부 및 유형이 다른 유형의 하위 유형인지 여부를 결정하기 위해 사용된다. 명목형 시스템은 구조적 시스템과 대비되는데, 여기서 비교는 해당 유형의 구조에 기초하며 명시적인 선언이 필요하지 않다.

공칭 타이핑

공칭 타이핑은 두 변수의 선언이 동일한 유형을 지정하는 경우에만 형식 호환성을 의미한다. 를 들어, C에서, 2 struct 동일한 번역 단위에 서로 다른 이름을 가진 형식은 동일한 필드 선언을 가지고 있더라도 결코 양립할 수 없는 것으로 간주된다.

그러나 C는 또한 a를 허용한다. typedef 기존 유형의 별칭을 도입하는 선언 이것들은 단지 구문론일 뿐 형식 확인을 목적으로 그 종류를 그것의 별칭과 구별하지 않는다. 여러 언어로 표현되는 이 특성은 (예를 들어) 동일한 원시 정수 유형을 두 가지 의미론적으로 구별되는 방법으로 사용할 경우 형식 안전성을 상실할 수 있다. Haskell은 C-style 구문론적 별칭을 의 형태로 제공한다. type 선언문뿐만 아니라 newtype 기존 형식에 대해 새롭고 뚜렷한 유형의 이형형을 도입하는 [1]선언

공칭 하위 유형

유사한 방식으로, 명목 하위 형식은 정의에서 명시적으로 그렇게 선언된 경우에만 한 형식이 다른 유형의 하위 형식임을 의미한다. 명목형식 언어는 일반적으로 선언된 하위유형이 구조적으로 호환되는 요건을 시행한다(에펠탑은 비호환적 하위유형을 선언할 수 있도록 허용하지만). 그러나 구조적으로 호환되지만 하위 유형으로 선언되지 않은 하위 유형은 하위 유형으로 간주되지 않는다.

C++, C#, 자바, 목표-C, 델파이, 스위프트, 줄리아, 러스트 모두 주로 명목 타이핑과 명목 서브타이핑을 사용한다.

Java와 C#와 같이 명목상으로 서브타이핑된 일부 언어는 클래스를 최종(또는 C# 용어로 봉인)으로 선언할 수 있도록 허용하며, 이는 더 이상의 서브타이핑은 허용되지 않음을 나타낸다.

비교

공칭타입은 구조타입보다 형식안전을 더 잘 할 수 있는 우발적 형식균등을 방지하는데 유용하다. 예를 들어, 공칭 타이핑은 기존 서브 타입을 수정하지 않고 새로운 슈퍼 타입을 만들 수 없기 때문에 비용은 유연성 감소다.

참고 항목

참조

  1. ^ "Haskell 2010 Report: Declarations and Bindings: User-Defined Datatypes". Archived from the original on 2017-01-04. Retrieved 2015-06-02.

원천

외부 링크