2016-04-04 15 views
5

Haskell tiplerinin her zaman çalışma zamanından önce silineceğinden emin olabilirsiniz. Agda durumunda ne olur?Türleri çalışma zamanından önce silinir

Bağımlı tür bilgileri çalışma zamanına geçiriliyor mu?

+3

Agda'nın ne yaptığından emin değilim, ancak İdris mümkün olabildiğince uzaklaşmaya çalışıyor. Agda hakkında emin değilim ama söyleyebildiğim kadar çok şey yapmak kesinlikle iyi bir şey olurdu. – Jake

cevap

4

Çalışma zamanı nedir? En az dört arka uç vardır: GHC'yi (MAlonzo olarak adlandırılır), UHC'yi, Epic'i ve JavaScript'i hedefleyenler. Bazı başlangıç ​​ayrıntıları the Agda wiki'da bulunabilir: Epic arka ucunun bu türdeki silmeyi veya bu paper'da ("3.3 Silme" bölümü) nasıl olduğunu okuyabilirsiniz. Kısacası, Epic ve UHC arka planları, tam olarak uygulanan bir işlevin aldığı tüm türleri siler, ancak bir programın semantiğini değiştirebildiğinden (UHC arka ucuna ilişkin paper'dan alıntılanan) tam silme işlemi gerçekleştirmez:

Tip çeviri

kalan terimler Π, Set ve Level türü sadece kontrol için anlamlı vardır. Agda'da, Set veya Level türlerinin bir değeri incelenemez veya desen eşleştirilemez. Agda, 'un bu türden herhangi bir değeri gözlemlemesini zorlaştırdığı için, çalışma zamanı semantiklerini etkileyemez. Bir programı yürütmek için, birim değeri ile bu değerlerin tüm oluşumlarını değiştirmek için güvenlidir.

Ayrıca bu türünün tüm değerlerini tamamen kaldırmak için cazip olabilir. Bu, tercüme edilen programının anlambilimini potansiyel olarak değiştirebilir. Agda, lambdas altındaki ifadeleri değerlendirmez; tür ifadeleri alarak lambda soyutlamaları bırakarak değerlendirme blokaj lambdalarını kaldırabilir. Tipik bir kısmi silme işlemi 'da doğru bir şekilde mümkündür. Örneğin doymuş işlev uygulamaları, bu şekilde optimize edilmiş her zaman olabilir. türlerinin ne zaman silindiği ile ilgili daha detaylı bir açıklama Letouzey tarafından daha önceki çalışmalarda bulunabilir.