Tip kontrol algoritmaları


19

Tip kontrol algoritmaları hakkında kişisel bir bibliyografik araştırma başlatıyorum ve bazı ipuçları istiyorum. En sık kullanılan tip kontrol algoritmaları, stratejileri ve genel teknikler nelerdir?

Özellikle, C ++, Java 5+, Scala veya diğerleri gibi yaygın olarak bilinen güçlü statik yazılan dillerde uygulanan karmaşık tür denetleme algoritmalarıyla ilgileniyorum. IE, temel dilin çok basit yazılması nedeniyle çok basit olmayan tür denetleme algoritmaları (Java 1.4 ve altı gibi).

Belirli bir X, Y veya Z diliyle ilgilenmiyorum. Hedefledikleri dilden bağımsız olarak tip kontrol algoritmalarıyla ilgileniyorum. "Daha önce hiç duymadığınız ve güçlü yazılan L dili gibi bir yanıt sağlarsanız, Z algoritmasını kullanarak X ve Y'yi kontrol ederek A, B ve C'yi yapan bir tür kontrol algoritması vardır" veya " Scala için kullanılan X ve Y stratejileri ve C # için kullanılan A'nın bir Z varyasyonu, bu şekilde çalışan R, S ve T özellikleri nedeniyle havalı "dediğinde, cevaplar güzel.


3
Belli bir dil için tür denetimi hakkında soru sormak için bu soruyu düzenlemeniz gerekebilir. Açık uçlu, liste tarzı sorular genellikle SE'de önerilmez (ancak bu sitenin henüz bu konuda bir politikası yoktur). Ayrıca: <type-system-elitist> Java'nın tür sistemi karmaşık değil </type-system-elitist>.
sepp2k

3
Belki de soru daha spesifik olarak yeniden ifade edilebilir, ancak bunun kapatılması gerektiğini düşünmüyorum.
Dave Clarke

1
@ sepp2k: Biraz geniş olduğunu biliyorum, ama bu şekilde sona erdi çünkü cevapların kullanışlılığını sınırlamak istemiyorum. BTW, "<type-system-elitist> Java'nın tür sistemi karmaşık değil </type-system-elitist>" ile ne söylemek istediğinizi anlamadım. Java'nın 1.4 ve altı tip sistemi aslında basitti, ancak Java 5'teki beyaz jenerikler çok daha karmaşık hale geldi.
Victor Stafusa

2
Belirli bir dil istemek soruyu bu site için daha uygun hale getirecektir imho. Soru belki de genel teknikler istemelidir.
Raphael

1
@Victor Temel bir araç Öznitelik Gramerleridir . Onlarla hayal edebileceğiniz her kötü şeyi yapamayacaksınız, ancak bunlar iyi bir başlangıç ​​noktası.
Raphael

Yanıtlar:


13

Çoğu araştırma, tam gelişmiş programlama dilleri için tür kontrol algoritmalarını yayınlamamaktadır. Drossopoulou ve Eisenbach tarafından Java veya Nipkov ve arkadaşlarının C ++ üzerindeki çalışmaları gibi, tam programlama dilleri için tür sistemlerinin büyük bir kısmının bazı formalizasyonlarını bulacaksınız . Daha sık, ancak, dilin sadece bazı çekirdek kısımları için (Featherweight Java bir örnektir) veya bir dilin scala'nın yerel tür çıkarım yaklaşımı gibi temel kavramları için tip sistemlerini bulacaksınız .

POPL ve ICFP gibi konferanslarda, belirli tip sistemler için birçok tip kontrol algoritması ve çift ​​yönlü ve çift ​​yönlü tip kontrol gibi yeni yaklaşımlar bulacaksınız .

Daha genel olarak, muhtemelen Damas-Milner algoritması , yerel tip çıkarım, çift yönlü ve çift yönlü tip kontrolü hakkında bilgi sahibi olmanız ve makalelerde referansları takip ederek ve hangi makalelerin bunları alıntıladığını ve üzerine inşa edildiğini bulmak için google bilginini kullanarak oradan genişlemeniz gerekir. açıklanan yaklaşımlar. Ayrıca, yukarıda önerildiği gibi, POPL, ICPF, ESOP ve hatta ECOOP ve OOPSLA gibi konferanslarda arayışınızla ilgili makaleler olacaktır.


Afaik, Scala'nın tip sistemi araştırma projelerinde geliştirilmiş ve bu sayede yayınlanmıştır. Derleyici de açık kaynaklı. Ama ikisine de bakmadım.
Raphael

Çıkarım yapmam gerekmiyor; Ben biliyorum Scala'nın tip sistemine yayınlanan bildiri olduğunu. Bu talep arama ile kolayca kontrol edilir . Ayrıca, derleyicinin kaynak kodunu algoritmada yeterli yayın olarak sayıyorum (kaynaklara dahil edilmesi şartıyla; sanırım ama kontrol etmedim). İlk ifadem belirsizdi, doğruydu, ancak tepkiniz gereksiz görünüyor.
Raphael

2

Temel bir araç Öznitelik Gramerleridir . Onlarla hayal edebileceğiniz her kötü şeyi yapamayacaksınız, ancak bunlar iyi bir başlangıç ​​noktası.

Esasen, bir programın soyut sözdizimi ağacının yukarıdan aşağıya ve / veya aşağıdan yukarıya doğru yürüyebilir ve bilgileri iletebilirsiniz. Böylece, örneğin, global kapsam türü bilgilerini (örneğin, sınıflar ve üyeleri) aşağıya doğru aktarabilir ve ifadelerin türünü özyinelemeli, yani aşağıdan yukarıya, sonuçta ortaya çıkan türleri yukarı doğru geçirerek belirleyebilirsiniz.

Slaytlardaki bazı açıklamaları ve örnekleri burada bulabilirsiniz (Bölüm 5).


Birisinin daha iyi bir referansı var mı? Sanırım şu günlerden birinden Dragonbook veya Wilhelm / Maurer almam gerekiyor ...
Raphael

1
JastAdd aracı , referans özellik gramerlerine dayanan mükemmel, modern bir derleyici derleyici sistemidir. Bir dizi projede kullandık.
Dave Clarke
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.