Mengapa bahasa yang diketik dengan lemah masih aktif dikembangkan?


17

Saya bertanya-tanya mengapa bahasa yang diketik dengan lemah masih aktif dikembangkan. Misalnya, manfaat apa yang dapat diperoleh seseorang dari kemampuan menulis

$someVar = 1;
(...)  // Some piece of code
$someVar = 'SomeText';

alih-alih menggunakan versi yang sangat berbeda dan diketik dengan stong

int someInt = 1;
(...)
string SomeString = 'SomeText';

Benar bahwa Anda perlu mendeklarasikan variabel tambahan dalam contoh kedua, tetapi apakah itu benar-benar menyakitkan? Tidakkah semua bahasa harus berusaha keras mengetik karena menerapkan keamanan tipe pada waktu kompilasi, sehingga menghindari beberapa jebakan dalam tipe-casting?


9
"Sangat diketik" bukan istilah yang didefinisikan dengan baik. Sebagian besar itu berarti "Anda tidak dapat menumbangkan sistem tipe". Ini orthogonal dengan apa yang Anda gambarkan di atas yang mungkin pengetikan laten versus manifes, atau pengetikan statis versus dinamis.
Frank Shearar

10
Apa yang saya lewatkan yang memindahkan ini dari umpan api dengan beberapa pertanyaan yang terkait erat, bahkan bisa jadi duplikat (cukup cari SackOverflow untuk pertanyaan yang menyebutkan pengetikan statis dan dinamis pada tag mereka) ke pertanyaan yang sah?

1
Ada beberapa kelebihan dan kekurangan untuk bahasa yang diketik secara statis dan yang diketik secara dinamis. Bahasa yang diketik secara dinamis cocok untuk pengembangan cepat atau pembuatan prototipe (karenanya alasan "bahasa penulisan" biasanya diketik secara dinamis), sedangkan bahasa yang diketik secara statis (bisa dibilang) lebih mudah untuk dipertahankan dan diperluas seiring berkembangnya proyek-proyek besar dan rumit.
Charles Salvia

6
Contoh pertama adalah sedikit seperti Python di mana variabel tidak memiliki tipe yang dideklarasikan. Namun, Python adalah bahasa yang diketik sangat kuat karena objek - sendiri - memiliki jenis yang hampir tidak mungkin untuk diubah atau dipaksakan. Saya pikir penyalahgunaan terminologi membuat pertanyaan ini sangat sulit dijawab.
S.Lott

1
@delnan Fakta bahwa pertanyaan ini menghasilkan dua jawaban yang masuk akal dan tidak berubah menjadi perang api sangat membantu.
Adam Lear

Jawaban:


25

Pengetikan kuat / lemah dan pengetikan statis / dinamis bersifat ortogonal.

Kuat lemah adalah tentang apakah jenis nilai itu penting, secara fungsional. Dalam bahasa yang diketik dengan lemah, Anda dapat mengambil dua string yang diisi digit dan melakukan penambahan bilangan bulat pada mereka; dalam bahasa yang sangat diketik, ini adalah kesalahan (kecuali jika Anda melemparkan atau mengonversi nilai ke jenis yang benar terlebih dahulu). Mengetik dengan kuat / lemah bukanlah hal yang hitam-putih; kebanyakan bahasa tidak 100% ketat atau 100% lemah.

Pengetikan statis / dinamis adalah tentang apakah jenis mengikat nilai atau pengidentifikasi. Dalam bahasa yang diketik secara dinamis, Anda dapat menetapkan nilai apa pun untuk variabel apa pun, apa pun jenisnya; pengetikan statis mendefinisikan suatu tipe untuk setiap pengidentifikasi, dan menetapkan dari tipe yang berbeda adalah suatu kesalahan, atau itu menghasilkan suatu pemeran implisit. Beberapa bahasa mengambil pendekatan hibrid, memungkinkan untuk jenis yang dideklarasikan secara statis serta pengidentifikasi yang tidak diketik ('varian'). Ada juga tipe inferensi, suatu mekanisme di mana pengetikan statis dimungkinkan tanpa secara eksplisit menyatakan jenis semuanya, dengan meminta kompiler mengetahui jenis-jenisnya (Haskell menggunakan ini secara luas, C # memaparkannya melaluivar kata kunci).

Pemrograman dinamis yang lemah memungkinkan pendekatan pragmatis; sebagian besar waktu tidak menghalangi bahasa Anda, tetapi bahasa itu tidak akan masuk saat Anda menembak diri sendiri. Sebaliknya, pengetikan statis yang kuat mendorong programmer untuk mengungkapkan harapan tertentu tentang nilai-nilai secara eksplisit dalam kode, dengan cara yang memungkinkan kompiler atau juru bahasa untuk mendeteksi kelas kesalahan. Dengan sistem tipe yang baik, seorang programmer dapat menentukan dengan tepat apa yang dapat dan tidak dapat dilakukan untuk suatu nilai, dan jika, secara tidak sengaja, seseorang mencoba sesuatu yang tidak diinginkan, sistem tipe sering dapat mencegahnya dan menunjukkan dengan tepat di mana dan mengapa segala sesuatunya salah.


Dalam bahasa yang diketik dengan lemah seperti HyperTalk dengan operator terpisah untuk penggabungan dan penambahan string (mis. Asumsikan &untuk penggabungan), operasi menyukai "12"+3atau 45 & "6"tidak menimbulkan ambiguitas (masing-masing menghitung 15 dan dan "456"). Dalam bahasa yang diketik lebih kuat, operator "+" dapat secara aman kelebihan beban untuk penggabungan string dan penambahan numerik tanpa menyebabkan ambiguitas karena operasi pada string dan angka akan dilarang. Masalah muncul ketika bahasa menentukan jenis atau operasi yang akan dilakukan.
supercat

4

Mengetik yang lemah lebih sesuai 1 == "TRUE". Bagian ini di wikipedia dengan baik menggambarkan perbedaannya.

Harap perhatikan bahwa tidak ada contoh dari wikipedia yang diketik secara statis, yang Anda rujuk pada contoh kedua.

Jadi, jika pertanyaannya adalah, mengapa orang menggunakan bahasa yang diketik secara dinamis, maka jawabannya adalah: sistem tipe statis membatasi Anda. Banyak orang tidak pernah bekerja dengan sistem tipe statis ekspresif, yang mengarahkan mereka pada kesimpulan bahwa kerugian dari pengetikan statis lebih besar daripada manfaatnya.


0

Bahasa dengan tipe lemah masih dikembangkan karena orang menggunakannya dan menyukainya. Jika Anda tidak menyukai pengetikan yang lemah, jangan gunakan bahasa yang diketik dengan lemah. Menyatakan bahwa sesuatu adalah Satu Jalan Sejati dan Semua Orang Harus Melakukannya Satu Arah Sejati mengabaikan kerumitan dunia.


0

Tidakkah semua bahasa harus berusaha keras mengetik karena menerapkan keamanan tipe pada waktu kompilasi, sehingga menghindari beberapa jebakan dalam tipe-casting?

Belum tentu. Learning Objective-C: A Primer membahas pertanyaan itu langsung dalam konteks Objective-C:

Variabel yang diketik lemah sering digunakan untuk hal-hal seperti kelas koleksi, di mana jenis objek yang tepat dalam koleksi mungkin tidak diketahui. Jika Anda terbiasa menggunakan bahasa yang sangat diketik, Anda mungkin berpikir bahwa penggunaan variabel yang diketik dengan buruk akan menyebabkan masalah, tetapi mereka sebenarnya memberikan fleksibilitas yang luar biasa dan memungkinkan dinamisme yang jauh lebih besar dalam program Objective-C.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.