모듈 식 컴파일러에서 Pottier 및 Gauthier의 다형성 비 기능화를 사용한 사람이 있습니까?


15

비 기능화 는 고차 프로그램을 1 차 프로그램으로 변환하는 프로그램 변환입니다. 아이디어는 프로그램이 주어질 때, 람다-추상어가 아주 많기 때문에 각 람다를 id로, 각 함수 응용 프로그램을 해당 id에서 분기되는 적용 프로 시저에 대한 호출로 바꿀 수 있다는 것입니다. 이것은 때때로 함수형 언어를위한 컴파일러에서 사용 되지만, 기능 해제는 전체 프로그램 변환 (정적으로 프로그램의 모든 함수를 알아야 함)이라는 사실에 의해 적용 가능성이 제한되므로 전체 프로그램 컴파일러 만 사용합니다. 그것.

그러나 Pottier와 Gauthier 는 GADT와 관련된보다 정교한 타이핑을 사용하여 다형성 유형의 기능 해제 알고리즘을 제공합니다. 이제 인코딩이 주어지면 태그가 아니지만 고차 함수를 포함하는 람다 데이터 유형에 모든 경우를 추가 할 수 있습니다. 즉, 인코딩을 사용하여 모듈별로 기능을 해제 할 수 있어야합니다.

누구 든지이 작업을 수행 하고이 아이디어를 사용하여 컴파일러를 알려 주었습니까? (토이 컴파일러는 괜찮으며 실제로 선호됩니다.)

답변:


6

하나의 접근 방식은

Georgios Fourtounis와 Nikolaos S. Papaspyrou. 비 기능화 컴파일러에서 개별 컴파일 지원. 슬레이트 2013.

@gasche가 언급했듯이 :

문제에 대한 다른 접근 방식은 각 모듈이 자체 "비 기능화 된 기능"유형 및 디스패처 / 핸들러를 정의 할 수 있다는 점을 고려하는 것입니다.

나는0<나는<나는


4

이제 인코딩이 주어지면 태그가 아니지만 고차 함수를 포함하는 람다 데이터 유형에 모든 경우를 추가 할 수 있습니다. 즉, 인코딩을 사용하여 모듈별로 기능을 해제 할 수 있어야합니다.

여기서 의미하는 바를 좀 더 자세히 설명해 주시겠습니까? 기본 사례를 추가하는 방법 (데이터 유형, 디스패치 기능의 패턴 일치 또는 둘 다)이 설명 된 방식으로 모듈화에 어떻게 도움이되는지 이해하지 못합니다. 그건 그렇고, 왜 "모듈 별"기준으로 정확히 의미합니까?

선택적 모듈화를 위해 주어진 모듈 / 프로그램 내에서 "기본 사례"가 사용되는 것을 상상할 수 있습니다 . 태그가 아닌 reified 함수 유형에 추가 생성자가 있고 단순히 모든 'a -> 'b함수를 포함하여 함수를 패킹합니다. 이 생성자에서 태그를 제공하는 대신 기능이 작동하지 않을 수 있습니다.

문제에 대한 다른 접근 방식은 각 모듈이 자체 "비 기능화 된 기능"유형 및 디스패처 / 핸들러를 정의 할 수 있다는 점을 고려하는 것입니다. 모듈의 함수 M1는 유형을 M1.arrow가지며 M1.apply등을 사용하여 적용됩니다 . 함수의 1 차 사용에 효과적이지만 고차 함수로 확장 할 수있는 방법은 잘 모르겠습니다 (필요하지 않아야 함) 기능 인수가 어디에서 오는지 알 수 있습니다.) 디스패처에 함수를 번들로 제공하면 간접 함수 호출 영역에 다시 입력됩니다.

마지막으로, 논문에서 전체 프로그램 대 모듈 방식에 대한 간단한 언급을 언급했지만 제안과 어떻게 관련이 있는지는 알 수 없습니다. 그것들이 설명하는 것은 함수와 데이터 타입 (여러 개의 독립적 인 모듈에 걸쳐 정의 될 수있는 함수와 타입)의 "개방 확장"으로 표현됩니다. 이는 링크 타임에 독립 모듈의 분석 / 변환 조합을 연기하여 전체 프로그램 변환의 필요성을 완화 할 수 있다는 사실을 설명하는 ML 방식입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.