Modüler bir derleyicide Pottier ve Gauthier'in polimorfik disfonksiyonunu kullanan var mı?


15

İşlevselleştirme , üst düzey programları birinci dereceden programlara dönüştüren bir program dönüşümüdür. Fikir, bir program verildiğinde, sadece son derece çok sayıda lambda soyutlaması vardır, böylece her lambda'yı bir id ile değiştirebilirsiniz ve her fonksiyon uygulaması, o kimliğe dallanan bir uygulama prosedürüne çağrı ile değiştirilebilir. Bu bazen derleyici olarak işlevsel diller için kullanılır , ancak uygulanabilirliği, işlev bozukluğunun bir tam program dönüşümü olmasıyla sınırlıdır (programdaki tüm işlevleri statik olarak bilmeniz gerekir) ve bu nedenle sadece tüm program derleyicileri yararlanır o.

Bununla birlikte, Pottier ve Gauthier , GADT'leri içeren daha sofistike bir tipleme kullanarak polimorfik tipte bir işlev bozukluğu algoritmasına sahiptir. Şimdi, kodlamaları göz önüne alındığında, lambda veri tipine bir etiket olmayan, ancak daha üst düzey bir işlev içeren bir tümünü yakalama durumu eklemek mümkündür. Bu, modül bazında işlevsizleştirmek için kodlamalarını kullanabilmeleri gerektiği anlamına gelir.

Bunu yapan var mı ve beni bu fikri kullanarak bir derleyiciye yönlendirdi mi? (Oyuncak derleyicileri iyidir ve aslında tercih edilir.)

Yanıtlar:


6

Bir yaklaşım,

Georgios Fourtounis ve Nikolaos S. Papaspyrou. 2013. İşlevsizleştirici Derleyicide Ayrı Derlemeyi Destekleme. SLATE 2013.

@Gasche'ın belirttiği gibi:

Problemdeki farklı bir yaklaşım, her bir modülün kendi "işlevsizleştirilmiş fonksiyonlar" tipini ve dağıtım görevlisini / işleyicisini tanımlayabileceğini düşünmektir.

Bu türleri ve işleyicileri özel bir bağlayıcıyla "bağlayabilirsiniz". Açık veri türlerini kullanmanın aksine, yapıcıların ve vaka işlevlerinin listesini birleştirirsiniz. Ancak, bağlayıcı kısmi uygulama için vaka eklemelidir: Tüm program analizi olmadan, hangi işlev için hangi kısmi uygulamaların kullanılabileceğini tahmin edemezsiniz, böylece tüm vakaları eklersiniz. birn-ary fonksiyonu kısmen uygulanabilir ben argümanlar (ile 0<ben<n) ve bir arity fonksiyonu üretmek n-benkısmen uygulanabilir.


4

Şimdi, kodlamaları göz önüne alındığında, lambda veri tipine bir etiket olmayan, ancak daha üst düzey bir işlev içeren bir tümünü yakalama durumu eklemek mümkündür. Bu, modül bazında işlevsizleştirmek için kodlamalarını kullanabilmeleri gerektiği anlamına gelir.

Burada ne demek istediğini biraz daha açıklayabilir misin? Nasıl bir temel durumda (veri türüne, gönderme işlevinin desen eşleştirme veya her ikisi için?) Eklemenin modülerlik tarif ettiğiniz şekilde yardımcı olduğunu anlamıyorum; Bu arada, neden tam olarak "modül modül" esasıyla kastediyorsunuz?

Belirli bir modülün / programın içinde seçici işlev bozukluğu için bir "temel durum" kullanıldığını hayal edebiliyorum : birleşik bir paket türünde, ancak tüm 'a -> 'bişlevleri gömmek için ek bir yapıcıya sahip olacaksınız. bu kurucuda, birleştirilmiş bir etiket vermek yerine, işlev bozukluğunu önleyecektir.

Problemdeki farklı bir yaklaşım, her bir modülün kendi "işlevsizleştirilmiş fonksiyonlar" tipini ve dağıtım görevlisini / işleyicisini tanımlayabileceğini düşünmektir. Modülden gelen fonksiyonlar M1tipe sahip olacak M1.arrowve M1.applyvb. Uygulanacaktı . işlevsel bağımsız değişkenlerinin nereden geldiğini öğrenin): Bir işlevi dağıtım programıyla birlikte paketlerseniz, dolaylı işlev çağrıları alanına yeniden girersiniz.

Son olarak, makalede, tüm programa karşı modüler yaklaşıma hızlı bir şekilde değindiniz, ancak teklifinizle nasıl ilişkili olduğunu görmüyorum. Tanımladıkları, hem işlevlerin hem de veri türlerinin (birkaç bağımsız modülde tanımlanabilecek işlevler ve türler) "açık uzantılar" olarak ifade edilir. Bu çoğunlukla, bağımsız modüllerin analiz / dönüşüm kombinasyonunu bağlantı zamanında erteleyebileceğiniz ve tüm program dönüşümünün gerekliliğini gevşetebileceğiniz gerçeğini tanımlamak için bir ML yoludur.

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.