핵심은 GHC의 중간 언어입니다. Reading Core는 프로그램의 성과를 더 잘 이해하는 데 도움이됩니다. 누군가 Core 읽기에 대한 문서 나 자습서를 요청했지만 많이 찾을 수 없었습니다.
GHC Core를 읽을 수있는 문서는 무엇입니까?
지금까지 찾은 내용은 다음과 같습니다.
답변
GHC Core는 모든 Haskell이 번역되는 시스템 FC 언어입니다. Core의 대략적인 문법은 다음과 같습니다.
코어는 더 간단하고 잘 알려진 System F 와 밀접한 관련이 있습니다. GHC가 Core 수준에서 수행하는 모든 변환 은 성능을 향상시키기 위해이 Core 표현의 형식 보존 리팩토링입니다. 잘 알려져 있지는 않지만 GHC를 프로그래밍하기 위해 Core로 직접 작성할 수 있습니다.
GHC Core는 컴파일러 파이프 라인에 적합합니다 (2002 년의 sans-LLVM 및 CMM).
GHC Core에 대해 배울 주요 문서는 다음과 같습니다.
- GHC 핵심 언어에 대한 외부 표현 , Tolmach, 2001
- ghc / compiler / CoreSyn , GHC 정의 자체
- Glasgow Haskell Compiler inliner , Peyton Jones 및 Marlow, 1999의 비밀 . 발생 분석 주석에 대한 세부 사항을 포함하여 2.3 절에 설명되어 있습니다.
- 1998 년 Haskell , Peyton Jones 및 Santos 의 변형 기반 옵티 마이저 . Core는 다형성 및 Core의 작동 판독 값에 대한 논의를 포함하여 S3에 설명되어 있습니다.
이해를 도울 수있는 관련 자료 :
- GHC의 -fext 코어 출력
- GHC 소스를 읽음으로써 Core를 배우는 데 많은 시간을 보냈습니다. 일부는 2002 년부터 16 페이지의 학부 논문에 설명되어 있습니다.
- 사용에서 GHC 코어 도구를 내가 기쁘게 찾기 형식으로 코어를 생성합니다.
코어는 다음과 같이 STG 코드로 변환됩니다.
코어의 재미있는 이름은 “Z 인코딩”으로 인코딩됩니다.
GHC 코어의 종류와 종류 (Tolmach의 논문에서) :
마지막으로, GHC가 알고있는 기본 지침에 따라 Haskell을 최적화하면 GHC의 Primops 가 GHC Core 출력에 정기적으로 나타납니다. 프리 모프 세트는 사전 처리 된 파일 에서 코어 함수 세트로 제공됩니다 .
답변
팁 : 유형 주석과 강제에 신경 쓰지 않으면 옵션 -ddump-simpl
과 함께 사용하십시오 -dsuppress-all
. 코어 출력은 훨씬 더 읽기 쉬워야합니다.
답변
Don이 언급 한 것처럼 GHC 핵심 언어는 아니지만 STG 언어는 매우 유사합니다. 나는 최근에 STG 언어 + 기계의 유형 안전을 증명하는 연습을 겪은 후 코어를 쉽게 이해할 수 있음을 발견했습니다.
STG를 배우기 위해 사용한 텍스트는 접근하기 쉽습니다. 스톡 하드웨어에 게으른 기능 언어 구현 : Simon Peyton-Jones 의 척추없는 태그없는 G- 머신 . 이 논문의 대부분은 구현 세부 사항에 관한 것이지만, 특히 4 절은 반 직관적 인 설계 결정에 동기를 부여하고 map
.