행 다형성과 서브 타이핑의 주요 차이점은 무엇입니까


20

행 다형성이 서브 타이핑보다 더 나은 접근 방식이라고 자주 들지만, 그것들을 자세히 비교하는 것은 찾기가 어렵습니다. 특히 시스템 사용자의 관점에 관심이 있습니다.

나는 건너 않은 이 블로그 게시물,하지만 이전보다 더 많은 질문으로 나를 떠난다. 예를 들어, 하위 유형이 지정된 시스템은 한 유형을 할당하고 행 유형이있는 시스템은 다른 유형을 할당한다고 주장합니다. 이는 하위 분류가있는 시스템이 "행 타이핑"유형을 할당하는 경우 부정확하게 의도한다는 것을 의미합니까?

내가 볼 수있는 가장 큰 차이점은 행 타이핑으로 인수 유형을 정렬 할 수 있다는 것입니다 (즉, 인수 a필드 에만 관심이 있지만 인수가 동일한 필드를 필요로 하는 두 개의 인수 함수를 작성하십시오 ) .

답변:


10

Subtyping은 한 유형의 표현이 주어지면 다른 유형도 제공 할 수 있다고 말합니다. 우리는 전자가 후자의 하위 유형이며이 하위 유형 관계는 다른 많은 관계를 유발한다고 말합니다. 기호에서

Γ⊢이자형:에스에스<:티Γ⊢이자형:티

여기서 중요한 것은 (그리고 그것을 검토 한 이유는) 동일한 표현에 두 가지 유형이 있다는 것입니다. 암시 적 유형 인스턴스화를 사용하는 파라 메트릭 다형성 언어 에서는 다음과 같은 하위 유형 관계가 있습니다 . 모든 유형 T에 대해 . 시스템 F에서와 같이 유형 인스턴스화가 명시 적이면이 하위 유형 관계는 유지되지 않습니다.(∀α.τ)<:τ[티/α]티

{ℓ1:에이,ℓ2:비}<:{ℓ2:비,ℓ1:에이}{ℓ1:에이,ℓ2:비}≅{ℓ2:비,ℓ1:에이}에스≅티⟺에스<:티∧티<:에스{ℓ1:에이,ℓ2:비}={ℓ2:비,ℓ1:에이}티<:티

일반적으로 하위 유형이있는 언어에 대해 이야기 할 때 , 지면 유형, 즉 자유 변수가없는 유형 (물론, 비 지상 유형에 대한 하위 유형 관계를 생성 할 수있는 유형) 에 대한 사소한 하위 유형 관계를 가진 언어를 의미 합니다. 따라서 Roy 's와 같은 행 다형성이있는 시스템은 이러한 의미에서 하위 유형을 지정하는 언어가 아니지만 암시 적으로 인스턴스화 된 파라 메트릭 다형성 언어에서 비롯된 사소한 하위 유형 관계가 있습니다. 반면에 구조적 서브 타이핑은지면 유형에 대한 사소한 서브 타이핑 관계를 명시 적으로 나타냅니다.

(≅)위에서 구조적 서브 타이핑은 행 유형을 의미하지만 그 반대도 마찬가지입니다. 파라 메트릭 다형성은 행 유형 또는 구조적 서브 타이핑에 직교합니다 (어떻게 가질 수도 있고 갖지 않을 수도 있다는 점에서 상호 작용이 있습니다). 구조적 서브 타이핑 + 파라 메트릭 다형성을 갖는 시스템은 후자의 모든 용어가 전자에서 동일한 타입으로 입력 될 수 있다는 의미에서 행 유형 + 파라 메트릭 다형성 (일종의 "레코드 유니온"을 가정)을 가정합니다. 전자는 추가 유형으로도 입력 할 수 있습니다. Brian의 예제를 사용하면 구조적 서브 answer타이핑 및 파라 메트릭 다형성 이 있는 시스템 에서 행 타이핑 버전과 동일한 유형을 가지지 만 서브 타이핑 버전의 유형 도 있습니다 .

ρ{ c : Number }정보 : 하위 유형에서 수퍼 유형으로 이동하면 (유형) 정보가 손실됩니다. 이것은 종종 당신이 원하는 것일 수 있습니다 : 당신이 관심있는 공통 유형이 있고 다른 모든 것은 관련이 없습니다. 내 편견은 가능한 한 많은 유형 정보를 유지하고 명시 적으로 버리는 것입니다. 하위 유형 지정 방식의 단점은 유형이 올바른 프로그램이지만 종종 유형이 정보가없는 "맨 위"유형 (예 : 빈 레코드)으로 푸시 되었기 때문에 증명됩니다. 반복적으로, 파라 메트릭 다형성 (일반적으로)은 유형 정보를 보존하고 부분적으로 입력하면 의도적으로 손실합니다.


자세한 답변 감사합니다! 또 다른 질문 : 구조적 서브 타이핑 + 파라 메트릭 다형성이 행 타이핑 + 파라 메트릭 다형성을 포함한다면 왜 후자를 사용합니까?
— Alex R

@AlexR Brian이 블로그 포스트에서 언급했듯이 서브 타이핑은 형식 유추 및 내가 언급 한 인체 공학적 문제와 같은 다른 여러 측면과 매우 밀접하게 상호 작용합니다. 구현 및 언어 복잡성 문제도 있습니다. 공정하게하기 위해 "행 유형"과 서브 타이핑 모두를위한 넓은 설계 공간이 있으므로 "소비자"는 대략적인 진술입니다.
— Derek Elkins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.