Bağımlı tür için derleyici bir yorumlayıcıdan çok daha mı zor?


12

Bu öğretici gibi bağımlı türlerin uygulanması hakkında bir şeyler öğreniyorum , ancak çoğu tercüman uyguluyor. Benim sorum, bir derleyici bağımlı tür için uygulamak bir derleyiciden çok daha zor gibi görünüyor, çünkü gerçekten tür denetimi için bağımlı tür bağımsız değişkenleri değerlendirebilirsiniz.

Yani

  • Benim saf izlenimim doğru mu?
  • Doğruysa, bağımlı türü destekleyen statik olarak denetlenmiş bir dilin uygulanmasıyla ilgili herhangi bir örnek / kaynak var mı?

Hayır, bağımlı derleme problemini bilinen bir probleme indirgeyebileceğiniz için: (1) bir tercüman kullanarak programı kontrol edin; (2) programı OCaml / Haskell / ne olursa olsun çıkarmak; (3) kullanarak derleme ocamloptveya GHC :-) (Bu arada Coq ve Agda yaklaşımıdır.)
xrq

Yanıtlar:


13

Bu ilginç bir soru! Anthony'nin cevabının önerdiği gibi, tip kontrolü için terimleri değerlendirmek için zaten bir tercümanınız olması koşuluyla , bağımlı olmayan bir işlevsel dili derlemek için olağan yaklaşımları kullanabilirsiniz .

Edwin Brady'nin benimsediği yaklaşım budur. Şimdi bu kavramsal olarak daha basit, ancak tip kontrolü yaparken derlemenin hız avantajlarını kaybediyor. Bu birkaç şekilde ele alınmıştır.

İlk olarak, dönüşüm kontrolünü gerçekleştirmek için terimleri bayt koduna anında derleyen sanal bir makine uygulanabilir. Bu, Benjamin Gregoirevm_compute tarafından Coq'ta uygulanan arkasındaki fikir . Görünüşe göre orada da bu tam olarak bu konuda Dirk Kleeblatt tarafından tez, ancak gerçek makine koduna ziyade sanal makine aşağı.

İkincisi, daha geleneksel bir dilde kod üretilebilir; bu, yürütüldükten sonra, bağımlı olarak yazılan bir programı yazmak için gerekli olan tüm dönüşümleri kontrol eder. Bu, bir Agda modülünü yazmak için Haskell'i kullanabileceğimiz anlamına gelir. Kod derlenebilir ve çalıştırılabilir ve kabul ederse, bağımlı türdeki kodun iyi yazıldığı varsayılabilir (kısıtlama uygulaması ve derleyici hataları). İlk olarak Mathieu Boesflug tarafından önerilen bu yaklaşımı duydum .

*


1
Biraz dil-cheeck: tip kontrolünü yapan bir tercümanınız varsa neden bir derleyici yazmaya uğraşasınız ki? Sonuçta, bağımlı olarak yazılan programlama dillerinin çoğu (hepsi?) Ciddi kullanıcıları, dili bir kanıt asistanı olarak kullanarak yalnızca tür denetleyicisine önem verir. Kesinlikle hiçbir zaman Agda veya Coq programlarımı hiç çalıştırmadım. Hızı önemsiyorsanız, tür dönüşümlerini derlemek istemez miydiniz?
Martin Berger

2
Çözüm 2 ve 3 bu sorunu ele alır: iyi yazım denetimi yapan (ve özellikle tür dönüşümleri gerçekleştiren) kodu derlersiniz. İkinci notum, bazı durumlarda bağımlı olarak yazılan kodu çalıştırmak istemenizdir (bkz. Idris, Ur / Web).
cody

1
Ayrıca: belirli bir dereceye kadar, çözüm 1, yorumlayıcı ve derleyici arasındaki çizgileri bulanıklaştırarak da bunu ele alır.
cody

1
Futurama projeksiyon tekniğinin yorumlayıcıyı hızlandırmak için kullanıp kullanamayacağını ve derleyici ile etkili bir şekilde sonuçlanabileceğini merak ediyorum.
Steven Shaw

1

10

Edwin Brady'nin doktora tezi , bağımlı tipte bir programlama dili için bir derleyicinin nasıl oluşturulacağını özetlemektedir. Ben bir uzman değilim, ama Sistem F benzeri bir derleyici uygulamaktan çok daha zor olmadığını söyleyebilirim. İlkelerin birçoğu oldukça benzerdir ve bazıları aynıdır (örneğin, süper birleştirici derlemesi.) Tez, diğer birçok endişeyi de kapsamaktadır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.