Halaman ini menegaskan hal itu
banyak bahasa tidak menggunakan subtyping implisit (ekuivalensi struktural), lebih memilih subtyping eksplisit / dinyatakan (deklarasi ekuivalensi)
Saya sebagian besar menggunakan bahasa pemrograman yang menggunakan subtyping eksplisit . Apa keuntungan dari subtyping implisit, seperti yang dijelaskan dalam catatan di atas.
pl.programming-languages
type-theory
Frankie Ribery
sumber
sumber
Jawaban:
Jawaban singkatnya adalah "untuk memverifikasi properti tambahan dari kode yang ada". Jawaban yang lebih panjang mengikuti.
Saya tidak yakin "implisit" vs "eksplisit" adalah terminologi yang baik. Perbedaan ini kadang-kadang disebut subtyping "struktural" vs "nominal". Kemudian ada juga perbedaan kedua dalam kemungkinan interpretasi subtyping struktural (dijelaskan secara singkat). Perhatikan bahwa ketiga interpretasi subtyping benar-benar ortogonal, sehingga tidak masuk akal untuk membandingkannya satu sama lain, daripada memahami penggunaan masing-masing.
Perbedaan operasional utama dalam menafsirkan hubungan subtyping struktural A <: B adalah apakah itu disaksikan oleh paksaan nyata dengan konten komputasi (runtime / compiletime), atau apakah itu dapat disaksikan oleh paksaan identitas. Jika yang pertama, properti teoretis penting yang harus dimiliki adalah "koherensi", yaitu, jika ada beberapa cara untuk menunjukkan bahwa A adalah subtipe substruktural dari B, masing-masing paksaan yang menyertainya harus memiliki konten komputasi yang sama.
Tautan yang Anda berikan tampaknya memiliki interpretasi kedua tentang subtyping struktural dalam pikiran, di mana A <: B dapat disaksikan oleh pemaksaan identitas. Ini kadang-kadang disebut "subset interpretasi" dari subtyping, mengambil pandangan naif bahwa suatu tipe mewakili satu set nilai, dan jadi A <: B kalau-kalau setiap nilai tipe A juga merupakan nilai tipe B. Itu juga kadang-kadang disebut "mengetik perbaikan", dan makalah yang baik untuk membaca untuk motivasi asli adalah jenis Refemanement Freeman & Pfenning untuk ML . Untuk inkarnasi yang lebih baru di F #, Anda dapat membaca Bengston et al, tipe perbaikan untuk implementasi yang aman. Ide dasarnya adalah untuk mengambil bahasa pemrograman yang ada yang mungkin (atau mungkin tidak) sudah memiliki tipe tetapi di mana tipe tidak menjamin semua yang banyak (misalnya, hanya keamanan memori), dan mempertimbangkan lapisan kedua jenis memilih subset dari program dengan properti tambahan, lebih tepat.
(Sekarang, saya berpendapat bahwa teori matematika di balik interpretasi subtyping ini masih belum dipahami sebagaimana mestinya, dan mungkin itu karena penggunaannya tidak dihargai secara luas sebagaimana mestinya. Satu masalah adalah bahwa "set interpretasi tipe nilai terlalu naif, sehingga terkadang diabaikan dan tidak disempurnakan. Untuk argumen lain bahwa interpretasi subtyping ini layak mendapat perhatian matematis, bacalah pengantar Subspaces Paul Taylor dalam Abstrak Dualitas Batu .)
sumber
Jawaban ini adalah semacam suplemen minimal untuk jawaban luar biasa Noam. Salah satu titik data yang menarik adalah nasib konsep C ++, yang kandas pada upaya untuk menyatukan gagasan nominal dan struktural jenis.
Ada artikel yang bagus di sini, dengan tautan ke banyak diskusi yang relevan: http://bartoszmilewski.wordpress.com/2010/06/24/c-concepts-a-postmortem/
Namun, penulisan di atas tidak membahas masalah nominal vs struktural secara mendalam. Ada langganan lain di sini, yaitu: http://nerdland.net/2009/07/alas-concepts-we-hardly-knew-ye/
Makalah utama yang sama-sama menunjuk pada Bjarne Stroustrup adalah “Penyederhanaan Penggunaan Konsep”: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2906.pdf , yang masuk ke dalam praktik masalah yang dihadapi secara mendalam.
Secara keseluruhan, diskusi lebih pragmatis daripada keras. Namun, ini memberikan wawasan yang baik tentang jenis pengorbanan yang terlibat dalam masalah ini, terutama dalam konteks bahasa besar yang ada.
sumber