Skip to content

modify/correct _zh-cn/index.md #2394

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 87 commits into from
Sep 13, 2022
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
f38f5ff
modify/correct _zh-cn/index.md
benluo May 10, 2022
30add30
modify _zh-cn/scala3/new-in-scala3.md
benluo May 11, 2022
1c937b8
add _zh-cn/scala3/guides/tasty-overview.md
benluo May 11, 2022
3de24bc
Merge branch 'scala:main' into main
benluo May 12, 2022
770e5a7
Change _zh-cn/scala3/guides/tasty-overview.md
benluo May 13, 2022
3edca3b
add few chapters in _zh-cn/overviews/scala3-book
benluo May 16, 2022
adcf494
Merge branch 'scala:main' into main
benluo May 16, 2022
e732e9e
translated all tastes files. in scala3-book.
benluo May 17, 2022
f87d417
Merge branch 'scala:main' into main
benluo May 17, 2022
74405c5
modified according to review.
benluo May 17, 2022
4422ef0
Merge branch 'scala:main' into main
benluo May 18, 2022
313fdff
correct translation according review.
benluo May 18, 2022
300d5cd
Missed one translation. Finish all corrects.
benluo May 18, 2022
13c00a6
Merge branch 'scala:main' into main
benluo May 21, 2022
3f33fc4
add _zh-cn/overviews/scala3-book/first-look-at-types.md
benluo May 21, 2022
e10cf0d
add _zh-cn/overviews/scala3-book/control-structures.md
benluo May 21, 2022
3573d19
add two files as below
benluo May 22, 2022
d8cbad3
add _zh-cn/overviews/scala3-book/domain-modeling-oop.md
benluo May 24, 2022
76f49ec
Merge branch 'scala:main' into main
benluo May 24, 2022
799b1f2
add and modified as below
benluo May 24, 2022
3dd2ec3
add all methods*
benluo May 24, 2022
66a752e
Merge branch 'scala:main' into main
benluo May 25, 2022
8390a95
add functions
benluo May 26, 2022
b48eb7c
add _zh-cn/overviews/scala3-book/packaging-imports.md
benluo May 28, 2022
6504fbf
Merge branch 'scala:main' into main
benluo May 28, 2022
c11754c
add all collections
benluo May 28, 2022
f751a72
add all fp files
benluo May 29, 2022
3098a0f
Merge branch 'scala:main' into main
benluo May 31, 2022
d811aba
add all types files
benluo Jun 5, 2022
b9c6ac0
add all types files
benluo Jun 5, 2022
d8ba669
Merge branch 'scala:main' into main
benluo Jun 5, 2022
a98a687
add all ca-* files
benluo Jun 8, 2022
aadcb0e
add concurrency.md
benluo Jun 10, 2022
b845934
Merge branch 'scala:main' into main
benluo Jun 10, 2022
bb47995
add all tools files
benluo Jun 11, 2022
4bb25d3
Merge branch 'scala:main' into main
benluo Jun 11, 2022
c59f3ba
add interacting-with-java.md
benluo Jun 11, 2022
76e08bf
add all scala-for-* files. Finish all files in Scala3-book.
benluo Jun 16, 2022
d3637fb
corrected broken link in concurrency.md
benluo Jun 16, 2022
4f3b6da
Merge branch 'scala:main' into main
benluo Jun 21, 2022
00e7ca6
Merge branch 'scala:main' into main
benluo Jun 25, 2022
8fa8ac4
Merge branch 'scala:main' into main
benluo Jul 1, 2022
585c7ac
Merge branch 'scala:main' into main
benluo Jul 4, 2022
47aab08
correct ca.* files
benluo Jul 4, 2022
de48d7e
Merge branch 'scala:main' into main
benluo Jul 15, 2022
00edb7d
Merge branch 'scala:main' into main
benluo Jul 17, 2022
ddcf921
modified translation according to review.
benluo Jul 17, 2022
951c842
Merge branch 'scala:main' into main
benluo Jul 19, 2022
7e54512
correct collections-classes.md
benluo Jul 19, 2022
86fdf8b
change translation according to review on Jul 19
Jul 21, 2022
fca798c
Merge branch 'scala:main' into main
benluo Jul 22, 2022
9cdf9fe
Merge branch 'scala:main' into main
benluo Jul 25, 2022
e387055
Merge branch 'scala:main' into main
benluo Jul 27, 2022
6a507ea
modified according to review on Jul 25, 2022.
benluo Jul 27, 2022
cbad07c
Merge branch 'scala:main' into main
benluo Jul 29, 2022
f524cce
Update _zh-cn/overviews/scala3-book/control-structures.md
benluo Jul 29, 2022
774fa7d
Update _zh-cn/overviews/scala3-book/domain-modeling-tools.md
benluo Jul 29, 2022
d64054f
Update _zh-cn/overviews/scala3-book/domain-modeling-tools.md
benluo Jul 29, 2022
e216375
changed according to review on Jul 28, 2022.
benluo Jul 29, 2022
3008f7c
Merge branch 'scala:main' into main
benluo Aug 3, 2022
6e7daca
Merge branch 'scala:main' into main
benluo Aug 10, 2022
2f5c1db
add scala4x.css in fold. Add next in scala-features.md
benluo Aug 10, 2022
65a6a01
Merge branch 'scala:main' into main
benluo Aug 14, 2022
4eb239a
Merge branch 'scala:main' into main
benluo Aug 17, 2022
6549731
Merge branch 'scala:main' into main
benluo Aug 19, 2022
2decccc
Update _zh-cn/overviews/scala3-book/domain-modeling-fp.md
benluo Aug 21, 2022
0051e8b
Update _zh-cn/overviews/scala3-book/domain-modeling-oop.md
benluo Aug 21, 2022
6c267bf
Update _zh-cn/overviews/scala3-book/fun-write-map-function.md
benluo Aug 21, 2022
a523765
Update _zh-cn/overviews/scala3-book/fun-write-map-function.md
benluo Aug 21, 2022
4073ced
Update _zh-cn/overviews/scala3-book/methods-most.md
benluo Aug 21, 2022
5a1aa41
Update _zh-cn/overviews/scala3-book/scala-for-java-devs.md
benluo Aug 21, 2022
07192cf
Update _zh-cn/overviews/scala3-book/taste-objects.md
benluo Aug 21, 2022
40f3e2c
changed all review.
benluo Aug 21, 2022
5ff7904
Merge branch 'scala:main' into main
benluo Aug 24, 2022
c080bac
Merge branch 'scala:main' into main
benluo Aug 25, 2022
ce11fd7
Merge branch 'scala:main' into main
benluo Aug 28, 2022
e908683
Update _zh-cn/overviews/scala3-book/domain-modeling-oop.md
benluo Aug 28, 2022
bf18649
Update _zh-cn/overviews/scala3-book/domain-modeling-oop.md
benluo Aug 28, 2022
3db8200
Update _zh-cn/overviews/scala3-book/methods-most.md
benluo Aug 28, 2022
349b19d
Update _zh-cn/overviews/scala3-book/methods-most.md
benluo Aug 28, 2022
0ef10ad
Update _zh-cn/overviews/scala3-book/methods-most.md
benluo Aug 28, 2022
850bee6
Update _zh-cn/overviews/scala3-book/domain-modeling-oop.md
benluo Aug 28, 2022
1cf9b12
all have been changed according to review.
benluo Aug 28, 2022
67699a2
Merge branch 'scala:main' into main
benluo Sep 1, 2022
4e32489
changed term and delete "next-page" in scala-features.md
benluo Sep 2, 2022
60e8684
Merge branch 'scala:main' into main
benluo Sep 2, 2022
ba6db33
Merge branch 'scala:main' into main
benluo Sep 10, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions _zh-cn/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,37 +12,37 @@ scala3-sections:
- title: "第一步"
links:
- title: "Scala 3 中的新东西"
description: "Scala 3 现存新特性概览"
description: "Scala 3 中令人兴奋的新特性概览"
icon: "fa fa-star"
link: /scala3/new-in-scala3.html
- title: "快速开始"
description: "安装 Scala 3 并开始写些 Scala 代码"
description: "在你的电脑中安装 Scala 3,然后开始写些 Scala 代码"
icon: "fa fa-rocket"
link: /scala3/getting-started.html
- title: "Scala 3 书籍"
description: "一部介绍主要语言特性的线上书"
- title: "Scala 3 册子"
description: "通过一系列小课程来学习 Scala。"
icon: "fa fa-book"
link: /scala3/book/introduction.html
- title: "更多细节"
links:
- title: "迁移指引"
description: "一份帮你从 Scala 2 迁移到 Scala 3 的指引"
description: "一份帮你从 Scala 2 迁移到 Scala 3 的指引"
icon: "fa fa-suitcase"
link: /scala3/guides/migration/compatibility-intro.html
- title: "导览"
description: "关于语言特别之处的详细导览"
description: "关于语言特别之处的详细导览"
icon: "fa fa-map"
link: /zh-cn/scala3/guides.html
- title: "Scala 库 API"
description: "Scala 3 标准库API文档(多个小版本)"
description: "Scala 3 每一个版本的标准库API文档。"
icon: "fa fa-file-alt"
link: https://scala-lang.org/api/3.x/
- title: "语言参考手册"
description: "Scala 3 语言参考手册"
description: "Scala 3 语言参考手册"
icon: "fa fa-book"
link: https://docs.scala-lang.org/scala3/reference
- title: "贡献指南"
description: "Scala 3 编译器指南及如何贡献代码"
description: "Scala 3 编译器指南及如何修复问题"
icon: "fa fa-cogs"
link: /scala3/guides/contribution/contribution-intro.html
- title: "Scala 3 全新的 Scaladoc"
Expand Down Expand Up @@ -109,4 +109,8 @@ scala2-sections:
description: "Scala改进过程(Scala Improvement Process),语言及编译器进展"
icon: "fa fa-cogs"
link: /sips/index.html
- title: "为 Scala 作贡献"
description: "为 Scala 项目作贡献的完整指南"
icon: "fa fa-cogs"
link: /contribute/
---
146 changes: 146 additions & 0 deletions _zh-cn/scala3/guides/tasty-overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
---
layout: singlepage-overview
title: TASTy 概览
---
假定你创建了一个 Scala 3 源代码文件叫 _Hello.scala_:

```scala
@main def hello = println("Hello, world")
```

然后用 `scalac` 编译了该文件:

```bash
$ scalac Hello.scala
```

你会发现在 `scalac` 生成的其它文件结果中,有些文件是以 _.tasty_ 为扩展名:

```bash
$ ls -1
Hello$package$.class
Hello$package.class
Hello$package.tasty
Hello.scala
hello.class
hello.tasty
```

这自然地会引出一个问题,“什么是 tasty?”

## 什么是 TASTy?

TASTy 是从 _Typed Abstract Syntax Trees_ 这个术语的首字母缩写来的。它是 Scala 3 的高级交换格式,在本文档中,我们将它称为 _Tasty_ 。

首先要知道的是,Tasty 文件是由 `scalac` 编译器生成的,并且包含 _所有_ 有关源代码的信息,这些信息包括程序的语法结构,以及有关类型,位置甚至文档的 _所有_ 信息。Tasty 文件包含的信息比 _.class_ 文件多得多,后者是为在 JVM 上运行而生成的。(后面有详细介绍)。

在 Scala 3 中,编译流程像这样:

```text
+-------------+ +-------------+ +-------------+
$ scalac | Hello.scala | -> | Hello.tasty | -> | Hello.class |
+-------------+ +-------------+ +-------------+
^ ^ ^
| | |
你的代码 TASTy 文件 Class 文件
用于 scalac 用于 JVM
(包括完整信息) (不完整信息)
```

您可以通过使用 `-print-tasty` 标志在 _.tasty_ 文件上运行编译器,以人类可读的形式查看 _.tasty_ 文件的内容。
您还可以使用 `-decompile` 标志以类似于 Scala 源代码的形式查看反编译的内容。

```bash
$ scalac -print-tasty hello.tasty
$ scalac -decompile hello.tasty
```

### The issue with _.class_ files

由于象 [类型擦除][erasure] 等问题,_.class_ 文件实际上是代码的不完整表示形式。
演示这一点的一种简单方法是使用 `List` 示例。

_类型擦除_ 意味着当你编写这样的 Scala 代码时,它假定在 JVM 上运行:

```scala
val xs: List[Int] = List(1, 2, 3)
```

该代码被编译为需要与 JVM 兼容的 _.class_ 文件。由于该兼容性要求,该类文件中的代码 --- 您可以使用 `javap` 命令看到它,--- 最终看起来像这样:

```java
public scala.collection.immutable.List<java.lang.Object> xs();
```

该 `javap` 命令输出显示了类文件中包含的内容,该内容是 Java 的表示形式。请注意,在此输出中,`xs` _不是_ 定义为 `List[Int]` ;它基本上表示为 `List[java.lang.Object]` 。为了使您的 Scala 代码与 JVM 配合使用,`Int` 类型已被擦除。

稍后,当您在 Scala 代码中访问 `List[Int]` 的元素时,像这样:

```scala
val x = xs(0)
```

生成的类文件对此行代码进行强制转换操作,您可以将其想象成:

```
int x = (Int) xs.get(0) // Java-ish
val x = xs.get(0).asInstanceOf[Int] // more Scala-like
```

同样,这样做是为了兼容性,因此您的 Scala 代码可以在 JVM 上运行。但是,我们已经有的整数列表的信息在类文件中丢失了。
当尝试使用已编译的库来编译 Scala 程序时,会带来问题。为此,我们需要比类文件中通常可用的信息更多的信息。

此讨论仅涵盖类型擦除的主题。对于 JVM 没有意识到的所有其他 Scala 结构,也存在类似的问题,包括 unions, intersections, 带有参数的 traits 以及更多 Scala 3 特性。

### TASTy to the Rescue

因此,TASTy 格式不是没有关于 _.class_ 文件中原始类型的信息,或者只有公共 API(如Scala 2.13 “Pickle” 格式),而是在类型检查后存储完整的抽象语法树(AST)。存储整个 AST 有很多优点:它支持单独编译,针对不同的 JVM 版本重新编译,程序的静态分析等等。

### 重点

因此,这是本节的第一个要点:您在 Scala 代码中指定的类型在 _.class_ 文件中没有完全准确地表示。

第二个关键点是要了解 _编译时_ 和 _运行时_ 提供的信息之间存在差异:

- 在**编译时**,当 `scalac` 读取和分析你的代码时,它知道 `xs` 是一个 `List[Int]`
- 当编译器将你的代码写入类文件时,它会写 `xs` 是 `List[Object]` ,并在访问 `xs` 的任何地方添加转换信息
- 然后在**运行时** --- 你的代码在 JVM 中运行,--- JVM 不知道你的列表是一个 `List[Int]`

对于 Scala 3 和 Tasty,这里有一个关于编译时的重要说明:

- 当您编写使用其他 Scala 3 库的 Scala 3 代码时,`scalac` 不必再读取其 _.class_ 文件;它可以读取其 _.tasty_ 文件,如前所述,这些文件是代码的 _准确_ 表示形式。这对于在 Scala 2.13 和 Scala 3 之间实现单独编译和兼容性非常重要。

## Tasty 的好处

可以想象,拥有代码的完整表示形式具有[许多好处][benefits]:

- 编译器使用它来支持单独的编译。
- Scala 基于 _Language Server Protocol_ 的语言服务器使用它来支持超链接、命令补全、文档以及全局操作,如查找引用和重命名。
- Tasty 为新一代[基于反射的宏][macros]奠定了良好的基础。
- 优化器和分析器可以使用它进行深度代码分析和高级代码生成。

在相关的说明中,Scala 2.13.6 有一个 TASTy 读取器,Scala 3 编译器也可以读取2.13“Pickle”格式。Scala 3 迁移指南中的 [类路径兼容性页面][compatibility-ref] 解释了此交叉编译功能的好处。

## 更多信息

总之,Tasty 是 Scala 3 的高级交换格式,_.tasty_ 文件包含源代码的完整表示形式,从而带来了上一节中概述的好处。

有关更多详细信息,请参阅以下资源:

- 在 [此视频](https://www.youtube.com/watch?v=YQmVrUdx8TU) 中,Scala 中心的Jamie Thompson 对 Tasty 的工作原理及其优势进行了详尽的讨论
- [库作者的二进制兼容性][binary] 讨论二进制兼容性、源代码兼容性和 JVM 执行模型
- [Scala 3 Transition 的前向兼容性](https://www.scala-lang.org/blog/2020/11/19/scala-3-forward-compat.html) 演示了在同一项目中使用 Scala 2.13 和 Scala 3 的技术

这些文章提供了有关 Scala 3 宏的更多信息:

- [Scala 宏库](https://scalacenter.github.io/scala-3-migration-guide/docs/macros/macro-libraries.html)
- [宏:Scala 3 的计划](https://www.scala-lang.org/blog/2018/04/30/in-a-nutshell.html)
- [Quotes Reflect 的参考文档][quotes-reflect]
- [宏的参考文档](macros)

[benefits]: https://www.scala-lang.org/blog/2018/04/30/in-a-nutshell.html
[erasure]: https://www.scala-lang.org/files/archive/spec/2.13/03-types.html#type-erasure
[binary]: {% link _overviews/tutorials/binary-compatibility-for-library-authors.md %}
[compatibility-ref]: {% link _overviews/scala3-migration/compatibility-classpath.md %}
[quotes-reflect]: {{ site.scala3ref }}/metaprogramming/reflection.html
[macros]: {{ site.scala3ref }}/metaprogramming/macros.html
20 changes: 8 additions & 12 deletions _zh-cn/scala3/new-in-scala3.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
---
layout: singlepage-overview
title: New in Scala 3
title: Scala 3 里的新东西
scala3: true
---

令人振奋的新版 Scala 3 带来了许多改进和新功能。在这里,我们为你提供最重要的变更的快速概述。如果你想深入挖掘,还有一些参考资料供你使用。
令人振奋的新版 Scala 3 带来了许多改进和新功能。在这里,我们为你提供最重要的变更的快速概述。如果你想深入挖掘,还有一些参考资料供你使用:

- [Scala 3 Book]({% link _overviews/scala3-book/introduction.md %}) 面向刚接触 Scala 语言的开发人员。
- [Syntax Summary][syntax-summary] 为您提供了新语法的正式描述。
- [Language Reference][reference] 对 Scala 2 到 Scala 3 的变化做了详细说明。
- [Migration Guide][migration] 为你提供了从 Scala 2 迁移到 Scala 3 的所有必要信息。
- [Scala 3 Contributing Guide][contribution] Scala 3 贡献指南,更深入地探讨了编译器,包括修复问题的指南。

## What's new in Scala 3
## Scala 3 里有什么新东西
Scala 3 是对 Scala 语言的一次彻底改造。在其核心部分,类型系统的许多方面都被改变了,变得更有原则性。虽然这也带来了令人兴奋的新功能(比如联合类型),但首先意味着类型系统变得(甚至)不那么碍事了,例如[类型推断][type-inference]和 overload resolution 都得到了很大的改善。

### 新的和闪亮的:语法

除了许多(小的)清理工作,Scala 3 的语法还提供了以下改进:

- 用于控制结构的新“quiet”语法,如 `if`、`while` 和 `for` 。 ([new control syntax][syntax-control])
Expand All @@ -25,10 +23,10 @@ Scala 3 是对 Scala 语言的一次彻底改造。在其核心部分,类型
- [类型级通配符][syntax-wildcard] 从 `_` 更改为 `?`。
- implicit(和它们的语法)已被[大量修订][implicits]。

### Opinionated: Contextual Abstractions
Scala的一个基本核心概念是(在某种程度上仍然是)为用户提供一小部分强大的功能,这些功能可以被组合成巨大的(有时甚至是不可预见的)表达能力。例如,_implicit_ 的特性被用来模拟上下文抽象、表达类型级计算、模拟类型类、执行隐式强制、编码扩展方法等等。从这些用例中学习,Scala 3 采取了一种略微不同的方法,专注于 __意图__ 而非 __机制__。Scala 3 没有提供一个非常强大的功能,而是提供了多个定制的语言功能,让程序员直接表达他们的意图。
### Opinionated: 上下文抽象
Scala的一个基本核心概念是(在某种程度上仍然是)为用户提供一小部分强大的功能,这些功能可以被组合成巨大的(有时甚至是不可预见的)表达能力。例如,_implicit_ 的特性被用来模拟上下文抽象、表达类型级计算、模拟类型类、执行隐式强制、编码扩展方法等等。从这些用例中学习,Scala 3 采取了一种略微不同的方法,专注于 **意图** 而非 **机制**。Scala 3 没有提供一个非常强大的功能,而是提供了多个定制的语言功能,让程序员直接表达他们的意图。

- **Abtracting over contextual information**. [Using clauses][contextual-using] 允许程序员对调用上下文中的信息进行抽象,这些信息应该以隐式方式传递。作为对 Scala 2 implicits 的改进,可以按类型指定`using`子句,从而将函数签名从从未显式引用的术语变量名中解放出来。
- **Abtracting over contextual information**. [Using clauses][contextual-using] 允许程序员对调用上下文中的信息进行抽象,这些信息应该以隐式方式传递。作为对 Scala 2 implicits 的改进,可以按类型指定 using 子句,从而将函数签名从从未显式引用的术语变量名中解放出来。

- **Providing Type-class instances**. [Given instances][contextual-givens] 允许程序员定义某个类型的 _规范值_ 。这使得使用类型类的编程更加简单,而不会泄露实现细节。

Expand All @@ -40,8 +38,8 @@ Scala的一个基本核心概念是(在某种程度上仍然是)为用户提

- **Actionable feedback from the compiler**. 如果一个隐式参数不能被编译器解决,它现在提供了可能解决这个问题的[import suggestions](https://www.scala-lang.org/blog/2020/05/05/scala-3-import-suggestions.html)。

### Say What You Mean: 类型系统改进
除了极大地改进了类型推断,Scala 3 类型系统还提供了许多新的功能,还为你提供了强大的工具来静态地表达类型中的不变量
### 表达真正的意思: 类型系统改进
除了极大地改进了类型推断,Scala 3 类型系统还提供了许多新的功能,还为你提供了强大的工具来静态地表达类型中的不变量

- **Enumerations**. [枚举][enums]已经被重新设计,以便与样例类很好地融合,并形成表达[代数数据类型][enums-adts]的新标准。

Expand All @@ -58,7 +56,6 @@ Scala的一个基本核心概念是(在某种程度上仍然是)为用户提
- **Match types**. Scala 3 提供了对[matching on types][types-match]的直接支持,而不是使用隐式解析对类型级别的计算进行编码。将类型级计算整合到类型检查器中,可以改进错误信息,并消除对复杂编码的需求。

### Re-envisioned:面向对象的编程

Scala 一直处于函数式编程和面向对象编程的前沿 -- 而 Scala 3 在这两个方向上都推动了边界的发展! 上述类型系统的变化和上下文抽象的重新设计使得 _函数式编程_ 比以前更容易。同时,以下的新特性使结构良好的 _面向对象设计_ 成为可能,并支持最佳实践。

- **Pass it on**. Trait 更接近于 class,现在也可以接受[参数][oo-trait-parameters],使其作为模块化软件分解的工具更加强大。
Expand All @@ -79,7 +76,6 @@ Scala 2 中的宏只是一个实验性的功能,而 Scala 3 则为元编程提
- **Quoted code blocks**. Scala 3为代码增加了[quasi-quotation][meta-quotes]的新功能,这为构建和分析代码提供了方便的高级接口。构建加一加一的代码就像`'{ 1 + 1 }`一样简单。
- **Reflection API**. 对于更高级的用例,[quotes.reflect][meta-reflection]提供了更详细的控制来检查和生成程序树。


如果你想进一步了解 Scala 3 中的元编程,我们邀请你参阅我们的[教程][meta-tutorial]。

[enums]: {{ site.scala3ref }}/enums/enums.html
Expand Down