Đọc lõi GHC


193

Cốt lõi là ngôn ngữ trung gian của GHC. Đọc Core có thể giúp bạn hiểu rõ hơn về hiệu suất của chương trình của bạn. Ai đó đã hỏi tôi tài liệu hoặc hướng dẫn về việc đọc Core, nhưng tôi không thể tìm thấy nhiều.

Tài liệu nào có sẵn để đọc GHC Core?

Đây là những gì tôi đã tìm thấy cho đến nay:



Câu trả lời:


272

GHC Core là ngôn ngữ System FC mà tất cả Haskell được dịch. Ngữ pháp (gần đúng) cho Core được đưa ra bởi:

nhập mô tả hình ảnh ở đây

Core có liên quan chặt chẽ với Hệ thống F đơn giản và được biết đến nhiều hơn . Tất cả các phép biến đổi mà GHC thực hiện ở cấp Lõi là các phép tái cấu trúc bảo toàn kiểu của biểu diễn Lõi này, để cải thiện hiệu suất. Và, không quá nổi tiếng, bạn có thể viết trực tiếp trong Core để lập trình GHC.

GHC Core phù hợp với đường ống trình biên dịch (như năm 2002, sans-LLVM và CMM):

nhập mô tả hình ảnh ở đây

Các tài liệu chính để tìm hiểu về GHC Core là:

Tài liệu liên quan có thể hỗ trợ sự hiểu biết:

  • Đầu ra lõi GHC -fext
  • Tôi đã dành rất nhiều thời gian để học Core bằng cách đọc nguồn GHC. Một số được mô tả trong luận án đại học của tôi từ năm 2002, từ trang 16.
  • Từ việc sử dụng công cụ ghc-core , để tạo Core theo định dạng tôi thấy hài lòng.

Lần lượt lõi được dịch sang mã STG, trông giống như:

nhập mô tả hình ảnh ở đây

Các tên vui nhộn trong Core được mã hóa trong "Mã hóa Z":

nhập mô tả hình ảnh ở đây

Các loại và loại của GHC Core (từ giấy của Tolmach):

nhập mô tả hình ảnh ở đây

Cuối cùng, GHC của primops xuất hiện thường xuyên trong đầu ra GHC Core, khi bạn đã được tối ưu hóa Haskell của bạn xuống đến các hướng dẫn cơ bản GHC biết về. Tập hợp gốc được đưa ra dưới dạng tập hợp các hàm Core trong tệp được xử lý trước.


61
Mỗi câu trả lời bạn đưa ra luôn luôn hoàn thành một cách lố bịch. Có một phiếu bầu khác và giữ nó lên; Tôi đang nghiêng đống.
Robert Massaioli

3
Số lượng tài liệu CC-wiki mà Don và cộng đồng Haskell nói chung đã phát hành thông qua SO là đáng kinh ngạc. Giữ thành Q tốt và A, mọi người!
Dan Burton

4
Tôi biết nó đã được đề cập, nhưng tôi nghĩ rằng tính hữu ích của ghc-core nên được nhấn mạnh trong câu trả lời.
Nikita Volkov

24

Mẹo: Nếu bạn không quan tâm đến chú thích loại và ép buộc sử dụng -ddump-simplcùng với -dsuppress-alltùy chọn. Đầu ra Core nên dễ đọc hơn nhiều.


5
-dsuppress-allthực sự hữu ích Bạn cũng có thể sử dụng -dsuppress-coercionsnếu bạn chỉ muốn thoát khỏi phôi (hữu ích khi có nhiều kiểu mới xung quanh).
tibbe

8

Mặc dù không chính xác là ngôn ngữ GHC Core, vì Don đề cập đến ngôn ngữ STG khá giống nhau. Gần đây tôi đã trải qua bài tập chứng minh tính an toàn của loại ngôn ngữ STG + và sau đó tôi thấy tôi có thể hiểu Core dễ dàng.

Văn bản tôi đã sử dụng để học STG khá dễ tiếp cận: Thực hiện các ngôn ngữ chức năng lười biếng trên phần cứng chứng khoán: Máy G không có thẻ không có thẻ của Simon Peyton-Jones. Phần lớn bài viết liên quan đến các chi tiết triển khai, nhưng tôi khuyên bạn nên sử dụng phần 4 như một lời giải thích từ trên xuống dưới của ngôn ngữ STG tạo động lực cho một số quyết định thiết kế phản trực quan và cung cấp các bản dịch của các ví dụ quen thuộc như map.


STG là một cấp độ thấp hơn nhiều so với Core. Đường ống biên dịch là: Haskell -> Core -> STG -> C-- -> Mã máy
Akangka

3

"Một đại diện bên ngoài cho ngôn ngữ cốt lõi GHC" là một tài liệu có thể được tìm thấy trong quá trình cài đặt ghc ( share/doc/ghc/core.pdf) hoặc trên internet .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.