Itu pertanyaan yang bagus! Itu menanyakan apa yang kita harapkan dari mengetik dalam bahasa yang diketik.
Catatan pertama bahwa kita dapat mengetikkan bahasa pemrograman apa pun dengan unitype : cukup pilih satu huruf, ucapkan U
, dan katakan bahwa setiap program memiliki tipe U
. Ini tidak terlalu berguna, tetapi itu benar.
eAeAAint
Tidak ada akhir dari seberapa ekspresif tipe Anda. Pada prinsipnya mereka bisa berupa pernyataan logis apa saja, mereka bisa menggunakan teori kategori dan yang lainnya, dll. Sebagai contoh, tipe dependen akan membiarkan Anda mengekspresikan hal-hal seperti "fungsi ini memetakan daftar ke daftar sehingga outputnya adalah input yang diurutkan". Anda dapat melangkah lebih jauh, saat ini saya sedang mendengarkan ceramah tentang "logika pemisahan bersamaan" yang memungkinkan Anda untuk berbicara tentang bagaimana program bersamaan bekerja dengan keadaan bersama. Barang mewah.
Seni mengetik dalam desain bahasa pemrograman adalah salah satu penyeimbangan antara ekspresif dan kesederhanaan :
- tipe yang lebih ekspresif memungkinkan kita untuk menjelaskan lebih detail (untuk diri kita sendiri dan kepada kompiler) apa yang seharusnya terjadi
- tipe yang lebih sederhana lebih mudah dipahami dan dapat diotomatisasi dengan lebih mudah di kompiler. (Orang-orang datang dengan tipe yang pada dasarnya memerlukan asisten bukti dan input pengguna untuk melakukan pengecekan tipe.)
Kesederhanaan tidak dapat diremehkan, karena tidak setiap programmer memiliki gelar PhD dalam teori bahasa pemrograman.
Jadi, mari kita kembali ke pertanyaan Anda: bagaimana Anda tahu bahwa sistem tipe Anda baik ? Nah, buktikan teorema yang menunjukkan tipe Anda menjadi seimbang. Akan ada dua jenis teorema:
Teorema yang mengatakan bahwa tipe Anda berguna . Mengetahui bahwa suatu program memiliki tipe harus menyiratkan beberapa jaminan, misalnya bahwa program tersebut tidak akan macet (itu akan menjadi teorema Keselamatan ). Keluarga teorema lain akan menghubungkan tipe-tipe tersebut ke model semantik sehingga kita dapat mulai menggunakan matematika nyata untuk membuktikan hal-hal tentang program kita (itu akan menjadi teorema Kecukupan , dan banyak lainnya). Unitype di atas buruk karena tidak memiliki teorema yang berguna.
Teorema yang mengatakan bahwa tipe Anda sederhana . Yang mendasar adalah dapat diputuskan apakah ekspresi yang diberikan memiliki tipe tertentu. Fitur kesederhanaan lainnya adalah memberikan algoritma untuk menyimpulkan suatu tipe. Teorema lain tentang kesederhanaan adalah: bahwa suatu ekspresi memiliki paling banyak satu jenis, atau bahwa suatu ekspresi memiliki jenis utama (yaitu, yang "terbaik" di antara semua jenis yang dimilikinya).
Sulit untuk lebih spesifik karena jenis adalah mekanisme yang sangat umum. Tapi saya harap Anda tahu untuk apa Anda menembak. Seperti kebanyakan aspek desain bahasa pemrograman, tidak ada ukuran keberhasilan mutlak. Sebaliknya, ada ruang kemungkinan desain, dan yang penting adalah memahami di mana di ruang Anda berada, atau ingin berada.