2014-04-26 5 views
6

Scheme 컴파일러 Stalin을 살펴 보았습니다. 그것은 크고 복잡합니다. 또한 필자가 올바르게 이해했다면 작성자는 구현 측면을 자세히 설명하는 일련의 논문을 작성하려고했지만 결코 그렇게하지 않을 것입니다.Scheme 컴파일러의 전역 유형 유추 Stalin

스탈린의 측면은 전역 유형 추론입니다 : 프로그램의 다른 위치에서 사용법에 따라 유형을 추론합니다. 스탈린이 실제로 그렇게합니까? 그렇다면 어떻게, 어디에서 코드 기반을 유지합니까? Hindley-Milner 알고리즘의 변형/확장 기능을 사용합니까? README에서

+0

[이 Q/A 쌍을 cstheory.SE에서 보셨습니까] (http://cstheory.stackexchange.com/questions/9765/the-stalin-compiler-brutally-optimizes-but-how) 보셨습니까? 기본적으로 스탈린은 유형에서 "위로"구축 할 필요가 없다고 제안합니다. 이미 스탈린은 가치와 사용법에 관해 * 모든 것을 추론합니다. – Leushenko

+0

@ Leushenko 감사합니다! 나는 당신이 옳다고 생각합니다 :이 컴파일러는 형식의 개념을 건너 뛰고 원시 데이터 형식의 발송 작업을하는 것처럼 보입니다. – yotsov

답변

2

:

스탈린 재귀 조합 유형을 지원하는 소프트 타입 시스템을 사용하여 글로벌 정적 유형 분석을 수행합니다. 스탈린은 형식 선언이없는 임의의 스키마 프로그램에서 각 소스 코드 식에 대해 좁은 또는 심지어 단일 양식을 결정할 수 있습니다. 이를 통해 스탈린은 실행 시간 유형 검사 및 디스 패칭을 종종 생략하거나 을 제거 할 수 있습니다. Stalin도 은 표현 단위로 저수준 표현 선택을합니다. 이렇게하면 에 대한 박스 화되지 않은 기본 머신 데이터 표현을 사용하여 매우 높은 성능의 숫자 코드를 생성하는 모든 단일 유형을 사용할 수 있습니다. 1997 talk by Siskind 가입일

는 :

스탈린 설정 기반 분석 (SBA 일명 0CFA)를 사용하여 추론을 입력 행한다. 이 분석은 polyvariant 절차 분할을 지원하기 위해 추가되었습니다. SBA의 결과는 런타임 유형을 줄이기 위해 사용됩니다. 확인 및 디스 패칭. SBA의 결과는 표현 단위로 하위 수준 표현 선택을 수행하는데도 사용됩니다 ( ). 이것은 의 두 가지 이점이 있습니다. 첫째, 형식 태그는 모노 타입에 대해 제거 될 수 있으며 기본 문자 표현을 기본 컴퓨터 데이터로 사용할 수 있습니다. 둘째로, 복싱은 간접비, 배부 및 교련의 비용을 완화하는 제거 될 수있다 권투와 관련시켰다. 복싱을 제거하려면 변수, 매개 변수, 구조 슬롯 및 벡터 슬롯이 의 데이터 유형에 따라 다른 너비를 가질 수 있도록 런타임 그룹이 필요합니다. 또한, 사용자 정의 구조는 구조가 변경 불가능한 경우에만 unbox 될 수 있습니다. SBA가 확장되어 데이터를 너비와 가변성을 컴파일 타임에 결정합니다.

실제 형식 유추 알고리즘

은 대부분 소스 파일 source/stalin3b.sc에서 구현 될 것으로 보인다.

SBA/0CFA는 Hindley-Milner와 완전히 별개의 알고리즘 인 것으로 보입니다. 그러나 Hindley-Milner는 부드러운 타이핑을 구현하는데도 사용할 수 있습니다.

여기가 더 좋은 description of the 0CFA algorithm입니다.

관련 논문 올린 떨고 '1991 박사 학위 논문 제어 흐름이다 고차원 언어 또는 길들이기 람다 및 플래너의 분석 & 전체 계획 및 소프트에서의 사용 에 대한 Felleisen의 1995 종이 설정 기반 분석을 입력하십시오.