[performance] GHC 코어 읽기

핵심은 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의 -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.


답변

“GHC 핵심 언어에 대한 외부 표현”은 ghc ( share/doc/ghc/core.pdf) 설치 또는 인터넷 에서 찾을 수있는 문서입니다 .


답변