Hangi araştırma dilleri Haskell'den daha güçlü bir dizgi sistemine sahiptir ve neden?


14

İşte bunu okudum:

Haskell kesinlikle en gelişmiş tip sistemine sahip değildir (araştırma dillerini sayarsanız bile yakın değildir), ancak aslında üretimde kullanılan tüm dillerden Haskell muhtemelen en üsttedir.

Bu yüzden iki şey soruyorum:

  1. hangi araştırma dillerinin Haskell'den daha güçlü tip sistemlere sahip olduğu;
  2. ne geliştiriyorlar.

Ben sadece bir programcıyım, bu yüzden tip teorisinde kullanılan birçok matematik nesnesini bilmiyorum, lütfen mümkünse nazik açıklamalar sağlayın.


3
"Daha iyi" nedir?
David Richerby

2
@DavidRicherby Sanırım bu daha güçlü bir
Виталий Олегович

2
Bir tür sistemin Turing-complete olduğunu kanıtladıktan sonra , bu gerçekten önemli mi? ;-)
DevSolar

7
Turing makineleri Turing tamamlandı, neden günlük programlama görevleriniz için kullanmıyorsunuz?
gallais

4
Orijinal metnin, daha gelişmiş yazım sistemlerine sahip dillerden bahsettiğini ve 'daha gelişmiş' yazının bir yazım sistemi için daha iyi veya daha kötü olduğunu iddia etmediğini unutmayın.
Peteris

Yanıtlar:


25

Soru biraz sorunludur, çünkü “daha ​​iyi” nin öznel bir tanımına dayanır.

Agda , Idris ve Coq gibi bağımlı olarak yazılan diller Haskell'den daha güçlü bir tür sistemine sahiptir. Bu, kodunuz hakkında Haskell'den çok daha fazla özellik kanıtlamak için bu dillerdeki türleri kullanabileceğiniz anlamına gelir. Yani, yakalanacak daha yanlış programlar var.

Ancak, bunun bir bedeli vardır: tür çıkarımı ve belirli bir türdeki herhangi bir değerin var olup olmadığını test etmek artık mümkün değildir. Bu, bu diller için kodunuzu türlerle açıkça açıklama yapmanız gerektiği anlamına gelir. Esasen bu, kodunuz için kendi doğruluk kanıtlarınızı yazmakla ilgilidir.

Peki bu diller Haskell'den "daha iyi" mi? Kodunuz için gelişmiş doğruluk kanıtlarını kontrol edebilirler, ancak Haskell'in yapabileceği şekilde kodunuzla ilgili özellikleri otomatik olarak kanıtlayamazlar.

Haskell'den "daha iyi" olan bir başka araştırma dili de LiquidHaskell'dir . Bu temelde özel yorumlardan ayrıştırılmış rafine türleri ile Haskell.

Ayrıntılandırma türleri, özellikleri olan türleri daraltmanıza olanak tanır. Örneğin, bir yerine , tüm pozitif tamsayıların türünü Intbelirtebilirsiniz {i : Int | i > 0}. Tür çıkarımı, ayrıntılandırma türleriyle kararlaştırılabilir, ancak bunlarla bağımlı türlerde olabildiğince fazla doğruluk özelliği kanıtlayamazsınız.

Orada başka arıtma tipi sistemler var, ama bunların hiçbirine çok aşina değilim.


Teşekkür ederim! Haskell tipi sistemin hala tip çıkarımına izin veren en güçlü sistem olduğunu kanıtlamak mümkün müdür?
Виталий Олегович

3
Haskell kesinlikle tip çıkarımına izin veren en güçlü DEĞİLDİR. Bahsettiğim arıtma türleri tür çıkarımına izin verir ve Haskell'e biraz daha güçlü bir tür sistemi sağlayan birçok GHC uzantısı eklenir.
jmite

4
Bunun da ötesinde, birçok tip sistem vardır ve birçoğu karşılaştırılamaz: Haskell'den bazı açılardan daha güçlü, bazılarında Haskell'den daha zayıf olacaktır. En güçlüden en zayıfına doğru tip sistemlerin doğrusal bir sırası yoktur.
jmite

5
Şimdi, tür çıkarımına izin veren en güçlü tür sistemi olmadığını kanıtlamak istiyorum. Yararsız gerçekleri kanıtlamaya direnmeli.
Andrej Bauer

1
Gerçek benim için işe yaramaz gözükmüyor. Özellikle çıkarımın mümkün olduğu ortaya çıkarsa, tür çıkarımlı en güçlü bir tip sisteminin mevcut olduğu büyük ilgi görür.
rationalis

10

ML dil ailesi (StandardML, OCaml ), Haskell ile benzer bir gelenekten kaynaklanır ve bu nedenle benzer tip sistemlere sahiptir. Yine de Haskell ile tam olarak aynı değildirler ve özelliklerinden bazıları size daha uygun olabilir ( nesnel olarak daha iyi bir tür sistemi diye bir şey yoktur, çünkü programlama dillerinde tip sistemleri insanlara yardım etmek için mevcuttur ). İşte Haskell'in sahip olmadığı (ancak buna karşılık gelen benzer bir kavramı olabilir) veya Haskell'in sahip olduğu ancak farklı bir şekilde yapılan OCaml'ın bazı özellikleri şunlardır:

  1. Polimorfik varyantlar .
  2. Derinlik alt tipleri ve sınıfları olan nesneler .
  3. Modüller (Haskell'in modülleri vardır) ve hatta birinci sınıf modüller arasında harita olan işlevler

Ve lütfen, bunu bir ML-Haskell atışına dönüştürmeye gerek yok, yoksa Bob Harper'ın blog yayınlarına ;-) bağlamaya başlayacağım


9

Clean araştırma dili Haskell'den daha iyi bir tip sistemine sahiptir, çünkü benzersiz tiplere sahiptir . Teklik türlerinin ardındaki fikirler , klasik mantığa göre sınırlı “gerçek dünya” kaynağına daha yakın olan doğrusal mantıkla yakından ilgilidir .

Anti-araştırma dili Rust ayrıca klasik saf tip sistemlere göre "gerçek dünyaya" yakın benzersiz özelliklere sahip bir tip sisteme sahiptir. Yazı sistemini etkileyen fikirlerin çoğu, Rust'dan tamamen bağımsız olarak yayınlanmadan çok önce yayınlandı. Ancak bu eski fikirlerin bir araya getirilme şekli benzersizdir ve bilinen boşluklar ve tutarsızlıklar olsa bile gerçek araştırma yayınlarını hak eder.


3
Bir şekilde "yayınlanmış" ve "anti-araştırma" birlikte iyi gitmiyor.
Andrej Bauer

1
Benzersizlik kesinlikle ilginç bir kavramdır, ancak IMO, bir tür sistem özelliğinden ziyade anlambilimle ilgilidir. Ve bu, yazı sistemini gerçekten daha iyi yapıyor mu? Clean, Haskell'in kendi tip sistemine, daha üst düzey polimorfizme vs. eklediği yeni şeyleri yapabilir mi?
leftaroundabout

1
@ leftaroundabout Benzersizlik türlerine veya doğrusal mantığa ne kadar aşinasınız? X'in benzersiz bir türü varsa, örneğin f (x, x) iyi yazılmamıştır. Haskell'i benzersizlik türlerini de destekleyecek şekilde genişletmek mümkün olabilir. C ++ 'daki taşıma semantiği, var olan bir tip sisteminin üstünde benzersiz türler için desteği geliştiriyor olarak da görülebilir.
Thomas Klimpel

C ++ hareket semantiğine aşinayım, belki de bu yüzden benzersizlik izlenimim “bir tür sistem şeyinden çok değil”. İlginç bulduğum şey, tam dışa doğru yayılan benzersiz tiplerin gelişmiş tip sistemin diğer özelliklerini engellemesi mi?
leftaroundabout

1
@leftaroundabout Rvalue referansları kulağa bir yazım sistemi gibi geliyor. Benzersizlik türleri neden diğer gelişmiş tür özelliklerini engellemelidir? En kötü durumda, bu gelişmiş özellikler sadece benzersizlik türleri için geçerli değildir. Elbette, tekil tipler gibi "gerçek dünya" özellikleri derinlik yerine genişliğe gitmek anlamına gelir ve daha da genişlemek için harcadığınız zaman artık daha derine inmek için orada olmayacaktır. Ancak, benzersizlik türlerinin teori ve pratik arasında güzel bir denge sağladığı izlenimine sahibim, bu yüzden zamanın iyi harcanacağını düşünüyorum.
Thomas Klimpel
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.