Çağrı sitesi tabanlı tür çıkarımı araştırılsın mı?


9

Tüm program türü denetimi hakkında daha fazla bilgi edinmek ve işlev bilgilerini (bilgi işlem gövdesi kullanma standart yaklaşımına ek olarak) hesaplamak için işlev çağrı sitelerinden bilgi kullanan tür çıkarım sistemleri hakkında çalışıyorum. Örneğin, böyle bir algoritma foo(1), içindeki işlevin footamsayı bağımsız değişkenleri aldığını çıkarmak için bir işlev çağrısı kullanabilir . Açıkçası bu, çıkarımı çok zorlaştıracak ve kontrolü modüler olmayan hale getirecektir.

Her neyse, bu yaklaşımla ilgili herhangi bir araştırma bulmakta pek şansım olmadı, çünkü muhtemelen neden bahsettiğimi tanımlamak için doğru terminolojiyi bilmiyorum. İşaretçi var mı?


Açıkladığınız şey, yanılmıyorsam, çift yönlü tür çıkarım ipuçları var. Bununla birlikte, ne yapmaya çalıştığınızı açıklamak açıklığa kavuşabilir.
Dominic Mulligan

Polimorfik fonksiyonları özelleştirmek için bir yol aradığınız için mi soruyorsunuz?
nponeccop

Çoğunlukla gerçekten tip sistemleri hakkında daha fazla bilgi edinmeye çalışıyorum ve evet, çoğunlukla polimorfik fonksiyonların nasıl işleneceğini düşünüyordum (ve aynı şey OO dillerinde yöntem çağrıları). Bunun için doğru terimleri belirlemeye çalışıyorum, böylece okuyabilirim.
Derek Thurn

Yanıtlar:


11

Tür çıkarımına sahip hemen hemen tüm sistemler bunu yapmak için çağrı sitesi bilgilerini kullanır. Örnekler arasında Standart ML, OCaml, F # ve Haskell sayılabilir. Diğer birçok dil, Java, C #, Scala ve Yazılan Raket gibi tür parametre örneklemesini çıkarmak için çağrı sitesi bilgilerini kullanır. Bu genellikle "Yerel Tür Çıkarım" adıyla geçer.

Ben sadece aradığınızı "Tip Çıkarım" olarak tarif ederdim ve muhtemelen "Hindley-Milner" sistemi olarak bilinen şeyi arayarak başlamalısınız. Wikipedia sayfası makul bir giriş yapar ve orijinal makalelere işaret eder.

Yerel Tür Çıkarım için başlangıç ​​yeri, en iyi TOPLAS 2000 sürümünde ( ACM , PDF ) okunan Pierce ve Turner'ın orijinal kağıdıdır .


Pierce ve Turner gazetesi çok aydınlatıcıydı, teşekkürler. Kodda tanımladıkları algoritmanın minimal bir uygulamasının farkında mısınız? Bence bu da bakmak çok ilginç olurdu.
Derek Thurn

Hiçbir minimal uygulama bilmiyorum. Typed Racket'te bir ve Scala'da bir tane var, ancak her ikisi de önemli ölçüde daha karmaşık algoritmalar uyguluyor.
Sam Tobin-Hochstadt

0

Sen sana böyle bir şey verebilir kavşak tipleri için tip sistemlerin bir göz alabilir a :: Int -> Int | Bool -> Boolsen iki uzmanlık biliyorum bu yüzden, Intve Boolyeterli veya gerçek toplamak için bir kontrol akış analizi takip en genel türleri anlaması için bir olağan tip çıkarsama kullanmak argümanlar yazın. Aslında melez yaklaşımlar vardır (CFA bir tip sistem olarak ifade edilir, ya da tam tersi).

En genel türler yerine en az genel türlerin çıkarılması üzerine araştırmalar olabilir, ancak bunların farkında değilim.

Polimorfizmi uygulama tekniklerine gelince, iki çözüm mevcuttur: 1) uzmanlaşma (C ++ şablonlarını düşünün) 2) düzgün temsil varsayımı (boşluk * ile C-tarzı koleksiyonları düşünün *).

2 için daktilo kontrol sırasında çağrı sitesinden tür gerekmez ve ayrı derleme daha kolay destekleyebilir.

Burada parametrik polimorfizmden bahsettiğimizi ve OO sanal yöntem çağrılarının alt tip polimorfizm olarak adlandırılan tamamen farklı bir şey olduğunu unutmayın. C ++ şablonlarının parametrik polimorfizm ve ördek tipleme gibi bir şeyi desteklediğini unutmayın ki bu da başka bir polimorfizm biçimidir.


1
"OO sanal yöntem çağrıları ad-hoc polimorfizm denilen tamamen farklı bir şeydir" Ad-hoc polimorfizm aşırı yükleme için başka bir isimdir. Alt tip polimorfizmle karıştırıyorsunuz.
Radu GRIGaha fazla

Ama alt sınıflar mutlaka alt tip değildir, değil mi? Örneğin, alt tipler için LSP'nin tutulması gerekir.
nponeccop

1
Doğru, ama konunun yanında. "Alt tip polimorfizm" standart terimdir. Ayrıntılar için en.wikipedia.org/wiki/Subtype_polymorphism adresine bakın.
Radu GRIGaha fazla
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.