Membaca GHC Core

193

Core adalah bahasa perantara GHC. Membaca Core dapat membantu Anda lebih memahami kinerja program Anda. Seseorang meminta saya untuk dokumentasi atau tutorial tentang membaca Core, tetapi saya tidak dapat menemukan banyak.

Dokumentasi apa yang tersedia untuk membaca GHC Core?

Inilah yang saya temukan sejauh ini:

Tibbe
sumber
skillsmatter.com/skillscasts/… mungkin berguna juga.
Erik Kaplun

Jawaban:

272

GHC Core adalah bahasa System FC ke mana semua Haskell diterjemahkan. Tata bahasa (perkiraan) untuk Core diberikan oleh:

masukkan deskripsi gambar di sini

Core terkait erat dengan Sistem F yang lebih sederhana dan lebih dikenal . Semua transformasi yang dilakukan GHC pada level Core adalah refactoring pelestarian tipe representasi Core ini, untuk meningkatkan kinerja. Dan, tidak begitu terkenal, Anda dapat menulis langsung di Core untuk memprogram GHC.

GHC Core cocok dalam pipa penyusun (seperti pada tahun 2002, sans-LLVM dan CMM):

masukkan deskripsi gambar di sini

Dokumen utama untuk mempelajari tentang GHC Core adalah:

Materi terkait yang dapat membantu pemahaman:

  • The GHC -fext-core keluaran
  • Saya menghabiskan banyak waktu mempelajari Core dengan membaca sumber GHC. Beberapa dijelaskan dalam tesis sarjana saya dari tahun 2002, dari halaman 16.
  • Dari menggunakan alat ghc-core , untuk menghasilkan Core dalam format yang menurut saya menyenangkan.

Core pada gilirannya diterjemahkan ke dalam kode STG, yang terlihat seperti:

masukkan deskripsi gambar di sini

Nama-nama lucu di Core dikodekan dalam "Z-encoding":

masukkan deskripsi gambar di sini

Jenis dan jenis GHC Core (dari kertas Tolmach):

masukkan deskripsi gambar di sini

Akhirnya, primop GHC muncul secara teratur dalam output GHC Core, ketika Anda telah mengoptimalkan Haskell Anda ke instruksi dasar yang diketahui GHC. Set primop diberikan sebagai seperangkat fungsi Core dalam file pra-diproses.

Don Stewart
sumber
61
Setiap jawaban yang Anda berikan selalu sangat lengkap. Dapatkan suara lagi dan teruskan; Saya bersandar tumpukan.
Robert Massaioli
3
Jumlah dokumentasi CC-wiki yang Don dan komunitas Haskell umum telah dirilis melalui SO sangat mengejutkan. Pertahankan Q dan A yang baik, semuanya!
Dan Burton
4
Saya tahu itu disebutkan, tapi saya pikir kegunaan ghc-core harus ditekankan dalam jawaban.
Nikita Volkov
24

Tip: Jika Anda tidak peduli tentang jenis penjelasan dan coercions menggunakan -ddump-simplbersama-sama dengan -dsuppress-allpilihan. Output Core harus jauh lebih mudah dibaca.

nominolo
sumber
5
-dsuppress-allsangat berguna. Anda juga dapat menggunakan -dsuppress-coercionsjika Anda hanya ingin membuang gips (berguna ketika ada banyak jenis baru di sekitar).
tibbe
8

Meskipun tidak persis bahasa Inti GHC, seperti Don menyebutkan bahasa STG sangat mirip. Saya baru-baru ini menjalani latihan membuktikan jenis keamanan mesin + bahasa STG, dan setelah itu saya menemukan saya bisa memahami Core dengan mudah.

Teks yang saya gunakan untuk belajar STG cukup mudah diakses: Menerapkan Bahasa Fungsional Malas pada Perangkat Keras Saham: Mesin G-tag tanpa kunci oleh Simon Peyton-Jones. Sebagian besar makalah ini berkaitan dengan detail implementasi, tetapi saya merekomendasikan bagian 4 khususnya sebagai penjelasan top-to-bottom dari bahasa STG yang memberikan motivasi untuk beberapa keputusan desain kontra-intuitif dan menyediakan terjemahan dari contoh-contoh yang sudah dikenal map.

acfoltzer
sumber
STG adalah level yang jauh lebih rendah dari Core. Pipa kompilasi adalah: Haskell -> Core -> STG -> C-- -> Kode Mesin
Akangka
3

"Representasi Eksternal untuk Bahasa Inti GHC" adalah dokumen yang dapat ditemukan dalam pemasangan ghc ( share/doc/ghc/core.pdf) atau di internet .

Roman Cheplyaka
sumber