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:
- bahasa riset mana yang memiliki sistem tipe yang lebih kuat daripada Haskell;
- 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.
programming-languages
type-theory
Виталий Олегович
sumber
sumber
Jawaban:
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.
sumber
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:
Dan tolong, tidak perlu mengubahnya menjadi baku tembak ML-Haskell, kalau tidak saya akan mulai menghubungkan ke posting blog Bob Harper ;-)
sumber
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.
sumber