斯卡拉炸弹?(像拉链炸弹)

Kim*_*bel 27 compiler-construction scala class

请原谅这个有趣的标题,我正在使用它与" 拉链炸弹 " 类比.是否可以创建一个scala源文件,在编译时会产生大量的类文件(或非常大的单个类文件)?有没有什么方法可以使类文件的大小比源文件的大小线性增长更快?

Rex*_*err 32

专业化本身就是专业类型参数数量的指数.

class Huge[@specialized A, @specialized B, @specialized C](
  val a: A, val b: B, val c: C
) {} // 730 files, 2.9 MB

class Gigantic[@specialized A, @specialized B, @specialized C, @specialized D](
  val a: A, val b: B, val c: C, val d: D
) {} // 6562 files, 26 MB
Run Code Online (Sandbox Code Playgroud)

模式匹配也可能涉及复杂情况下的大量代码重复(尽管我发现很难准确预测何时会发生这种情况).

  • Rex,有关信息,为模式匹配https://issues.scala-lang.org/browse/SI-1133引发了一个错误,它失败了,因为生成的代码太多了.这应该用2.10中的新虚拟模式匹配器修复. (2认同)