5

일반적으로 상속과 파라 메트릭 다형성 ("generics")의 개념을 통일시킬 수 있는지 궁금합니다. 특히 분산에 관해서뿐만 아니라 how ("구문") 및 where (use-site/declaration-site) 정의되어야 하는가?상속과 파라 메트릭 다형성의 개념을 통합 할 수 있습니까?

  • 하위 입력 전자 :

    는 이러한 관점을 고려하십시오. 지. S <: TT을 허용하는 입력 인수에도 S을 허용하기 때문에 동시 변형 동작으로 인식 할 수 있습니다.
  • "상속 모델의 분산"을 불변으로 변경하는 것은 하위 유형 지정을 허용하지 않음으로써 정의 측면에서만 가능합니다 (예 : final 수정자를 클래스 정의에 추가). 본인이 지금까지 반대 변형을 수행 할 수 없습니다 대부분의 경우
  • 파라 메트릭 다형성은 기본적으로 불변이지만, 공동/콘트라 변형을 할 수

    • 을 고려

    둘 사이에 무시할 수없는 개념 불일치가있는 것 같습니다, 고통의 언어는 "안전하지 않은"공분산 (예 : 지. 자바/C#을) 상속/파라 메트릭 다형성 선언하는 방법에

  • 의 차이에 String[] <: Object[]과는 그것을 볼 수있는 일부 언어에서

을 상속에 비해 사용되는

class Foo extends Ordered[Foo] 
같은 잘하지만 함께 두 작품,

은 순서/비교 동작을 구현합니다.

  • 그러므로 다만, 상속 및 파라 메트릭 다형성의 개념이 통합과 같은 기본 분산 동작을 얻을 수 (예를 들어, 공분산 기본적으로 또는 그 대신 불변의 주석 대부분의 유형을 표시 할 필요성을 야기 할 수 있다고는 생각할 수있다 추악함을 다른 지점으로 이동)? 데이터 구조가 기본적으로 변경되지 않는 것처럼 실용적일까요?
  • 이것이 정상적인 것으로 입증 된 공식 시스템이 있습니까?
  • 구체적인 프로그래밍 언어에 관계없이 가장 일반적으로 필요한 구문 옵션/변경은 무엇입니까?
  • 이/비슷한 비슷한 작동 예제 나 언어가 있습니까?

답변

4

공분산/반항에 의해 보통 하나를 의미합니다. X, Y, Z이 유형이라고 가정합니다. a → ba 유형의 인수와 b 유형의 결과를 가진 함수 유형을 나타냅니다. <:은 하위 유형 관계 또는 "적합성"의 다른 개념을 나타냅니다. ⇒ 화살표는 "수반"이라고 읽습니다. 다음은 원하는 분야

이다
X <: Y ⇒ (Z → X) <: (Z → Y) 
X <: Y ⇒ (Y → Z) <: (X → Z) 

함수 타입 생성자 인수 유형에 대한 결과 유형 (데이터 소스)에 대하여, 그리고 contravariant와 공변이다 (데이터 싱크).이것은 기본적인 사실이며, 화살표의 방향을 바꿔 가면서 너무 창조적 인 일은 거의 할 수 없습니다. 물론 공변이나 반 차분 대신에 무차별을 사용할 수 있습니다 (대부분의 언어가 그렇습니다).

객체 유형은 함수 유형으로 표준 적으로 인코딩 될 수 있으므로 너무 많은 자유가 없습니다. 모든 유형 매개 변수는 데이터 소스 (공 변) 또는 데이터 싱크 (반 관행) 또는 둘 모두 (변이)를 나타냅니다. 그것은 하나의 언어로 소리와 반동이 있다면, 다른 언어로 그것은 contravariant 또는 불건전 한 될거야.

스칼라가이 점에서 이상적인 언어에 매우 가깝다고 생각합니다. 스칼라와 매우 흡사 한 예제를 인용하면 언어에 대해 가장 잘 알고있을 것입니다. 나는 왜 당신이 그것의 타입 시스템이 어떤 경우에만 멋지게 작동한다고 생각하는지 궁금합니다. 다른 인스턴스는 무엇입니까?

모든 유망한 언어 디자이너가 읽어야 할 이론적 작업 중 하나는 Luca Cardelli의 "Object Theory of Objects"입니다.

+0

도서 정보를 제공해 주셔서 감사합니다. 나는 기본적으로 상속과 pp가 서로 다른 기본값을 가지고 동일한 지주 개념을 가지고 있고, 그들의 사용 사례에 대해 적응되고 최적화되어 있는지 궁금합니다. – soc

+0

"어떤 경우에는 멋지게"독점적 인 것이 아닙니다. 나는이 두 개념이 서로 어떻게 상호 작용할 수 있는지에 대한 예제를 멋지고 간단한 예제로 발견했습니다. 나는 그 말씨를 조금 바꿨다. 저는 스칼라를 꽤 좋아하지만, 실제 컴파일러에 몇 가지 건전성 문제를 해결하고 싶습니다. 그러나이를 수행하는 데 필요한 천재성이 부족합니다. :-) – soc