Saya telah belajar sesuatu tentang menerapkan tipe dependen, seperti tutorial ini , tetapi kebanyakan dari mereka menerapkan juru bahasa. Pertanyaan saya adalah, tampaknya menerapkan kompiler untuk tipe dependen jauh lebih sulit daripada kompiler, karena Anda benar-benar dapat mengevaluasi argumen tipe dependen untuk pengecekan tipe.
Begitu
- Apakah kesan naif saya benar?
- Jika benar, ada contoh / sumber daya tentang penerapan bahasa yang diperiksa secara statis yang mendukung tipe dependen?
type-systems
compilers
dependent-type
molikto
sumber
sumber
ocamlopt
atau GHC :-) (Jawaban:
Ini pertanyaan yang menarik! Seperti jawaban Anthony menyarankan, seseorang dapat menggunakan pendekatan biasa untuk menyusun bahasa fungsional yang tidak tergantung, asalkan Anda sudah memiliki juru bahasa untuk mengevaluasi persyaratan untuk pengecekan tipe .
Ini adalah pendekatan yang diambil oleh Edwin Brady. Sekarang ini secara konsep lebih sederhana, tetapi tidak kehilangan keunggulan kecepatan kompilasi ketika melakukan pengecekan tipe. Ini telah dibahas dalam beberapa perilaku.
Pertama, seseorang dapat mengimplementasikan mesin virtual yang mengkompilasi istilah-istilah untuk byte-code on the fly untuk melakukan pemeriksaan konversi. Ini adalah ide di balik
vm_compute
diterapkan dalam Coq oleh Benjamin Gregoire . Rupanya ada juga tesis ini oleh Dirk Kleeblatt pada subjek yang tepat ini, tetapi menurunkan kode mesin yang sebenarnya daripada mesin virtual.Kedua, seseorang dapat menghasilkan kode dalam bahasa yang lebih konvensional yang, setelah dieksekusi, memeriksa semua konversi yang diperlukan untuk mengetik-periksa program yang diketik secara dependen. Ini berarti kita dapat menggunakan Haskell, misalnya, untuk mengetik-periksa modul Agda. Kode dapat dikompilasi dan dijalankan, dan jika diterima, maka kode dalam bahasa tipe dependen dapat diasumsikan diketik dengan baik (pembatasan implementasi dan kesalahan kompiler). Saya pertama kali mendengar pendekatan ini yang disarankan oleh Mathieu Boesflug .
sumber
Tesis PhD Edwin Brady menguraikan bagaimana membangun kompiler untuk bahasa pemrograman yang diketik secara dependen. Saya bukan seorang ahli, tetapi saya akan mengatakan itu tidak terlalu sulit daripada mengimplementasikan kompiler seperti Sistem F. Banyak prinsip yang sangat mirip dan ada yang sama (misalnya kompilasi supercombinator.) Tesis ini mencakup banyak masalah lain.
sumber