Jawaban singkat: tidak, karena kesetaraan Turing.
Jawaban panjang: Orang ini menjadi troll. Memang benar bahwa sistem tipe "membatasi Anda untuk sebuah himpunan bagian," hal-hal di luar bagian itu, menurut definisi, hal-hal yang tidak berfungsi.
Apa pun yang dapat Anda lakukan dalam bahasa pemrograman Turing lengkap (yang merupakan bahasa yang dirancang untuk pemrograman tujuan umum, ditambah banyak yang tidak; itu adalah bar yang sangat rendah untuk dihapus dan ada beberapa contoh sistem menjadi Turing- lengkap tanpa disengaja) Anda dapat melakukan dalam bahasa pemrograman Turing-lengkap lainnya. Ini disebut "Turing equivalence," dan itu hanya berarti persis apa yang dikatakannya. Yang penting, itu tidak berarti bahwa Anda dapat melakukan hal lain dengan mudah dalam bahasa lain - beberapa orang akan berpendapat bahwa itulah inti dari menciptakan bahasa pemrograman baru: untuk memberi Anda cara yang lebih baik untuk melakukan tertentu hal-hal yang menyedot bahasa yang ada.
Sistem tipe dinamis, misalnya, dapat ditiru di atas sistem tipe OO statis dengan hanya mendeklarasikan semua variabel, parameter, dan mengembalikan nilai sebagai Object
tipe dasar dan kemudian menggunakan refleksi untuk mengakses data tertentu di dalam, jadi ketika Anda menyadari ini Anda melihat bahwa secara harfiah tidak ada yang dapat Anda lakukan dalam bahasa dinamis yang tidak dapat Anda lakukan dalam bahasa statis. Tetapi melakukannya dengan cara seperti itu akan sangat berantakan, tentu saja.
Pria dari kutipan itu benar bahwa tipe statis membatasi apa yang dapat Anda lakukan, tapi itu fitur penting, bukan masalah. Garis-garis di jalan membatasi apa yang dapat Anda lakukan di mobil Anda, tetapi apakah Anda menganggapnya terbatas, atau membantu? (Saya tahu saya tidak akan mau mengendarai mobil di jalan yang sibuk dan kompleks di mana tidak ada yang memberi tahu mobil-mobil pergi ke arah yang berlawanan untuk tetap di sisi mereka dan tidak datang ke tempat saya mengemudi!) Dengan membuat aturan yang dengan jelas menggambarkan apa dianggap perilaku yang tidak valid dan memastikan bahwa itu tidak akan terjadi, Anda sangat mengurangi kemungkinan terjadinya kecelakaan parah.
Juga, dia salah mengidentifikasi sisi lain. Bukannya "semua program menarik yang ingin Anda tulis akan berfungsi sebagai tipe", melainkan "semua program menarik yang ingin Anda tulis akan membutuhkan tipe." Setelah Anda melampaui tingkat kerumitan tertentu, menjadi sangat sulit untuk mempertahankan basis kode tanpa sistem tipe untuk membuat Anda sejalan, karena dua alasan.
Pertama, karena kode tanpa anotasi jenis sulit dibaca. Pertimbangkan Python berikut:
def sendData(self, value):
self.connection.send(serialize(value.someProperty))
Apa yang Anda harapkan dari data yang terlihat seperti yang diterima sistem di ujung koneksi yang lain? Dan jika itu menerima sesuatu yang tampak sangat salah, bagaimana Anda mengetahui apa yang terjadi?
Itu semua tergantung pada struktur value.someProperty
. Tapi seperti apa bentuknya? Pertanyaan bagus! Memanggil apa sendData()
? Apa yang lewat? Seperti apa variabel itu? Dari mana asalnya? Jika ini bukan lokal, Anda harus menelusuri seluruh sejarah value
untuk melacak apa yang terjadi. Mungkin Anda melewati sesuatu yang juga memiliki someProperty
properti, tetapi tidak melakukan apa yang Anda pikirkan?
Sekarang mari kita lihat dengan anotasi jenis, seperti yang mungkin Anda lihat dalam bahasa Boo, yang menggunakan sintaksis yang sangat mirip tetapi diketik secara statis:
def SendData(value as MyDataType):
self.Connection.Send(Serialize(value.SomeProperty))
Jika ada yang tidak beres, tiba-tiba tugas debugging Anda menjadi lebih mudah: lihat definisi MyDataType
! Plus, kemungkinan mendapatkan perilaku buruk karena Anda melewati beberapa jenis yang tidak kompatibel yang juga memiliki properti dengan nama yang sama tiba-tiba menjadi nol, karena sistem jenis tidak akan membiarkan Anda melakukan kesalahan itu.
Alasan kedua didasarkan pada yang pertama: dalam proyek besar dan kompleks, Anda kemungkinan besar mendapat banyak kontributor. (Dan jika tidak, Anda membangunnya sendiri untuk waktu yang lama, yang pada dasarnya adalah hal yang sama. Coba baca kode yang Anda tulis 3 tahun yang lalu jika Anda tidak percaya kepada saya!) Ini berarti Anda tidak tahu apa yang dulu melalui kepala orang yang menulis hampir semua bagian kode yang diberikan pada saat mereka menulisnya, karena Anda tidak ada di sana, atau tidak ingat apakah itu kode Anda sendiri dulu. Memiliki tipe deklarasi benar-benar membantu Anda memahami apa maksud kode itu!
Orang-orang seperti lelaki dalam kutipan sering salah mengartikan manfaat dari pengetikan statis sebagai tentang "membantu kompiler" atau "semua tentang efisiensi" di dunia di mana sumber daya perangkat keras yang hampir tak terbatas membuatnya semakin tidak relevan dengan setiap tahun yang lewat. Tetapi seperti yang telah saya tunjukkan, sementara manfaat-manfaat itu memang ada, manfaat utama ada pada faktor manusia, khususnya keterbacaan kode dan pemeliharaan. (Efisiensi tambahan tentu saja merupakan bonus yang bagus!)