东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

SCALA 2.12 路线图

  • 2014-07-05
  • 本文字数:1630 字

    阅读完需:约 5 分钟

Scala 官方网站于 6 月 30 日发布了 Scala 2.12 路线图,新版本需要 Java 8 的支持。以下是该路线图的详细内容,英文原文请点击这里

目标

  • 最小化用户和类库维护者的迁移成本。
  • 在一段时间内继续支持 Java 6(仅针对 Scala 2.11)。
  • 跟踪 Java 平台的进展。

如何实现

  • 即将发布的 2.11.x 版本将会引入以下实验特性:Java 8 风格的闭包编译、 Miguel 的新后端和优化器
  • 通过完全向后兼容的源码轻松地实现 2.11 和 2.12 版本之间的交叉构建,Scala 团队并不会移除废弃的方法,但是会支持可选的废弃错误(译者注:根据用户的选择决定是否告诉用户他们使用了废弃的方法)。
  • 官方构建的 Scala 2.12 将会以 Java 8 为目标平台(因此运行也需要 Java 8)。在默认情况下将会使用新的后端和优化器。

背景

  • 在没有对 artifactId 做进一步命名调整之前无法让一个 Scala 二进制版本以两个不同的 Java 版本为目标。即使确实能够通过 maven 指定所需的 Java 版本,这个分支对于生态系统而言也会是一个巨大的负担。因此,所需 Java 版本与 Scala(二进制)版本必须匹配。
  • 通过在这两个版本上运行同样的社区构建(Community Build)检查 2.11/2.12 的交叉构建。为了提升源码的向后兼容性,Scala 2.12 不会移除废弃的成员。但是如果用户在代码中使用了 2.11.0 版本或者更早版本中的废弃成员,那么默认情况下 2.12 的编译器将会发出废弃错误。原则上,如果针对 Java 6 平台编译 2.12 的类库,那么它应该与 2.11 向后兼容。
  • 紧跟平台的发展是非常重要的,即使 Java 8 中基于 MethodHandle 实现的闭包可能不会马上产生显著的性能收益。对于那些并不支持 Java 8 字节码的平台而言,有两个项目( retrolambda Forax’s JSR292 backport )能够将 Java 8 的 invokedynamic 字节码重写为 Java 6 的字节码。

Scala 2.11 和 2.12 共享的特性

  • 使用 MethodHandle 有效地编译 Lambda(在 2.11 上需要单独的兼容模块)。
  • Java 8 互操作(双向):
    • 改善了 Java 8 字节码的读取支持(已经在 2.11 中实现)
    • 提升并默认打开 SAM 支持。Scala 能够通过它无缝地调用 Java 8 高阶方法(2.11 已经实现,使用 -Xexperimental)
    • 兼容模块让 Java 8 能够调用 Scala 的高阶方法
  • 完全集成 Miguel 的新后端和优化器(重构代码、深入的测试和文档、移除旧的后端)。
  • 风格检查器:一个有效的、社区驱动的平台,它可以实现精确的代码风格检查(在编译器之上构建)。
  • 集合:提升测试覆盖范围、性能和文档。
  • 改善文档:关注于内容(如果想要做贡献,这是一个非常好的起点,也包括工具方面的文档)。
  • 继续改善基础设施(sbt 构建,提升拉请求验证和发布自动化、bug 跟踪器清理和自动化)。

Scala 2.12 专有的特性:更多的 Java 8 特性

以下特性的开发将于 2015 年开始。因为这些特性是二进制不兼容的,所以它们无法移植到 2.11 上。

  • 将 FunctionN 转变成函数式接口( Functional Interface ),这样 Java 8 代码不需要包装器就能调用 Scala 中的高阶方法。
  • 支持 @interface 特征,确保编译成 Java 接口(有助于互操作、性能和二进制兼容性)。
  • Streams:集成进 Scala 集合?
  • 使用 JDK 提供的 forkjoin 类库而不是嵌入自己的。
  • SIP-20 改善了惰性 val 初始化。

时间

Scala 2.10.5 (Q4 2014) 将会是 2.10 的最后一个版本。Scala 团队打算在 2014 年发布 5 个 2.11.x 版本,在 2015 年还会发布几个版本。2.12 将会从 2014 Q4 开始开发,2015 年团队的开发重心将会转移到 2.12。

2.10.0

04/01/2013

第一个 2.10.x 版本

2.11.0

16/04/2014

第一个 2.11.x 版本

2.11.1

19/05/2014

复制代码
2.11.2

21/07/2014

复制代码
2.11.3

29/09/2014

复制代码
2.10.5

Q4 2014

最后一个 2.10.x 版本

2.12.0-M1

24/11/2014

复制代码
2.11.4

Dec 2014

复制代码
2.12.0-M{2,3,4}

Q{1,2,3} 2015

按季度发布 2.12.0-Mx 版本

2.12.0-M5

Oct 2015

复制代码
2.12.0-RC1

Nov 2015

M1 发布一年之后

2.12.0

Jan 2016


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-07-05 00:343810
用户头像

发布了 321 篇内容, 共 115.9 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

架构感悟 6- 平衡之美

旭东(Frank)

Java这么优秀,我当然要深入啦

程序员小跃

Java Lambda

week6.课后作业

个人练习生niki👍

极客大学架构师训练营

架构师训练营第六周学习总结

fenix

极客大学架构师训练营

黑鹰坠落

escray

上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB

Kerwin

Java MySQL ES 深度分页

1. react起始 | 2020年前端再入门系列连载

chaozh

大前端 React

400GE燎原前夜,智能IP网络的核心路由器巅峰际会

脑极体

架构师训练营第 06 周—— 练习

李伟

极客大学架构师训练营

By Experience的三个层次 -- 领域驱动设计的经验之谈

冯文辉

架构 领域驱动设计 DDD 架构设计

LeetCode题解:15. 三数之和,JavaScript双循环+HashMap,详细注释

Lee Chen

大前端 LeetCode

架构师训练营 Week 06 总结

Wancho

CAP的原理

满山李子

架构师训练营第 06 周——总结

李伟

极客大学架构师训练营

记一次Apache的代码导致生产问题

java金融

Java Apache spring BeanUtils

架构设计篇之中台战略思想与落地

小诚信驿站

架构设计 刘晓成 中台战略 服务化改造

架构师训练营 Week 06 作业

Wancho

为了保存VuePress构建的网站为PDF,我竟然。。。

Leetao

Python python 爬虫 PDF vuepress pdfkit

并发业务中,线程安全与否很重要,来看看你懂多少?

Java小咖秀

Java 多线程与高并发

朱嘉明:区块链对深入改革的意义何在?

CECBC

区块链技术 政策扶持 块链与经济 区块链功能 产业数字化

分布式系统架构学习总结(分布式数据库和NoSQL)

qihuajun

架构师第六周作业及总结

傻傻的帅

架构师训练营第六章总结

叮叮董董

架构师训练营第六章作业

叮叮董董

负载均衡

满山李子

[架构师训练营]Week03 - 作业

谭方敏

用“实例化需求”,让需求澄清更高效

小隐乐乐

Week 6 作业

Shawn

redis系列之——数据类型bitmaps:今天你签到了吗?

诸葛小猿

redis bitmaps bloomfilter

从面试到入职到离职,我在B站工作的30天时光!!!

诸葛小猿

面试 B站 哔哩哔哩 收钱吧

极客时间架构师训练营 - week6 - 作业 2

jjn0703

极客大学架构师训练营

SCALA 2.12路线图_Scala_孙镜涛_InfoQ精选文章