据我了解,Scala和Clojure都被设计为新的语言,
- 取决于JVM,并且
- 从某种意义上说,它们可以轻松地与Java代码集成,因为它们允许在Scala和Clojure代码中使用Java类。
从Java 8开始(或者在后续的Java版本中可能更强大),Java语言的语义将发生变化。
我想问一下这些变化将如何影响Java与Scala / Clojure之间的互操作性,以及将会带来什么后果。例如,由于Java 8中的lambda不是对象(请参见here),所以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
是Java String
。因此,Scala使用某些Java库类。但是,如果您认为该公式太强,我可以更改其公式。