Scala在JVM上运行时有何妥协?
Scala是一种很棒的语言,但我想知道如果它有自己的运行时,该如何改进?Scala在JVM上运行时有何妥协?,scala,jvm,language-design,scala-2.8,jvm-languages,Scala,Jvm,Language Design,Scala 2.8,Jvm Languages,Scala是一种很棒的语言,但我想知道如果它有自己的运行时,该如何改进? 也就是说,由于JVM的选择而做出了哪些设计选择?我所知道的两个最重要的折衷是: (“”):它必须绕过Java编译(出于向后兼容性的原因,独立于JVM) 基元类型的集合:例如: Scala 2.8中处理数组的新方案。该方案不依赖装箱/拆箱和其他编译器魔法,而是依赖隐式转换和清单来集成数组 当涉及到管理泛型类型(带边界)时,这是两个主要的JVM限制:Java JVM没有在泛型对象中保留确切的类型使用,并且它有“基本”类型
也就是说,由于JVM的选择而做出了哪些设计选择?我所知道的两个最重要的折衷是:
- (“”):它必须绕过Java编译(出于向后兼容性的原因,独立于JVM)
- 基元类型的集合:例如: Scala 2.8中处理数组的新方案。该方案不依赖装箱/拆箱和其他编译器魔法,而是依赖隐式转换和清单来集成数组
但你也可以考虑:
- 尾部调用优化是,是(还有Scala 2.8引入)
- 需要进行模拟(Java不支持),并且很快就会进行
- 还需要模拟全混合机制
- 更一般地说,Scala引入的应用程序需要(对于大多数应用程序而言)在Java中生成:
- 传统的班级类型
- 值类类型
- 不可为空的类型
- 单子类型
- 特质类型
- 单一对象类型(过程模块、实用程序类等)
- 复合类型
- 功能类型
- 案例类
- 路径相关类型
- 匿名类型
- 自我类型
- 键入别名
- 泛型类型
- 协变泛型类型
- 逆变泛型
- 有界泛型类型
- 抽象类型
- 存在类型
- 隐式类型
- 扩充类型
- 视图边界类型,以及
- 结构类型,当所有其他类型都失败时,允许一种duck类型
null
指针与其说是运行时的问题,不如说是文化宿醉:普遍平等、散列、toString
与VM的联系更为紧密:默认情况下严格的求值、不纯函数、异常。+1表示通用等式和哈希。universal
toString
有什么问题吗?1)很容易意外地向用户显示对象#toString
。2) Collection[A]#toString
在显示A
类型元素的方式上缺乏灵活性。请参见scalaz.Show
,以获取替代方法。请注意:类型列表在中有详细说明(带有链接)