【发布时间】:2011-02-10 13:54:00
【问题描述】:
Scala 是一门很棒的语言,但我想知道如果它有自己的运行时如何改进?
IE。由于 JVM 的选择而做出了哪些设计选择?
【问题讨论】:
标签: scala jvm language-design scala-2.8 jvm-languages
Scala 是一门很棒的语言,但我想知道如果它有自己的运行时如何改进?
IE。由于 JVM 的选择而做出了哪些设计选择?
【问题讨论】:
标签: scala jvm language-design scala-2.8 jvm-languages
我知道的两个最重要的妥协是:
Scala 2.8 中处理数组的新方案。该方案依赖于隐式转换和清单来集成数组,而不是装箱/拆箱和其他编译器魔法
在管理泛型类型(有界限)方面,这是 JVM 的两个主要限制:Java JVM 不保留泛型对象中使用的确切类型,它具有“原始”类型。
但你也可以考虑:
@tailrec annotation)@proxy)
为了涵盖尽可能多的可能性,Scala 提供了:
- 常规类类型,
- 值类类型,
- 不可为空的类型,
- Monad 类型,
- 特征类型,
- 单例对象类型(过程模块、实用程序类等),
- 复合类型,
- 函数类型,
- 案例类,
- 依赖路径的类型,
- 匿名类型,
- 自我类型,
- 类型别名,
- 泛型类型,
- 协变泛型,
- 逆变泛型,
- 有界泛型类型,
- 抽象类型,
- 存在的类型,
- 隐式类型,
- 增强类型,
- 查看有界类型,以及
- 在所有其他方法都失败时允许进行某种形式的鸭子类型的结构类型
【讨论】:
This article 是与 Martin Odersky(Scala 的创建者)的讨论,其中包括在 Scala 中为与 Java 兼容而做出的妥协。文章提到:
null 指针。【讨论】:
运行时的问题比文化遗留问题要少:普遍平等、散列、toString。
与 VM 的联系更紧密:默认评估严格、不纯函数、异常。
【讨论】:
toString有什么问题?
Object#toString 显示给用户。 2) Collection[A]#toString 在显示A 类型元素的方式上不灵活。请参阅scalaz.Show 了解替代方案。