Sejauh yang saya mengerti, baik Scala dan Clojure telah dirancang sebagai bahasa baru itu
- tergantung pada JVM, dan
- mudah diintegrasikan dengan kode Java, dalam arti bahwa mereka memungkinkan untuk menggunakan kelas Java di dalam kode Scala dan Clojure.
Dimulai dengan Java 8 (dan mungkin bahkan lebih kuat dengan versi Java berikutnya), akan ada perubahan dalam semantik bahasa Java.
Saya ingin bertanya bagaimana perubahan ini akan berdampak pada interoperabilitas antara Jawa dan Scala / Clojure dan apa konsekuensinya. Misalnya, karena lambdas di Java 8 bukan objek (lihat misalnya di sini ), Scala dan Clojure mungkin harus berurusan dengan nilai-nilai Java yang bukan objek. Apakah ini akan menjadi masalah?
Saya dapat memikirkan skenario berikut:
- Bahasa Scala atau Clojure akan diperluas untuk beradaptasi dengan semantik Java baru (untuk menangani nilai-nilai non-objek baru) dan mendukung interoperabilitas dengan Java.
- Bahasa Scala atau Clojure tidak akan diperpanjang. Ini hanya akan mungkin jika fitur Java baru seperti nilai fungsi dapat dipetakan ke konsep yang ada. Misalnya, dalam Scala bahkan fungsi adalah objek, jadi saya kira fungsi Java akan dibungkus lagi menjadi beberapa jenis objek ketika mereka menjadi terlihat oleh Scala.
- Bahasa Scala atau Clojure akan terus mendukung interoperabilitas hingga Java 6 atau 7, tanpa mengikuti perkembangan Java terbaru. Ini membutuhkan versi Java yang lebih lama masih didukung (setidaknya oleh OpenJDK atau proyek lain), sehingga bahasa-bahasa ini dapat didasarkan pada cabang Jawa yang lebih konservatif / stabil.
Ringkasnya: dapatkah kita berharap bahwa perkembangan Jawa di masa depan akan berdampak pada bahasa-bahasa seperti Scala dan Clojure untuk mempertahankan interoperabilitas dengan Jawa? Apakah sudah ada (tautan ke) diskusi berkelanjutan tentang topik ini?
Catatan
Saya dapat membayangkan bahwa Scala, Clojure, dan bahasa berbasis JVM lainnya tidak akan memiliki masalah besar dalam memperbarui implementasi mereka ke versi JVM yang lebih baru (dan bahwa fitur JVM baru akan membuat implementasi ini lebih mudah). Pertanyaan saya berfokus pada fitur Java sebagai bahasa dan apakah / bagaimana bahasa JVM lain akan dapat "melihat" / menggunakan fitur-fitur baru ini, bukan pada apakah bahasa berbasis JVM akan berjalan pada JVM terbaru.
String
adalah Java String
. Jadi Scala menggunakan kelas perpustakaan Java tertentu. Tetapi saya dapat mengubah formulasi jika Anda pikir itu terlalu kuat.