Scala 是一种很棒的语言,但我想知道如果它有自己的运行时,如何改进?
IE。由于 JVM 的选择,做出了哪些设计选择?
我所知道的两个最重要的妥协是:
-
类型擦除 http://java.sun.com/docs/books/tutorial/java/generics/erasure.html ("反思类型 http://programming-scala.labs.oreilly.com/ch12.html”):必须管理清单 https://stackoverflow.com/questions/1094173/how-do-i-get-around-type-erasure-on-scala-or-why-cant-i-get-the-type-parameter绕过 Java 编译(出于向后兼容性的原因,独立于 JVM)。
- collection of primitive type: e.g.: arrays http://www.scala-lang.org/sid/7
Scala 2.8 中处理数组的新方案。该方案依赖于隐式转换和清单来集成数组,而不是装箱/拆箱和其他编译器魔法
在管理泛型类型(有边界)时,这是 JVM 的两个主要限制: Java JVM 不会保留泛型对象中的确切类型使用,并且它具有“原始”类型。
但你也可以考虑:
- 尾调用优化是尚未得到 JVM 的完全支持 http://blog.richdougherty.com/2009/04/tail-calls-tailrec-and-trampolines.html, was 无论如何都很难做到 https://stackoverflow.com/questions/105834/does-the-jvm-prevent-tail-call-optimizations(然而 Scala 2.8 引入了the @tailrec注解 http://n4.nabble.com/scala-Manifest-implicits-and-apply-for-DSL-td2001264.html#a2001264)
-
UAP(通用接入原则) http://southernbits.com/index.php/category/jvm/scala/需要模拟(Java不支持),很快就会为价值持有者完成(@proxy) http://n4.nabble.com/scala-universal-access-principle-mutable-properties-and-ValueHolder-type-objects-td2004283.html#a2004283
- 还需要模拟所有混合机制
- 更一般地说,大量静态类型 http://creativekarma.com/ee.php/weblog/comments/static_typing_and_scala/Scala 引入的(对于大多数)需要在 Java 中生成:
为了覆盖尽可能多的可能性,Scala 提供了:
- 常规班级类型,
- 值类类型,
- 不可空类型,
- 单子类型,
- 特质类型,
- 单例对象类型(过程模块、实用程序类等),
- 复合类型,
- 功能类型,
- 案例课,
- 路径依赖类型,
- 匿名类型,
- 自我类型,
- 输入别名,
- 通用类型,
- 协变泛型类型,
- 逆变泛型类型,
- 有界泛型类型,
- 抽象类型,
- 存在主义类型,
- 隐式类型,
- 增强类型,
- 查看有界类型,以及
- 当其他一切都失败时允许鸭子类型的结构类型
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)