콜 사이트 기반 유형 유추에 대한 연구?


9

함수 호출 사이트의 정보를 사용하여 형식 정보를 계산하는 전체 프로그램 형식 검사 및 형식 추론 시스템에 대해 자세히 배우려고합니다 (함수 본문을 사용하는 표준 방법 외에도). 예를 들어, 그러한 알고리즘은 foo(1)함수 foo가 정수 인수 를 취하는 것으로 추론 하기 위해 함수 호출을 사용할 수 있습니다 . 분명히 이것은 추론을 복잡하게 만들고 수표를 모듈화하지 않게 만듭니다.

어쨌든, 나는이 접근법에 대한 연구를 찾는 데 운이 없었습니다. 아마도 내가 말하는 것에 대해 올바른 용어를 알지 못하기 때문일 것입니다. 어떤 포인터?


내가 실수하지 않는 한, 당신이 묘사하는 것은 양방향 유형 추론의 힌트를 가지고 있습니다. 그러나 당신이하려는 일을 설명하면 명확해질 수 있습니다.
Dominic Mulligan

다형성 함수를 전문화 할 방법을 찾고 있기 때문에 묻고 있습니까?
nponeccop

나는 주로 타입 시스템에 대해 더 많이 배우려고 노력하고 있습니다. 그렇습니다. 다형성 함수 (및 OO 언어의 메소드 호출과 같은 것)를 처리하는 방법에 대해 주로 생각하고있었습니다. 이에 대한 올바른 용어를 찾으려고 노력하고 있습니다.
Derek Thurn

답변:


11

형식 유추가있는 거의 모든 시스템은 콜 사이트 정보를 사용하여이를 수행합니다. 예로는 표준 ML, OCaml, F # 및 Haskell이 있습니다. 다른 많은 언어는 호출 사이트 정보를 사용하여 Java, C #, Scala 및 Typed Racket과 같은 유형 매개 변수 인스턴스화를 유추합니다. 이것은 종종 "Local Type Inference"라는 이름으로갑니다.

나는 당신이 찾고있는 것을 "유형 추론"이라고 설명 할 것이며, 아마도 "Hindley-Milner"시스템으로 알려진 것을 찾아보아야 할 것입니다. Wikipedia 페이지 는 합리적인 소개와 원본 논문에 대한 정보를 제공합니다.

Local Type Inference의 시작은 TOPLAS 2000 버전 ( ACM , PDF ) 에서 가장 잘 읽힌 Pierce and Turner의 원본 용지 입니다.


Pierce and Turner 논문은 매우 감사했습니다. 코드에서 설명하는 알고리즘의 최소 구현에 대해 알고 있습니까? 나는 그것이 존재한다면 그것을 보는 것도 매우 흥미로울 것이라고 생각합니다.
Derek Thurn

나는 최소한의 구현을 모른다. Typed Racket에는 하나, Scala에는 하나가 있지만 둘 다 훨씬 더 복잡한 알고리즘을 구현합니다.
Sam Tobin-Hochstadt

0

당신은 당신에게 뭔가를 줄 수있는 교차 형식의 타입 시스템에서 좀 걸릴 수 있습니다 a :: Int -> Int | Bool -> Bool당신은 두 전문 것을 알 수 있도록, Int그리고 Bool충분한, 또는 실제를 수집하는 제어 흐름 분석 한 다음 가장 일반적인 유형을 추론하는 일반적인 형식 유추를 사용하는 타입 인수. 실제로 하이브리드 접근법이 있습니다 (CFA는 유형 시스템으로 표현되며 그 반대도 마찬가지 임).

가장 일반적인 유형 대신 가장 일반적인 유형을 유추하는 연구가 있지만 그 사실을 모르겠습니다.

다형성을 구현하는 기술에 관해서는, 1) 전문화 (C ++ 템플릿 생각) 2) 균일 한 표현 가정 (void *를 가진 C 스타일 모음 생각)이라는 두 가지 솔루션이 존재합니다.

2의 경우 유형 검사 중에 콜 사이트에서 유형이 필요하지 않으며 별도의 컴파일을 더 쉽게 지원할 수 있습니다.

여기서 매개 변수 다형성에 대해 이야기하고 있으며 OO 가상 메소드 호출은 하위 유형 다형성이라고하는 것과 완전히 다릅니다. C ++ 템플릿은 또 다른 형태의 다형성 인 파라 메트릭 다형성 및 오리 입력과 같은 것을 모두 지원합니다.


1
"OO 가상 메소드 호출은 ad-hoc 다형성이라고하는 완전히 다른 것입니다."ad-hoc 다형성은 과부하의 또 다른 이름입니다. 하위 유형 다형성과 혼동하는 것 같습니다.
Radu GRIGore

그러나 서브 클래스는 반드시 서브 타입 일 필요는 없습니다. 그렇지 않습니까? 예를 들어 하위 유형의 경우 LSP가 보유해야합니다.
nponeccop

1
사실이지만 요점 옆에 있습니다. "아형 다형성"은 표준 용어입니다. 자세한 내용은 en.wikipedia.org/wiki/Subtype_polymorphism 을 참조하십시오.
Radu GRIGore
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.