Tweeter asli di sini. :)
Pertama-tama, saya agak geli / terkejut karena tweet saya dianggap serius! Jika saya tahu ini akan disebar luaskan, saya akan menghabiskan lebih dari 30 detik untuk menulisnya!
Thiago Silva benar untuk menunjukkan bahwa "statis" dan "dinamis" lebih akurat menggambarkan pengecekan tipe , daripada sistem tipe . Bahkan, tidak benar-benar akurat untuk mengatakan bahwa suatu bahasa diketik secara statis atau dinamis. Alih-alih, suatu bahasa memiliki sistem tipe, dan implementasi bahasa itu mungkin memberlakukan sistem tipe menggunakan pemeriksaan statis, atau pemeriksaan dinamis, atau keduanya, atau tidak (meskipun itu tidak akan menjadi implementasi bahasa yang sangat menarik!).
Seperti yang terjadi, ada sistem tipe tertentu (atau fitur sistem tipe) yang lebih dapat menerima pemeriksaan statis, dan ada sistem tipe tertentu (atau fitur sistem tipe) yang lebih dapat menerima pemeriksaan dinamis. Misalnya, jika bahasa Anda memungkinkan Anda untuk menentukan dalam teks suatu program bahwa nilai tertentu harus selalu berupa array bilangan bulat, maka cukup mudah untuk menulis pemeriksa statis untuk memverifikasi properti itu. Sebaliknya, jika bahasa Anda memiliki subtyping, dan jika itu memungkinkan downcasting, maka cukup mudah untuk memeriksa validitas downcast saat runtime, tetapi sangat sulit untuk melakukannya pada waktu kompilasi.
Apa yang saya maksudkan dengan tweet yang saya hanyalah bahwa sebagian besar dari implementasi bahasa melakukan beberapa jumlah memeriksa jenis dinamis. Atau, yang setara, sebagian besar bahasa memiliki beberapa fitur yang sulit (jika bukan tidak mungkin) untuk diperiksa secara statis. Downcasting adalah salah satu contohnya. Contoh lain termasuk overflow aritmatika, pemeriksaan batas array, dan pemeriksaan nol. Beberapa di antaranya dapat diperiksa secara statis dalam beberapa keadaan, tetapi pada umumnya, Anda akan kesulitan menemukan implementasi bahasa yang tidak melakukan pengecekan saat runtime.
Ini bukan hal yang buruk. Itu hanya pengamatan bahwa ada banyak properti menarik yang ingin kita dukung bahasa kita, dan bahwa kita tidak benar-benar tahu cara mengecek secara statis. Dan itu adalah pengingat bahwa perbedaan seperti "tipe statis" versus "tipe dinamis" hampir tidak sejelas yang diyakini oleh beberapa orang. :)
Satu catatan terakhir: istilah "kuat" dan "lemah" tidak benar-benar digunakan dalam komunitas riset bahasa pemrograman, dan mereka tidak benar-benar memiliki makna yang konsisten. Secara umum, saya telah menemukan bahwa ketika seseorang mengatakan bahwa suatu bahasa memiliki "ketikan yang kuat" dan beberapa bahasa lainnya memiliki "ketikan yang lemah", mereka benar-benar mengatakan bahwa bahasa favorit mereka (yang dengan "ketikan yang kuat") mencegah mereka dari membuat beberapa kesalahan bahwa bahasa lain (yang dengan "mengetik lemah") tidak - atau sebaliknya, bahasa favorit mereka (yang dengan "mengetik lemah") memungkinkan mereka untuk melakukan beberapa hal keren bahwa bahasa lain (yang satu dengan "pengetikan kuat") tidak.