Saya telah mencoba memahami mengapa JDK 8 Lambda Expert Group (EG) memutuskan untuk tidak memasukkan jenis fungsi baru ke dalam bahasa pemrograman Java.
Menuju milis saya menemukan utas dengan diskusi tentang penghapusan jenis fungsi .
Banyak pernyataan yang ambigu bagi saya, mungkin karena kurangnya konteks dan dalam beberapa kasus karena pengetahuan saya yang terbatas tentang implementasi sistem tipe.
Namun, ada beberapa pertanyaan yang saya yakin dapat dirumuskan dengan aman di situs ini untuk membantu saya memahami dengan lebih baik apa artinya.
Saya tahu saya bisa mengajukan pertanyaan di milis, tetapi utasnya sudah tua dan semua keputusan sudah dibuat, jadi kemungkinan besar saya akan diabaikan, terutama melihat bahwa orang-orang ini sudah tertunda dengan rencana mereka.
Dalam jawabannya untuk mendukung penghapusan tipe fungsi dan mendukung penggunaan tipe SAM, Brian Goetz mengatakan:
Tidak ada reifikasi. Ada utas panjang tentang seberapa berguna bagi jenis fungsi untuk diverifikasi. Tanpa reifikasi, tipe-tipe fungsi tertatih-tatih.
Saya tidak dapat menemukan utas yang ia sebutkan. Sekarang, saya dapat memahami bahwa pengenalan tipe fungsi struktural mungkin menyiratkan komplikasi tertentu dalam sistem tipe kebanyakan Java, apa yang saya tidak bisa mengerti adalah bagaimana perbedaan tipe SAM berbeda dalam hal reifikasi.
Bukankah mereka berdua mengalami masalah reifikasi yang sama? Apakah ada yang mengerti bagaimana tipe fungsi berbeda dari tipe SAM yang diparameterisasi dalam hal reifikasi?
Dalam komentar lain Goetz mengatakan:
Ada dua pendekatan dasar untuk mengetik: nominal dan struktural. Identitas nominal didasarkan pada namanya; identitas tipe struktural didasarkan pada apa yang tersusun dari (seperti "tupel int, int" atau "fungsi dari int ke float".) Sebagian besar bahasa memilih sebagian besar nominal atau sebagian besar struktural; tidak ada banyak bahasa yang berhasil mencampur pengetikan nominal dan struktural kecuali "di tepinya." Java hampir seluruhnya nominal (dengan beberapa pengecualian: array adalah tipe struktural, tetapi di bagian bawah selalu ada tipe elemen nominal; generik memiliki campuran nominal dan struktural juga, dan ini sebenarnya merupakan bagian dari sumber banyak keluhan orang tentang obat generik.) Mencangkok sistem tipe struktural (tipe fungsi) ke Java ' Sistem tipe nominal berarti kompleksitas baru dan kasing tepi. Apakah manfaat tipe fungsi sepadan dengan ini?
Bagi Anda yang berpengalaman dalam implementasi sistem tipe. Apakah Anda tahu contoh kompleksitas atau kasus tepi yang ia sebutkan di sini?
Jujur saya bingung dengan tuduhan ini ketika saya menganggap bahwa bahasa pemrograman seperti Scala, yang sepenuhnya didasarkan pada JVM, memiliki dukungan untuk tipe struktural seperti fungsi dan tupel, bahkan dengan masalah reifikasi platform yang mendasarinya.
Jangan salah paham, saya tidak mengatakan bahwa tipe fungsi harus lebih baik daripada tipe SAM. Saya hanya ingin mengerti mengapa mereka mengambil keputusan ini.