Scala发布2.12.0版本
Scala 2.12.0版本正式发布了。为了能用上Java 8 VM的新特性,Scala 2.12.0对它的编译器进行了彻底的修整。
这个版本的Scala包含了一个全新的、功能强大的优化器。
从这个版本开始,所有2.12.x版本均支持百分之百二进制兼容。这个版本跟2.12.0-RC2没有差别。
语言新特性
- Trait可以被编译成带有默认方法的接口
- Lambda语法表达式支持单个抽象方法(SAM)类型
- Lambda表达式会被编译成Java 8风格的字节码
- 支持不完全统一的类型构造推导
- 本地延迟值类型使用新的表示方式和锁作用域
- 改进对Scala.js类型推导的支持
工具的改进
- 新的“GenBCode”后端,可以更快地生成字节码
- 新的优化器,可以做到内联final方法,特定情况下使用lambda代替closure,清理无效代码,避免类型拆装箱
- 全新的文档主题外观
- 可以把Java代码内嵌到文档里
- 改进的Scala REPL
- 可以使用sbt工具构建Scala
包的改进
- Either支持更多偏右的操作
- 改进的scala.concurrent.Future
- Scala和Java 8兼容性的加强
其它变化
- 增加可变的TreeMap实现(#4504)
- ListSet和ListMap支持按插入顺序遍历,性能也得到提升(#5103)
- 类库开发者现在可以使用@deprecatedInheritance和@deprecatedOverriding
- 使用@hideImplicitConversion隐藏隐式转换(#4952)
- 使用@shortDescription自定义方法描述(#4991)
- 不再提倡使用Scala和Java之间的隐式转换,建议使用显式转换
- 不再提倡使用无参数方法到函数值的转换,因为它会导致无法预测的结果(#5327)
- Scala类库可以不依赖sun.misc.Unsafe包,并不再包含forkjoin类库的分支
- 模式匹配里的穷举分析得到改进(#4919)
- 支持动态访问方法参数名,可以在Java工具里使用,也可以通过Java反射暴露出来