Bahasa riset mana yang memiliki sistem huruf yang lebih kuat daripada Haskell dan mengapa?

14

Di sini saya baca itu:

Haskell jelas tidak memiliki sistem tipe yang paling canggih (bahkan tidak menutup jika Anda menghitung bahasa penelitian) tetapi dari semua bahasa yang sebenarnya digunakan dalam produksi, Haskell mungkin ada di puncak.

Jadi saya bertanya dua hal:

  1. bahasa riset mana yang memiliki sistem tipe yang lebih kuat daripada Haskell;
  2. apa yang mereka tingkatkan.

Saya hanya seorang programmer, jadi saya tidak tahu banyak objek matematika yang digunakan dalam teori tipe, tolong berikan penjelasan lembut jika Anda bisa.

Виталий Олегович
sumber
3
Apa yang lebih baik"?
David Richerby
2
@DavidRicherby Saya rasa itu berarti sistem tipe yang lebih kuat
Виталий Олегович
2
Setelah Anda membuktikan bahwa sistem tipe Turing-complete , apakah itu penting? ;-)
DevSolar
7
Mesin Turing sudah selesai Turing, mengapa Anda tidak menggunakannya untuk tugas pemrograman sehari-hari Anda?
gallais
4
Perhatikan bahwa teks asli menyebutkan bahasa dengan sistem tipe yang lebih maju dan tidak membuat pernyataan apakah 'lebih maju' lebih baik atau lebih buruk untuk sistem tipe.
Peteris

Jawaban:

25

Pertanyaannya agak bermasalah, karena bergantung pada definisi subjektif dari "lebih baik."

Bahasa yang diketik dengan tergantung seperti Agda , Idris , dan Coq memiliki sistem tipe yang lebih kuat daripada Haskell. Ini artinya, Anda bisa menggunakan tipe dalam bahasa ini untuk membuktikan lebih banyak properti tentang kode Anda daripada di Haskell. Artinya, ada lebih banyak lagi program yang salah yang akan ditangkap.

Namun, ini datang pada harga: jenis inferensi, dan pengujian apakah ada nilai dari jenis yang diberikan, tidak lagi mungkin. Ini berarti untuk bahasa-bahasa ini, Anda perlu secara eksplisit membuat anotasi kode Anda dengan tipe. Pada dasarnya ini bermuara pada menulis bukti kebenaran Anda sendiri untuk kode Anda.

Jadi, apakah bahasa-bahasa ini "lebih baik" dari pada Haskell? Mereka dapat memeriksa bukti tingkat lanjut untuk kode Anda, tetapi mereka tidak dapat secara otomatis membuktikan properti tentang kode Anda seperti yang Haskell bisa.

Bahasa penelitian lain yang "lebih baik" dari Haskell adalah LiquidHaskell . Ini pada dasarnya adalah Haskell dengan tipe penyempurnaan yang dibaut di atas, diurai dari komentar khusus.

Jenis perbaikan memungkinkan Anda memperbaiki jenis dengan properti. Misalnya, alih-alih memiliki Int, Anda dapat menentukan {i : Int | i > 0}, memberikan tipe semua bilangan bulat positif. Jenis inferensi dapat dipilih dengan jenis penyempurnaan, tetapi Anda tidak dapat membuktikan sebanyak mungkin properti kebenaran dengan mereka dengan jenis bergantung.

Ada sistem jenis penyempurnaan lain di luar sana, tapi saya tidak terlalu akrab dengan mereka.

Ya ampun
sumber
Terima kasih! Apakah mungkin membuktikan bahwa sistem tipe Haskell adalah yang terkuat yang masih memungkinkan inferensi tipe?
Виталий Олегович
3
Haskell jelas BUKAN yang terkuat yang memungkinkan inferensi tipe. Jenis penyempurnaan yang saya sebutkan memungkinkan inferensi tipe, dan banyak ekstensi GHC sedang ditambahkan ke Haskell yang memungkinkan sistem tipe yang sedikit lebih kuat.
jmite
4
Di atas ini, ada banyak jenis sistem, dan banyak yang tak tertandingi: mereka akan lebih kuat dari Haskell dalam beberapa hal, tetapi lebih lemah dari Haskell dalam yang lain. Tidak ada urutan sistem linear dari yang terkuat ke terlemah.
jmite
5
Sekarang saya ingin membuktikan bahwa tidak ada sistem tipe terkuat yang memungkinkan inferensi tipe. Harus menolak untuk membuktikan fakta yang tidak berguna.
Andrej Bauer
1
Faktanya sepertinya tidak berguna bagiku. Pengetahuan bahwa ada sistem tipe terkuat dengan inferensi tipe akan sangat menarik, terutama jika ternyata layak untuk diterapkan.
rasionalis
10

Keluarga bahasa ML (StandardML, OCaml ) muncul dari tradisi yang sama seperti Haskell dan karenanya memiliki sistem tipe yang serupa. Mereka tidak persis sama dengan Haskell, dan beberapa fitur mereka mungkin lebih cocok untuk Anda (tidak ada yang namanya sistem tipe yang lebih baik secara objektif karena sistem tipe dalam bahasa pemrograman ada untuk membantu manusia ). Berikut adalah beberapa fitur OCaml yang tidak dimiliki Haskell (tetapi mungkin memiliki konsep yang serupa), atau Haskell memang memiliki tetapi melakukan berbeda:

  1. Varian polimorfik .
  2. Objek dengan kedalaman subtipe dan kelas .
  3. Functors , yang merupakan peta antar modul (Haskell memiliki modul), dan bahkan modul kelas satu

Dan tolong, tidak perlu mengubahnya menjadi baku tembak ML-Haskell, kalau tidak saya akan mulai menghubungkan ke posting blog Bob Harper ;-)

Andrej Bauer
sumber
9

Bahasa riset Clean memiliki sistem tipe yang lebih baik daripada Haskell, karena memiliki tipe keunikan . Gagasan di balik tipe keunikan terkait erat dengan logika linier , yang lebih dekat dengan "dunia nyata" terbatas sumber daya daripada logika klasik.

Bahasa anti-riset Rust juga memiliki sistem tipe dengan fitur unik yang lebih dekat ke "dunia nyata" daripada sistem tipe murni klasik. Sebagian besar ide yang mempengaruhi sistem tipe telah diterbitkan sepenuhnya independen dari Rust jauh sebelum itu ada. Tetapi cara ide-ide lama ini disatukan adalah unik, dan juga layak mendapatkan publikasi penelitian nyata, bahkan jika ada celah dan inkonsistensi yang diketahui.

Thomas Klimpel
sumber
3
Entah bagaimana "diterbitkan" dan "anti-penelitian" tidak berjalan dengan baik.
Andrej Bauer
1
Keunikan tentu merupakan konsep yang menarik, tetapi IMO lebih tentang semantik, daripada fitur sistem tipe seperti itu. Dan apakah ini benar-benar membuat sistem tipe benar-benar lebih baik ? Dapatkah Bersihkan melakukan hal-hal baru yang ditambahkan Haskell ke sistem tipenya, polimorfisme tingkat tinggi, dll. - apakah beberapa di antaranya bahkan mungkin terjadi ketika sistem tipe sudah perlu berurusan dengan keunikan?
leftaroundabout
1
@leftaroundabout Seberapa familiar Anda dengan tipe keunikan atau logika linier? Jika x memiliki tipe unik, maka f (x, x) tidak diketik dengan baik, misalnya. Dimungkinkan untuk memperluas Haskell untuk juga mendukung tipe keunikan. Semantik langkah dalam C ++ juga dapat dilihat sebagai meningkatkan dukungan untuk tipe unik di atas sistem tipe yang ada.
Thomas Klimpel
Saya kenal dengan C ++ move semantic, mungkin itu sebabnya kesan saya tentang keunikan adalah "tidak banyak hal-jenis sistem". Apa yang saya temukan menarik adalah, apakah tipe keunikan propagasi penuh menghalangi fitur lain dari sistem tipe canggih?
leftaroundabout
1
@leftaroundabout Referensi nilai terdengar seperti tipe sistem bagi saya. Mengapa tipe keunikan menghalangi fitur tipe lanjutan lainnya? Dalam kasus terburuk, fitur-fitur canggih itu tidak akan berlaku untuk jenis keunikan. Tentu saja, fitur "dunia nyata" seperti tipe keunikan berarti lebih luas daripada kedalaman, dan waktu yang Anda habiskan untuk pergi lebih luas tidak lagi ada untuk pergi lebih dalam. Tetapi saya memiliki kesan bahwa tipe keunikan menawarkan keseimbangan yang baik antara teori dan praktik, jadi saya pikir waktu akan dihabiskan dengan baik.
Thomas Klimpel