我最近一直在学习scala这种被成为下一代java的语言,应该说它的一些特性挺吸引人的。但我最近注意到Eclipse推出了一个叫做Xtend的语言,在新闻中提到
Eclipse Xtend可以编译成可读的Java代码,类似CoffeeScript之与Javascript。
什么意思?就是把一种语法替换成另一种而已,其机理有点像我们使用的模版引擎,模版语言最终会被替换成目标语言执行。那么scala呢?似乎高级一点,它是直接编译成java class的(或者.net平台的CLR代码)。
但很重要的一点是它本身没有虚拟机实现或者更加底层的支持。那么我想问的是
- Scala没有自己的虚拟机到底有没有问题,这是否会影响它作为一种语言的独立性和执行效率
- java虚拟机,以及CLR虚拟机跟其它的虚拟机有什么区别。因为我发现在这两个虚拟机上有很多其它语言的实现,比如JRuby, JPython, IronPython等等。但是像ruby, python这种语言又都有自己的虚拟机,但没听说在它们的虚拟机上又衍生出什么语言的。
scala 编译器是把 .scala 编译成 bytecode 运行在 jvm 上,因此受限于 jvm,当然对scala 有极大的影响。从我个人观点来看 scala 更像是 java 语言上的一种更高层的封装,例如 scala 的 covariance 和 contravariance。
jRuby 这些是希望在 ruby 的灵活性上能够使用 java 各种类库,且经过编译之后能获得性能上的提高,ruby 做 dsl 是很方便的。