page contents

SCALA 3.1.2 发布

4 月初,Scala 宣布发布 3.1.2 版本,该版本带来了社区期待的一些重大改进。

attachments-2022-05-HzoyL5Ih627477f042b9c.png

4 月初,Scala 宣布发布 3.1.2 版本,该版本带来了社区期待的一些重大改进。

可配置的 Scala output version

新版本带来了实验性配置 Scala output version 的可能性,这意味着编译器现在可以生成 TASTy 文件和类文件,这些文件采用 Scala 旧版本(目前是 3.0.x) 的格式,有效地指定了能够阅读你的编译代码的编译器的最低版本。

使用 Scala3.1.2 编译库时,可以将 output version 设置为 Scala3.0 版本,编译后的库可以被 Scala3.0、Scala3.1 或者任何未来版本编译的代码使用。所有生成的 TASTy 文件都将兼容 Scala 3.0 和更高版本。

虽然编译器本身没有被明确标记为实验性,但当前版本在 Scala 系统中的定位暂且没有确定。官方表示,他们热切的期望库维护者的反馈意见,希望听取大众的意见来做出正确的策略来兼容低 Scala 版本编译的代码,以便可以在兼容性和语言发展之间找到平衡。

Current support

你可以通过设置 -scala-output-version 参数来设置 Scala output version。

从 1.7.0-M1 版本开始,可以通过设置 scalaOutputVersion ,来设置编译器标志以及哪个版本的标准库将被指定为你项目的依赖。

ThisBuild / scalaVersion := "3.1.2" 
ThisBuild / scalaOutputVersion := "3.0.2"

scalaOutputVersion 选项可以保证你在交叉编译的情况下仍可以顺利编译(例如,你的项目中包含宏且同时支持 Scala2 和 Scala3)。在这种情况下,如果 scalaVersion 中的编译器还不支持 -scala-output-version 标志,你只需要为 scalaOutputVersion 和 scalaVersion 设置相同的值(相当于不定义 scalaOutputVersion)。例如

ThisBuild / scalaVersion := "3.1.2" 
ThisBuild / crossScalaVersions := List("2.13.8", "3.1.2") 
ThisBuild / scalaOutputVersion := { 
    CrossVersion.partialVersion(scalaVersion.value) match { 
        case Some((3, _)) => "3.0.2" case _ => scalaVersion.value 
    }
}

对其他兼容性标志的修改

目前的 output compatibility flags 非常混乱,增加一个新的标志只会使情况更糟。因此,官方决定重新命名现有的标志。-release 现在是 -java-output-version,而 - Xtarget 是 -Xunchecked-java-output-version。为了兼容起见,旧的名字被保留为别名。

其他改进

  • 编译期间传递 -Xmacro-settings 标志来实现代码中自定义宏的行为。此功能目前处于试验阶段,例如,你可以用 -Xmacro-settings:present,key=value 编译以下代码:
//> using options "-Xmacro-settings:present,key=value" 
import scala.quoted.* 
inline def customizable = ${ customizableImpl } 
def customizableImpl(using Quotes) = 
    import quotes.reflect.* 
    val settings = CompilationInfo.XmacroSettings 
    val present = settings.contains("present") // true 
    val notPresent = settings.contains("not-present") // false 
    val withValue = settings.collectFirst { 
        // Some("value") case s"key=$value" => value
    } 
??? // Do something fancy with your settings
  • 使用 -e flag 运行 scala 命令,使命令行快速执行 Scala 语句。
scala -e "println(22*38)"
  • 在 typer 中有新的优化,在某些情况下可能会导致显著的速度提升。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-S6SvVJbK62b3dcdcde757.jpeg

  • 发表于 2022-05-06 09:21
  • 阅读 ( 446 )
  • 分类:行业资讯

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1324 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章