目录

Language

标准库

涵盖 Scala 标准库的参考与概览

本篇向欲迁移至 Scala 2.13 的容器用户介绍了主要变更并展示了如何通过 Scala 2.11,2.12 和 2.13 进行交叉编译

By Julien Richard-Foy

这几篇介绍了引进到 Scala 2.13 中的容器框架的架构,对照容器API就能知晓更多框架内部工作机制

By Martin Odersky, Lex Spoon and Julien Richard-Foy

从本篇中你会了解到如何利用容器框架通过几行代码来定义自己的容器,来重用来自框架的绝大部分容器功能。

By Julien Richard-Foy

本篇展示了如何定制可应用于任意容器类型并返回相同类型的操作,以及如何定制带有欲编译容器类型参数的操作

语言

涵盖 Scala 语言特性的参考与概览

字符串内插允许用户在字符串字面插值中直接嵌入变量引用。这里有个例子: String Interpolation allows users to embed variable references directly in processed string literals. Here’s an example:

val name = "James"
  println(s"Hello, $name")  // Hello, James
上例中,字面值 s"Hello, $name" 是个字符串字面插值,意味着编译器会对该字面值做些额外工作。字符串字面插值通过双引号前增加前导字符来表示。字符串插值由 SIP-11 引入,其中包含了所有实现细节。

By Josh Suereth

Scala 2.10 中引入了一个新特性叫隐式类。隐式类是一个由 implicit 关键字标记的类,当类在作用域内时该关键字使得类的主构造器可用于隐式转换。

By Mark Harrah

值类是 Scala 中摒弃创建运行时对象的一种新机制,可通过定义 AnyVal 的子类来实现

创作库

参考如何为 Scala 生态贡献开源库

By Julien Richard-Foy

列出库作者为库发布及库文档所需设置的所有工具

并行和并发编程

涵盖 Scala 并行和并发编程库的完全指南

By Philipp Haller, Aleksandar Prokopec, Heather Miller, Viktor Klang, Roland Kuhn, and Vojin Jovanovic

Futures 提供了一种推导并行执行多个操作的方式,即高效非阻塞的方式。一个 Future 就是一个可能还不存在的值的占位对象。通常来讲,Future 是并发赋值但顺序使用。这种方式来组织并发任务结果常常是更快的异步的非阻塞的并行代码。

兼容性

各种(非)兼容性

Scala版本与JDK版本的兼容性

当两个 Scala 版本是二进制兼容时,在一个 Scala 上编译的项目连接在另一个 Scala 的运行时将是安全的。安全的运行时连接(仅!)意味着 JVM 在这种混合场景下运行你的程序没有抛出连接错误(及其子类),且假使编译和运行在单一版本的 Scala 上没问题的情况下。具体点说,就是可能在你的运行时类路径中有外部依赖,这些依赖使用了跟你正在编译用到的不同版本的 Scala,只要他们是二进制兼容的。换句话说,在二进制兼容的不同版本上分开编译相比于在同一个版本上编译和运行所有东西不会带来问题。

一个多元综合的库集合对于任何软件生态来说都是重要的。尽管易于开发和分发 Scala 库,好的库管理者却不仅仅是写代码和发布它。此篇中覆盖了二进制兼容性的重要话题。

工具

关于核心 Scala 工具的参考材料,如 Scala REPL 和 Scaladoc 生成

Scala REPL 是一个对 Scala 表达式求值的工具 (scala)

scala 命令会通过包装源脚本到一模板中来执行它,然后编译并执行结果程序

Scala 的 API 文档生成工具

Contents

编译器

涵盖 Scala 编译器的参考和概览:编译器插件,反射,以及元编程工具比如宏

By Lex Spoon and Seth Tisue

编译器插件允许定制和扩展 Scala 编译器。本篇导引描述了插件设施并带你领略如何创作一个简单插件

By Community

控制 scalac 如何编译代码的各种选项

By Torsten Schmits

一个新的用户友好的错误消息引擎,可以打印依赖的隐式链,颜色区分找到的和所需的类型差异

遗留问题

涵盖一些与最近的 Scala 版本(2.12+)不再相关的特性的参考

By Martin Odersky and Lex Spoon

本篇细致地描述了 Scala 容器框架的架构,对比容器 API 你会发现更多框架的内部工作机制。你也会学到该架构如何帮你通过几行代码定义自己的容器,来重用来自框架的绝大部分容器功能。