เท่าที่ฉันเข้าใจทั้ง Scala และ Clojure ได้รับการออกแบบเป็นภาษาใหม่ที่
- ขึ้นอยู่กับ JVM และ
- รวมเข้ากับโค้ด Java ได้ง่ายในแง่ที่อนุญาตให้ใช้คลาส Java ภายในโค้ด Scala และ Clojure
เริ่มต้นด้วย Java 8 (และอาจรุนแรงยิ่งขึ้นกับ Java รุ่นถัดไป) จะมีการเปลี่ยนแปลงในความหมายของภาษา Java
ฉันต้องการถามว่าการเปลี่ยนแปลงเหล่านี้จะส่งผลกระทบต่อการทำงานร่วมกันระหว่าง Java และ Scala / Clojure อย่างไรและผลที่ตามมาจะเป็นอย่างไร ตัวอย่างเช่นเนื่องจาก lambdas ใน Java 8 ไม่ใช่วัตถุ (ดูเช่นที่นี่ ) Scala และ Clojure อาจต้องจัดการกับค่า Java ที่ไม่ใช่วัตถุ นี่จะเป็นปัญหาหรือไม่?
ฉันนึกถึงสถานการณ์ต่อไปนี้:
- ภาษา Scala หรือ Clojure จะถูกขยายเพื่อปรับให้เข้ากับความหมาย Java ใหม่ (เพื่อจัดการกับค่าที่ไม่ใช่วัตถุใหม่) และรองรับการทำงานร่วมกันกับ Java
- ภาษา Scala หรือ Clojure จะไม่ถูกขยาย สิ่งนี้จะเกิดขึ้นได้หากคุณลักษณะ Java ใหม่เช่นค่าฟังก์ชันสามารถแมปกับแนวคิดที่มีอยู่แล้วเท่านั้น เช่นใน Scala แม้ฟังก์ชั่นเป็นวัตถุดังนั้นฉันคิดว่าฟังก์ชั่น Java จะถูกห่อเป็นวัตถุบางอย่างอีกครั้งเมื่อพวกเขากลายเป็น Scala
- ภาษา Scala หรือ Clojure จะยังคงสนับสนุนการทำงานร่วมกันได้ถึง Java 6 หรือ 7 โดยไม่ต้องติดตามการพัฒนา Java ล่าสุด สิ่งนี้ต้องการให้ Java รุ่นเก่ายังคงได้รับการสนับสนุน (อย่างน้อยก็โดย OpenJDK หรือโครงการอื่น) เพื่อให้ภาษาเหล่านี้สามารถยึดตามสาขาจารีต / เสถียรของ Java ได้
สรุป: เราคาดหวังได้หรือไม่ว่าการพัฒนา Java ในอนาคตจะส่งผลกระทบต่อภาษาเช่น Scala และ Clojure เพื่อรักษาความสามารถในการทำงานร่วมกันกับ Java มีการอภิปราย (ลิงก์ไปยัง) ในหัวข้อนี้อย่างต่อเนื่องหรือไม่?
บันทึก
ฉันสามารถจินตนาการได้ว่า Scala, Clojure และภาษาที่ใช้ JVM อื่น ๆ จะไม่มีปัญหาสำคัญใด ๆ ในการอัปเดตการใช้งานเป็น JVM เวอร์ชันใหม่ (และฟีเจอร์ JVM ใหม่นี้จะทำให้การติดตั้งนี้ง่ายยิ่งขึ้น) คำถามของฉันมุ่งเน้นไปที่คุณสมบัติของ Java เป็นภาษาและ / ภาษาอื่น ๆ ของ JVM จะสามารถ "ดู" / ใช้คุณสมบัติใหม่เหล่านี้ได้หรือไม่ไม่ว่าภาษาที่ใช้ JVM จะทำงานกับ JVM ล่าสุดหรือไม่
String
เป็น String
Java Scala ใช้คลาสไลบรารี Java บางคลาส แต่ฉันสามารถเปลี่ยนสูตรได้ถ้าคุณคิดว่ามันแรงเกินไป