Theo tôi hiểu, cả Scala và Clojure đều được thiết kế như những ngôn ngữ mới
- phụ thuộc vào JVM và
- dễ dàng tích hợp với mã Java, theo nghĩa là chúng cho phép sử dụng các lớp Java bên trong mã Scala và Clojure.
Bắt đầu với Java 8 (và thậm chí có thể mạnh hơn với các phiên bản tiếp theo của Java), sẽ có những thay đổi về ngữ nghĩa của ngôn ngữ Java.
Tôi muốn hỏi làm thế nào những thay đổi này sẽ ảnh hưởng đến khả năng tương tác giữa Java và Scala / Clojure và hậu quả sẽ ra sao. Ví dụ, vì lambdas trong Java 8 không phải là đối tượng (xem ví dụ ở đây ), Scala và Clojure có thể phải xử lý các giá trị Java không phải là đối tượng. Đây sẽ là một vấn đề?
Tôi có thể nghĩ về các tình huống sau:
- Ngôn ngữ Scala hoặc Clojure sẽ được mở rộng để thích ứng với ngữ nghĩa Java mới (để xử lý các giá trị phi đối tượng mới) và hỗ trợ khả năng tương tác với Java.
- Ngôn ngữ Scala hoặc Clojure sẽ không được mở rộng. Điều này chỉ có thể nếu các tính năng Java mới như giá trị hàm có thể được ánh xạ tới các khái niệm hiện có. Ví dụ, trong Scala, ngay cả một hàm là một đối tượng, vì vậy tôi đoán các hàm Java sẽ lại được bọc vào một số loại đối tượng khi chúng hiển thị với Scala.
- Ngôn ngữ Scala hoặc Clojure sẽ tiếp tục hỗ trợ khả năng tương tác lên tới Java 6 hoặc 7, mà không tuân theo sự phát triển mới nhất của Java. Điều này sẽ yêu cầu các phiên bản Java cũ hơn vẫn được hỗ trợ (ít nhất là bởi OpenJDK hoặc dự án khác), để các ngôn ngữ này có thể dựa trên một nhánh Java bảo thủ / ổn định hơn.
Tóm tắt: chúng ta có thể hy vọng rằng sự phát triển trong tương lai của Java sẽ có tác động đến các ngôn ngữ như Scala và Clojure để duy trì khả năng tương tác với Java không? Có một số (liên kết đến) thảo luận liên tục về chủ đề này đã?
Ghi chú
Tôi có thể tưởng tượng rằng Scala, Clojure và các ngôn ngữ dựa trên JVM khác sẽ không có bất kỳ vấn đề lớn nào khi cập nhật triển khai của chúng lên các phiên bản JVM mới hơn (và các tính năng JVM mới sẽ giúp việc triển khai này trở nên dễ dàng hơn). Câu hỏi của tôi tập trung vào các tính năng của Java như một ngôn ngữ và liệu ngôn ngữ JVM khác có thể "nhìn thấy" / sử dụng các tính năng mới này hay không, không phải là liệu các ngôn ngữ dựa trên JVM sẽ chạy trên JVM mới nhất.
String
là Java String
. Vì vậy, Scala sử dụng các lớp thư viện Java nhất định. Nhưng tôi có thể thay đổi công thức nếu bạn nghĩ nó quá mạnh.