GHC 코어 읽기


193

핵심은 GHC의 중간 언어입니다. Reading Core는 프로그램의 성과를 더 잘 이해하는 데 도움이됩니다. 누군가 Core 읽기에 대한 문서 나 자습서를 요청했지만 많이 찾을 수 없었습니다.

GHC Core를 읽을 수있는 문서는 무엇입니까?

지금까지 찾은 내용은 다음과 같습니다.



skillsmatter.com/skillscasts/… 도 유용 할 것입니다.
Erik Kaplun

답변:


272

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 출력에 정기적으로 나타납니다. 프리 모프 세트는 사전 처리 된 파일 에서 코어 함수 세트로 제공됩니다 .


61
당신이 제공하는 모든 답변은 항상 말도 안되게 완성됩니다. 또 다른 투표권을 유지하십시오. 나는 힙을 기대고있다.
Robert Massaioli

3
Don과 일반 Haskell 커뮤니티가 SO를 통해 발표 한 CC-wiki 문서의 양은 엄청납니다. 모두 좋은 Q와 A를 유지하십시오!
Dan Burton

4
나는 그것이 언급 되었다는 것을 알고 있지만 , 대답에서 ghc-core 의 유용성 이 강조되어야 한다고 생각합니다 .
Nikita Volkov

24

팁 : 유형 주석과 강제에 신경 쓰지 않으면 옵션 -ddump-simpl과 함께 사용하십시오 -dsuppress-all. 코어 출력은 훨씬 더 읽기 쉬워야합니다.


5
-dsuppress-all정말 유용합니다. -dsuppress-coercions캐스트 만 제거하려는 경우 에도 사용할 수 있습니다 (주변에 많은 새로운 유형이있을 때 유용함).
tibbe

8

Don이 언급 한 것처럼 GHC 핵심 언어는 아니지만 STG 언어는 매우 유사합니다. 나는 최근에 STG 언어 + 기계의 유형 안전을 증명하는 연습을 겪은 후 코어를 쉽게 이해할 수 있음을 발견했습니다.

STG를 배우기 위해 사용한 텍스트는 접근하기 쉽습니다. 스톡 하드웨어에 게으른 기능 언어 구현 : Simon Peyton-Jones 의 척추없는 태그없는 G- 머신 . 이 논문의 대부분은 구현 세부 사항에 관한 것이지만, 특히 4 절은 반 직관적 인 설계 결정에 동기를 부여하고 map.


STG는 Core보다 훨씬 낮은 수준입니다. 컴파일 파이프 라인은 다음과 같습니다. Haskell-> Core-> STG-> C---> Machine Code
Akangka

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