내가 이해하는 한, Scala와 Clojure는 모두 새로운 언어로 설계되었습니다.
- JVM에 의존하고
- Scala 및 Clojure 코드 내에서 Java 클래스를 사용할 수 있다는 점에서 Java 코드와 쉽게 통합됩니다.
Java 8부터 (그리고 이후 버전의 Java에서는 더 강력하게) Java 언어의 의미에 변화가있을 것입니다.
이러한 변경 사항이 Java와 Scala / Clojure 간의 상호 운용성에 어떤 영향을 미치며 그 결과는 무엇인지 묻고 싶었습니다. 예를 들어 Java 8의 람다는 객체가 아니므로 (예 : 여기 참조 ) Scala와 Clojure는 객체가 아닌 Java 값을 처리해야 할 수도 있습니다. 이것이 문제입니까?
다음과 같은 시나리오를 생각할 수 있습니다.
- Scala 또는 Clojure 언어는 새로운 Java 의미에 적응하고 (새로운 비 객체 값을 처리하기 위해) Java와의 상호 운용성을 지원하도록 확장 될 것입니다.
- 스칼라 또는 클로저 언어는 확장 되지 않습니다 . 함수 값과 같은 새로운 Java 기능을 기존 개념에 맵핑 할 수있는 경우에만 가능합니다. 예를 들어 스칼라에서는 함수조차 객체이므로 Java 함수가 스칼라에 표시되면 다시 일종의 객체로 래핑됩니다.
- Scala 또는 Clojure 언어는 최신 Java 개발을 수행하지 않고도 Java 6 또는 7까지의 상호 운용성을 계속 지원합니다. 이를 위해서는 이전 버전의 Java를 계속 지원해야합니다 (적어도 OpenJDK 또는 다른 프로젝트에서). 이러한 언어는보다 보수적이고 안정적인 Java 분기를 기반으로 할 수 있습니다.
요약 : 향후 Java 개발이 Java와의 상호 운용성을 유지하기 위해 Scala 및 Clojure와 같은 언어에 영향을 미칠 것으로 예상 할 수 있습니까? 이 주제에 대해 이미 진행중인 토론이 있습니까?
노트
Scala, Clojure 및 기타 JVM 기반 언어에는 새로운 버전의 JVM으로 구현을 업데이트하는 데 큰 문제가 없을 것입니다 (그리고 새로운 JVM 기능으로 인해이 구현이 훨씬 쉬워 질 것입니다). 필자의 질문은 언어로서의 Java 기능과 JVM 기반 언어가 최신 JVM에서 실행 될지 여부가 아니라 다른 JVM 언어가 이러한 새로운 기능을 "확인"/ 사용할 수 있는지 여부에 초점을 맞추고 있습니다.
String
는 Java String
입니다. 스칼라는 특정 Java 라이브러리 클래스를 사용합니다. 그러나 너무 강하다고 생각되면 공식을 변경할 수 있습니다.