교집합과 노조 유형의 실제 문제는 무엇입니까?


22

간단한 정적으로 유형화 된 함수형 프로그래밍 언어를 학습 경험으로 설계하고 있습니다.

지금까지 구현 한 유형 시스템은 약간의 추가 작업으로 교차 및 조합 유형을 통합 할 수 있습니다.

  • <Union String Integer>
  • <Union Integer Foo>
  • 위의 두 유형의 교차점은 평범 할 것입니다. Integer
  • 두 유형의 결합은 <Union String Integer Foo>

물론 이것이 가능하다는 사실은 그것이 좋은 디자인 아이디어라는 것을 의미하지는 않습니다. 특히, 유형을 분리하지 않고 중첩을 처리하는 구현상의 어려움에 대해 다소 우려하고 있습니다.

타입 시스템에 이러한 기능을 통합하는 장단점은 무엇입니까?

답변:


26

명심해야 할 몇 가지 사항은 다음과 같습니다.

  • 우리는 일반적으로 집합 이론적 교집합과 합집합의 의미를 알고 있다고 생각하지만, 교집합과 교집합 유형 정확히 무엇인지에 대한 몇 가지 다른 요구 있었습니다. 따라서 구현을 시작하기 전에 이것을 고정시키는 것이 좋습니다.
  • 교집합과 노조를 이해하는 데 끔찍하게 중요하다고 생각하는 요소 중 하나는 유형 개선 개념입니다 . 본질적으로 프로그램에 본질적인 특정 "archetype"(예 : " foo 는 정수에서 정수까지의 함수") 이 있다는 아이디어입니다. 더 정확한 속성을 표현하기 위해 세분화됩니다 (예 : " foo 는 짝수부터 정수까지, 홀수 정수부터 홀수 정수까지"). 개선의 개념을 통해 교차점과 조합을 제품 및 합계와 구별하는 주요 특성은 두 가지 유형의 교차점 / 결합이 동일한 아키타 입을 수정 한 경우에만 형성 될 수 있다는 것입니다. 즉, 교차로와 공용체에 대한 형식 형성 규칙은 다음과 같이 표현 될 수 있습니다 ( "SSAS 을 세련 ") 일반 제품 및 합계에 대한 구성 규칙은 A
    SATASTASATASTA
    SATBSTABSATBS+TA+B
  • 프로그램의 런타임 동작에 대한보다 정확한 어설 션을 만들기 위해 교집합과 공용체를 사용할 수 있으므로 타이핑이 평가 순서에 민감 해지는 것이 당연합니다. 예를 들어, 아래의 논문 (2)(4) 는 교차점과 공용체에 대한 "명백한"(그리고 상당히 표준적인) 타이핑 및 서브 타이핑 규칙이 실제로 ML과 같은 언어에 부적합한 이유를 설명했습니다. 종료). 경고를 받았습니다!
  • 비슷한 이유로 전역 형식 유추는 일반적으로 비실용적이거나 결정 불가능합니다. 실제로, "주 체형"의 전체 개념은 논란의 여지가있다. 함수는 의도 된 용도와 관련이없는 많은 다른 속성들을 만족시킬 수 있기 때문이다 (예를 들어, " foo 는 소수를 7보다 큰 정수로 취한다"). 대신에 교차로와 노조에 대한 실제 접근 방식 ((3) , (4) 참조 )은 일반적으로 추론과 검사의 조합을 기반으로합니다.

위의 포인트 중 일부는 부정적으로 들릴지 모르지만, 그것들을 "콘"이라고 부르지 않고 단지 교차점과 유니온 유형의 "현실"이라고 부릅니다. 반면에 언어 설계 관점에서 교차점과 공용체를 지원하고 올바른 방향으로 만들기 위해 노력해야하는 한 가지 이유는 프로그램의보다 정확한 속성을 상당히 점진적으로 표현할 수 있기 때문입니다. 종속 유형 이론보다 훨씬 덜 급격한 변화.

간단한 독서 목록 :

  1. John C. Reynolds 의 프로그래밍 언어 Forsythe 설계
  2. Rowan Davies와 Frank Pfenning의 교차로 유형과 계산 효과
  3. Rowan Davies의 실제 정제 유형 검사 (논문)
  4. Joshua Dunfield 와 Frank Pfenning의 3 방향 유형 검사

큰 답변, 많은 감사합니다. 이 링크는 특히 유용하고 깨달았습니다. 따라서 올바른 방향으로 안내해 주셔서 감사합니다!
mikera
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.