กำลังอ่าน GHC Core


193

หลักคือภาษากลางของ GHC Reading Core สามารถช่วยให้คุณเข้าใจประสิทธิภาพของโปรแกรมได้ดีขึ้น มีคนถามหาเอกสารหรือแบบฝึกหัดเกี่ยวกับการอ่าน Core แต่ฉันไม่สามารถหาได้มากนัก

มีเอกสารอะไรบ้างสำหรับการอ่าน GHC Core

นี่คือสิ่งที่ฉันพบ:



skillsmatter.com/skillscast//อาจเป็นประโยชน์เช่นกัน
Erik Kaplun

คำตอบ:


272

GHC Core คือภาษาระบบ FCซึ่งแปล Haskell ทั้งหมด ไวยากรณ์ (โดยประมาณ) สำหรับ Core นั้นมอบให้โดย:

ป้อนคำอธิบายรูปภาพที่นี่

แกนกลางมีความสัมพันธ์อย่างใกล้ชิดกับSystem F ที่ง่ายและเป็นที่รู้จักมากขึ้น การแปลงทั้งหมดที่GHC ทำในระดับแกนกลางนั้นเป็นการปรับโครงสร้างประเภทการอนุรักษ์ของการเป็นตัวแทนแกนนี้เพื่อปรับปรุงประสิทธิภาพ และไม่เป็นที่รู้จักกันดีคุณสามารถเขียนโดยตรงใน Core เพื่อเขียนโปรแกรม GHC

GHC Core เหมาะกับท่อส่งคอมไพเลอร์ (เหมือนเดิมในปี 2002, sans-LLVM และ CMM):

ป้อนคำอธิบายรูปภาพที่นี่

เอกสารหลักเพื่อเรียนรู้เกี่ยวกับ GHC Core คือ:

วัสดุที่เกี่ยวข้องที่สามารถช่วยให้เข้าใจได้:

หลักในทางกลับกันจะถูกแปลเป็นรหัส STG ซึ่งดูเหมือนว่า:

ป้อนคำอธิบายรูปภาพที่นี่

ชื่อตลกใน Core ถูกเข้ารหัสใน "Z-encoding":

ป้อนคำอธิบายรูปภาพที่นี่

ประเภทและชนิดของ GHC Core (จากกระดาษของ Tolmach):

ป้อนคำอธิบายรูปภาพที่นี่

ในที่สุดพรีเซ็นต์ของ GHC จะปรากฏเป็นประจำในเอาต์พุต GHC Core เมื่อคุณปรับปรุง Haskell ของคุณให้เป็นคำสั่งพื้นฐานที่ GHC รู้ ชุด primop ถูกกำหนดให้เป็นชุดของฟังก์ชั่นคอร์ในไฟล์ที่ประมวลผลล่วงหน้า


61
ทุกคำตอบเดียวที่คุณให้นั้นสมบูรณ์อยู่เสมอ มีอีกโหวตและให้ทัน; ฉันกำลังกองพะเนิน
Robert Massaioli

3
จำนวนเอกสาร CC-wiki ที่ Don และชุมชน Haskell ทั่วไปเผยแพร่ผ่านทาง SO นั้นมีจำนวนมาก ติดตาม Q's และ A ที่ดีทุกคน!
Dan Burton

4
ฉันรู้ว่ามันถูกกล่าวถึง แต่ฉันคิดว่าประโยชน์ของghc-coreควรเน้นในคำตอบ
Nikita Volkov

24

เคล็ดลับ: หากคุณไม่สนใจคำอธิบายประกอบประเภทและการข่มขู่ใช้-ddump-simplร่วมกับ-dsuppress-allตัวเลือก ผลลัพธ์หลักควรอ่านได้มากขึ้น


5
-dsuppress-allมีประโยชน์จริงๆ คุณสามารถใช้-dsuppress-coercionsถ้าคุณต้องการกำจัด casts เท่านั้น (มีประโยชน์เมื่อมีชนิดใหม่ ๆ อยู่มากมาย)
tibbe

8

แม้ว่าจะไม่ตรงกับภาษา GHC Core อย่างที่ดอนพูดถึงภาษา STG นั้นค่อนข้างคล้ายกัน ฉันเพิ่งผ่านการฝึกเพื่อพิสูจน์ความปลอดภัยของเครื่อง + ภาษา STG และหลังจากนั้นฉันก็พบว่าฉันสามารถเข้าใจ Core ได้อย่างง่ายดาย

ข้อความที่ฉันใช้ในการเรียนรู้ STG นั้นสามารถเข้าถึงได้ค่อนข้างง่าย: การใช้ภาษาฟังก์ชั่นขี้เกียจบนฮาร์ดแวร์สต็อก: เครื่อง G-Spinless Taglessโดย Simon Peyton-Jones มากของกระดาษที่เกี่ยวข้องกับรายละเอียดการปฏิบัติ แต่ผมขอแนะนำส่วนที่ 4 โดยเฉพาะอย่างยิ่งเป็นคำอธิบายด้านบนลงด้านล่างของภาษา STG mapที่ให้แรงจูงใจสำหรับบางส่วนของการตัดสินใจการออกแบบเคาน์เตอร์และให้คำแปลของตัวอย่างที่คุ้นเคยเช่น


STG นั้นต่ำกว่าคอร์มาก ไปป์ไลน์การรวบรวมคือ: Haskell -> Core -> STG -> C-- -> รหัสเครื่อง
Akangka

3

"ภายนอกเป็นตัวแทนสำหรับ GHC หลักภาษา" เป็นเอกสารที่ซึ่งสามารถพบได้ในการติดตั้ง GHC (คนshare/doc/ghc/core.pdf) หรือบนอินเทอร์เน็ต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.