Scala是一种很棒的语言,但是我想知道如果它有自己的运行时,怎么能改进呢?
I.e.由于JVM的选择而做出了哪些设计选择?Scala在JVM上运行了什么?
回答
This article是与Martin Odersky(Scala的创建者)的一次讨论,并包含Scala为了与Java兼容而作出的妥协。文中提到:
- 的方法静态重载
- 有两个性状和类
- 夹杂
null
指针。
我知道的两个最重要的妥协是:
- type erasure(“reflecting on Type”):它有绕过Java编译(独立于JVM的,为了向后兼容的原因)。
- 收集原始类型:例如: - 在斯卡拉2.8处理阵列arrays
新方案。相反,装箱/拆箱和其他编译器法宝的方案依赖于隐式转换和舱单集成阵列
这些是两个主要的JVM的限制,当它涉及到管理的通用型(边界):该Java JVM并不保留通用对象中使用的确切类型,它具有“原始”类型。
但你也可以考虑:
- 尾调用优化not yet full supported by the JVM,为hard to do anyway(然而斯卡拉2.8引入了the
@tailrec
annotation) - UAP (universal Access Principle)需要效仿(不支持Java) ,并且将很快completed for Value Holder (
@proxy
) - 所有混入机制也需要模仿
- mor
为了覆盖尽可能多的可能性,可能的话,Scala中提供:
- 常规E类一般地,huge number of static types通过Scala的需要(对于大多数)在Java中产生引入类型,
- 值类类型,
- 非空类型,
- 单子种类,
- 特征类型,
- 单例对象类型(过程模块,实用类等)),
- 复合类型,
- 功能类型,
- 案例类,
- 路径依赖的类型,
- 匿名类型,
- 自我类型,
- 类型别名,
- 通用
- 协变通用类型,
- Cont ravariant泛型类型,
- 界泛型类型,
- 抽象类型,
- 生存类型,
- 隐式类型,
- 增强型,
- 查看界类型,并
- 结构类型,允许当一切都失败时,鸭子打字的一种形式
注意自我:类型列表是详细的(与链接)在http://stackoverflow.com/questions/3112725/advantages-of-scalas-type-system/3113741#3113741 – VonC 2010-06-26 15:30:02
与文化宿醉相比,运行时问题更少:通用平等,哈希,toString。
与虚拟机的关系更为密切:缺省评估严格,不纯功能,例外。
+1,用于通用平等和散列。通用'toString'有什么问题? – missingfaktor 2010-04-23 19:53:13
1)很容易意外地向用户显示“Object#toString”。 2)'Collection [A]#toString'在显示'A'类型的元素的方式上是不灵活的。请参阅'scalaz.Show'来寻找替代方案。 – retronym 2010-04-23 21:23:13
好的。感谢您的回应。 – missingfaktor 2010-04-24 12:41:31
- 1. 什么JVM运行蚂蚁?
- 2. 运行'.scala'程序时,Scala运行时/ REPL背后发生了什么?
- 3. Scala是否在专有的JVM上运行良好?
- 4. 如何在jvm上运行scala字节码?
- 5. 在OpenJDK JVM上运行cachegrind
- 6. 为什么在AWS EC2上运行的JVM挂起?
- 7. Scala使用JVM运行程序
- 8. 如何从Scala(JVM)运行JavaScript代码?
- 9. 除了Scala之外的JVM上运行的替代多线程优化语言?
- 10. 找出JVM Eclipse运行的是什么
- 11. 在Android上运行scala
- 12. ++运算符在char上做了什么*
- 13. 在JVM中运行时在Scala中使用递归
- 14. Predef.identity在scala中做了什么?
- 15. 在JVM上运行基于JNI的.jar
- 16. 在Ubuntu上运行SOAPUI时JVM崩溃
- 17. 在JVM之上运行/解释C?
- 18. android JVM能在PC上运行吗?
- 19. JVM崩溃,出了什么问题?
- 20. JVM选项:传递了什么值?
- 21. 如何在JVM启动时运行一些Scala代码?
- 22. 将clojure/scala编号附加到正在运行的JVM中
- 23. 为什么scala项目上的travis-ci运行耙子?
- 24. 什么JVM可以在Mac OS 7.5下运行?
- 25. 可以在JVM 8上运行使用JDK 7编译的scala代码吗?
- 26. 当你说“这种语言在JVM上运行”时,它意味着什么?
- 27. 为什么mach_wait_until在模拟器上运行迟了?
- 28. 为什么使用docker?是不是已经在JVM上运行了像WAR文件那样的java文件?
- 29. JVM标志CMSClassUnloadingEnabled实际上做了什么?
- 30. -Xss JVM选项实际上做了什么
很好的参考。 +1 – VonC 2010-04-21 19:22:10