어떤 연구 언어가 Haskell보다 강력한 유형 체계를 가지고 있으며 그 이유는 무엇입니까?


14

여기에 나는 읽기 :

Haskell은 확실히 가장 진보 된 유형 시스템을 가지고 있지 않지만 (연구 언어를 세어도 가까이 있지는 않지만) 실제로 프로덕션에 사용되는 모든 언어 중에서 Haskell이 최상위에있을 것입니다.

그래서 두 가지를 묻습니다.

  1. 어떤 연구 언어가 Haskell보다 더 강력한 유형 시스템을 가지고 있는지;
  2. 그들은 무엇을 개선합니까?

나는 단지 프로그래머이기 때문에 유형 이론에 사용되는 많은 수학적 객체를 모른다. 가능하다면 부드러운 설명을 제공하십시오.


3
"더 나은"무엇입니까?
데이비드 리처 비

2
@DavidRicherby 더 강력한 유형 시스템
Виталий Олегович

2
타입 시스템이 Turing-complete라는 것이 입증되면 정말 중요합니까? ;-)
DevSolar

7
튜링 기계는 튜링이 완벽합니다. 일상적인 프로그래밍 작업에 사용하지 않겠습니까?
gallais

4
원문에는 고급 시스템이있는 언어가 언급되어 있으며, '고급'이라는 주장이 유형 시스템에 대해 더 나쁘거나 더 나쁘다는 주장은하지 않습니다.
Peteris

답변:


25

이 질문은 "더 나은"이라는 주관적인 정의에 의존하기 때문에 다소 문제가 있습니다.

Agda , IdrisCoq 와 같은 종속 유형 언어 는 Haskell보다 강력한 유형 시스템을 갖습니다. 즉, 이러한 언어의 유형을 사용하여 Haskell보다 코드에 대해 더 많은 속성을 엄격하게 증명할 수 있습니다. 즉, 더 잘못된 프로그램이 잡힐 수 있습니다.

그러나 이것은 가격에 따른다 : 타입 추론과 주어진 타입의 값이 존재하는지 테스트하는 것은 더 이상 가능하지 않다. 즉, 이러한 언어의 경우 코드에 명시 적으로 주석을 달아야합니다. 본질적으로 이것은 코드에 대한 자신의 정확성 증명을 작성하는 것으로 요약됩니다.

이 언어들은 하스켈보다 "더 나은"언어입니까? 코드에 대한 고급 정확성 증명을 확인할 수 있지만 Haskell이 할 수있는 방식으로 코드 속성을 자동으로 증명할 수는 없습니다.

Haskell보다 "더 나은"다른 연구 언어는 LiquidHaskell입니다 입니다. 이것은 기본적으로 특수 주석에서 파싱 된 정제 유형이 맨 위에 고정 된 Haskell입니다.

구체화 유형을 사용하면 속성이있는 유형을 구체화 할 수 있습니다. 예를 들어을 사용하는 대신 모든 양의 정수 유형을 Int지정 {i : Int | i > 0}하여을 지정할 수 있습니다 . 구체화 유형을 사용하여 유형 유추를 결정할 수 있지만 종속 유형을 사용하는 경우와 마찬가지로 정확도 특성을 거의 입증 할 수는 없습니다.

다른 정제 유형 시스템이 있지만 그중 어느 것에도 익숙하지 않습니다.


감사합니다! 하스켈 유형 시스템이 여전히 유형 유추를 허용하는 가장 강력한 시스템임을 증명할 수 있습니까?
Виталий Олегович

3
Haskell은 타입 추론을 허용하는 가장 강력하지 않습니다. 앞서 언급 한 구체화 유형은 유형 유추를 허용하며, 약간 더 강력한 유형 시스템을 허용하는 많은 GHC 확장이 Haskell에 추가되고 있습니다.
jmite

4
이 외에도 많은 유형의 시스템이 있으며 비교할 수없는 시스템도 많습니다. 어떤 방식으로 Haskell보다 강력하지만 다른 방식에서는 Haskell보다 약합니다. 가장 강한 유형에서 가장 약한 유형의 시스템은 선형으로 정렬되지 않습니다.
jmite

5
이제 형식 유추를 허용하는 가장 강력한 형식 시스템이 없음을 증명하고 싶습니다. 쓸모없는 사실을 증명해야합니다.
Andrej Bauer

1
사실은 나에게 쓸모없는 것 같습니다. 형식 유추를 가진 가장 강력한 형식 시스템이 있다는 사실에 특히 큰 관심이있을 것입니다. 특히 구현 가능한 것으로 판명되었습니다.
rationalis

10

ML 언어 군 (StandardML, OCaml )은 Haskell과 유사한 전통에서 유래하므로 유사한 유형 시스템을 가지고 있습니다. 그러나 Haskell과 정확히 동일하지는 않으며 일부 기능이 사용자에게 더 적합 할 수 있습니다 ( 프로그래밍 언어의 유형 시스템이 인간 을 돕기 위해 존재하므로 객관적으로 더 나은 유형 시스템 은 없습니다 ). 하스켈이 가지고 있지 않은 (하지만 이에 상응하는 유사한 개념을 가지고있을 수있는) OCaml의 일부 기능은 다음과 같습니다.

  1. 다형성 변형 .
  2. 깊이 하위 유형클래스있는 개체 .
  3. Functors- 모듈 (Haskell에는 모듈이 있음)과 심지어 일류 모듈 사이의 맵

그리고 이것을 ML-Haskell 총격전으로 바꿀 필요가 없습니다. 그렇지 않으면 Bob Harper의 블로그 게시물에 링크를 시작할 것입니다. ;-)


9

연구 언어 청소고유 유형 이 있기 때문에 Haskell보다 더 나은 유형 시스템을 가지고 있습니다 . 고유성 유형의 아이디어는 선형 논리 와 밀접한 관련이 있습니다. , 이는 고전 논리보다 자원 제한 "실제 세계"에 더 가깝습니다.

연구 방지 언어 인 Rust 는 고전적인 순수 타입 시스템보다 "실제 세계"에 더 가까운 독특한 기능을 가진 타입 시스템을 가지고 있습니다. 타입 시스템에 영향을 미치는 대부분의 아이디어는 존재하기 훨씬 전에 Rust와 완전히 독립적으로 출판되었습니다. 그러나 이러한 오래된 아이디어가 결합되는 방식은 독특하며 알려진 허점과 불일치가 존재하더라도 실제 연구 간행물이 필요합니다.


3
어떻게 든 "발표 된"과 "연구 안 함"은 잘 어울리지 않습니다.
Andrej Bauer

1
독창성은 확실히 흥미로운 개념이지만 IMO는 유형 시스템 기능이 아니라 시맨틱에 관한 것입니다. 그리고 이것이 실제로 타입 시스템을 엄격하게 개선 합니까? Clean은 Haskell이 유형 시스템, 상위 순위 다형성 등에 추가 한 새로운 기능을 수행 할 수 있습니까? 유형 시스템이 이미 고유성을 처리해야하는 경우에도 이러한 기능 중 일부가 가능합니까?
leftaroundabout

1
@leftaroundabout 고유성 유형이나 선형 논리에 얼마나 익숙하십니까? x에 고유 한 유형이 있으면 예를 들어 f (x, x)가 제대로 입력되지 않습니다. 고유성 유형도 지원하도록 Haskell을 확장 할 수 있습니다. C ++의 이동 의미는 기존 유형 시스템에서 고유 유형에 대한 지원을 개선하는 것으로 볼 수도 있습니다.
토마스 클림 펠

저는 C ++ 이동 의미론에 익숙합니다. 아마도 이것이 고유성에 대한 인상이“많은 유형 시스템 문제”가 아닌 이유 일 것입니다. 내가 흥미로운 점은, 바깥으로 전파되는 고유성 유형이 고급 유형 시스템의 다른 기능을 방해합니까?
leftaroundabout

1
@leftaroundabout Rvalue 참조는 나에게 타입 시스템 일처럼 들린다. 고유 유형이 다른 고급 유형 기능을 방해해야하는 이유는 무엇입니까? 최악의 경우 이러한 고급 기능은 고유 유형에 적용되지 않습니다. 물론, 고유성 유형과 같은 "실제 세계"기능은 깊이가 아니라 폭을 넓히는 것을 의미하며, 더 넓은 시간을 보내기 위해 보낸 시간은 더 이상 더 깊게 갈 수 없습니다. 그러나 나는 고유성 유형이 이론과 실제 사이의 균형을 잘 유지한다는 인상을 받았기 때문에 시간을 잘 보낼 것이라고 생각합니다.
토마스 클림 펠
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.