21

Scala 是一门很棒的语言,但我想知道如果它有自己的运行时如何改进?
即,由于 JVM 的选择而做出了哪些设计选择?

4

3 回答 3

26

我知道的两个最重要的妥协是:

  • 类型擦除(“反射类型”):它必须管理一个 Manifest以绕过 Java 编译(独立于 JVM,出于向后兼容性的原因)。
  • 原始类型的集合:例如:数组

    Scala 2.8 中处理数组的新方案。该方案依赖于隐式转换和清单来集成数组,而不是装箱/拆箱和其他编译器魔术

在管理泛型类型(有界限)时,这些是 JVM 的两个主要限制:Java JVM 不会在泛型对象中保留确切的类型使用,并且它具有“原始”类型。


但你也可以考虑:

为了涵盖尽可能多的可能性,Scala 提供:

  • 常规类类型,
  • 值类类型,
  • 不可为空的类型,
  • 单子类型,
  • 特质类型,
  • 单例对象类型(过程模块、实用程序类等),
  • 复合类型,
  • 功能类型,
  • 案例类,
  • 路径相关类型,
  • 匿名类型,
  • 自我类型,
  • 键入别名,
  • 通用类型,
  • 协变泛型类型,
  • 逆变泛型类型,
  • 有界泛型类型,
  • 抽象类型,
  • 存在类型,
  • 隐式类型,
  • 增强型,
  • 查看有界类型,以及
  • 当所有其他方法都失败时,允许一种鸭子类型的结构类型
于 2010-04-21T12:48:16.140 回答
20

本文是与 Martin Odersky(Scala 的创建者)的讨论,包括在 Scala 中为与 Java 兼容所做的妥协。文章提到:

  1. 方法的静态重载
  2. 兼具特质和类别
  3. 包含null指针。
于 2010-04-21T18:33:41.720 回答
3

与文化宿醉相比,运行时的问题更少:普遍平等、散列、toString。

与 VM 的联系更紧密:默认情况下严格评估、不纯函数、异常。

于 2010-04-23T16:33:22.383 回答