Skip to content

Commit 0aa095b

Browse files
authored
Translate "Ruby 3.2.0 Preview 1 Released" to Simplified Chinese (zh_cn) (ruby#2822)
1 parent dd756a6 commit 0aa095b

File tree

1 file changed

+172
-0
lines changed

1 file changed

+172
-0
lines changed
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 3.2.0 Preview 1 Released"
4+
author: "naruse"
5+
translator: GAO Jun
6+
date: 2022-04-03 00:00:00 +0000
7+
lang: zh_cn
8+
---
9+
10+
{% assign release = site.data.releases | where: "version", "3.2.0-preview1" | first %}
11+
12+
我们很高兴地宣布 Ruby {{ release.version }} 已发布。Ruby 3.2 增加了很多新功能和性能改进。
13+
14+
15+
## 基于 WASI 的 WebAssembly 支持
16+
17+
这是首次基于 WASI 的 WebAssembly 支持。使得 CRuby 二进制内容可用于浏览器、Serverless Edge、以及其他 WebAssebly/WASI 嵌入环境。目前,此功能已通过除 Thread API 之外的 basic 和 bootstrap 测试套件。
18+
19+
20+
![](https://i.imgur.com/opCgKy2.png)
21+
22+
### 背景
23+
24+
[WebAssembly (WASM)](https://webassembly.org/) 希望能够在浏览器中提供安全快速的运行程序的方式。但其目标,也就是在不同环境中安全高效的运行程序,不仅是 web 应用长期以来的目标,也是其他一般程序所需要的。
25+
26+
[WASI (The WebAssembly System Interface)](https://wasi.dev/) 被设计用于此类应用场景。尽管此类应用需要与操作系统进行通信,WebAssembly 却运行在一个没有系统接口的虚拟机之上。WASI 使之标准化。
27+
28+
Ruby 的 WebAssembly/WASI 支持,希望利用这些项目,使 Ruby 开发者可以编写能运行于兼容此类功能的平台上。
29+
30+
### 应用场景
31+
32+
这种支持鼓励开发人员可以在 WebAssembly 环境中使用 CRuby。一个此类应用场景的案例是 [TryRuby playground](https://try.ruby-lang.org/playground/) 的 CRuby 支持。现在您可以在您的浏览器中尝试原生的 CRuby。
33+
34+
### 技术要点
35+
36+
目前,WASI 和 WebAssembly 仍在不断演进,同时基于安全原因,还缺少一些功能来实现纤程、异常和垃圾回收。
37+
所以,CRuby 使用了一种可以控制用户空间中执行的二进制转换技术 Asyncify 来填补这一鸿沟。
38+
39+
此外,我们创建了 [WASI 之上的虚拟文件系统](https://github.com/kateinoigakukun/wasi-vfs/wiki/Getting-Started-with-CRuby),于是就可以很容易地将 Ruby 应用打包成单个 .wasm 文件,进而简化分发 Ruby 应用的过程。
40+
41+
42+
### 相关链接
43+
44+
* [Add WASI based WebAssembly support #5407](https://github.com/ruby/ruby/pull/5407)
45+
* [An Update on WebAssembly/WASI Support in Ruby](https://itnext.io/final-report-webassembly-wasi-support-in-ruby-4aface7d90c9)
46+
47+
## Regexp 超时设置
48+
49+
新增正则表达式匹配的超时设置。
50+
51+
```ruby
52+
Regexp.timeout = 1.0
53+
54+
/^a*b?a*$/ =~ "a" * 50000 + "x" #=> 1秒后 Regexp::TimeoutError
55+
```
56+
57+
众所周知,正则表达式匹配的耗时长度可能出乎意料之外。如果您的代码尝试从一个不可信输入中匹配一个低效的正则表达式,攻击者可以借此发起有效的拒绝服务攻击(所谓的正则表达式 DoS,或 ReDoS)。
58+
59+
根据您的 Ruby 程序的需要,可以通过设置 `Regexp.timeout` 来避免或减轻这种 DoS 风险。请在您的程序中进行尝试,我们欢迎您的反馈。
60+
61+
请注意,`Regexp.timeout` 是全局性的配置。如果您希望对于某些特殊的正则表达式使用不同的超时设置,您可以使用 `Regexp.new` 中的 `timeout` 关键词。
62+
63+
```ruby
64+
Regexp.timeout = 1.0
65+
66+
# 这个 Regexp 没有超时设置
67+
long_time_re = Regexp.new("^a*b?a*$", timeout: nil)
68+
69+
long_time_re =~ "a" * 50000 + "x" # 不会被中断
70+
```
71+
72+
最初提议: https://bugs.ruby-lang.org/issues/17837
73+
74+
75+
## 其他值得注意的新功能
76+
77+
### 不再捆绑第三方源代码
78+
79+
* 我们不再捆绑第三方源代码,例如 `libyaml``libffi`
80+
81+
* psych 中已经移除了 libyaml 的代码。您可能需要在 Ubuntu/Debian 平台中安装 `libyaml-dev`。软件包的名称可能因平台不同而各异。
82+
83+
* 在 preview2 中,`fiddle` 将移除 libffi。
84+
85+
### 语言
86+
87+
* 查找模式不再是实验性功能。
88+
89+
90+
## 性能改进
91+
92+
93+
94+
## 自 3.1 以来其他值得注意的变更
95+
96+
* Hash
97+
* 当 hash 为空时,Hash#shift 现在总是返回 nil,此前行为是返回默认值或调用默认 proc。 [[Bug #16908]]
98+
99+
* MatchData
100+
* 新增 MatchData#byteoffset 。 [[Feature #13110]]
101+
102+
* Module
103+
* 新增 Module.used_refinements 。 [[Feature #14332]]
104+
* 新增 Module#refinements 。 [[Feature #12737]]
105+
* 新增 Module#const_added 。 [[Feature #17881]]
106+
107+
* Proc
108+
* Proc#dup 返回子类的一个实例。 [[Bug #17545]]
109+
* Proc#parameters 现在接受 lambda 关键字。 [[Feature #15357]]
110+
111+
* Refinement
112+
* 新增 Refinement#refined_class 。 [[Feature #12737]]
113+
114+
* Set
115+
* Set 现在可以直接使用,不需要调用 `require "set"`[[Feature #16989]]
116+
目前其通过 `Set` 常量或对 `Enumerable#to_set` 调用自动载入。
117+
118+
* String
119+
* 新增 String#byteindex 和 String#byterindex 。 [[Feature #13110]]
120+
* 更新 Unicode 至 Version 14.0.0,Emoji Version 14.0. [[Feature #18037]] (同样适用于 Regexp)
121+
* 新增 String#bytesplice 。 [[Feature #18598]]
122+
123+
* Struct
124+
* 即使在 `Struct.new` 中不设置 `keyword_init: true`,Struct 类也可以通过关键词参数进行初始化。 [[Feature #16806]]
125+
126+
127+
### 标准库更新
128+
129+
* 下列默认 gems 被更新。
130+
131+
* 待定
132+
133+
* 下列 bundled gems 被更新。
134+
135+
* 待定
136+
137+
* 下列默认 gems 现在是 bundled gems。您需要在 bundler 环境中,将其加入 `Gemfile` 文件。
138+
139+
* 待定
140+
141+
您可以通过 [新闻](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md)
142+
[提交日志](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }})
143+
获取更多信息。
144+
145+
自 Ruby 3.1.0 以来,伴随这些变更, [{{ release.stats.files_changed }} 个文件被更改, 新增 {{ release.stats.insertions }} 行(+),删除 {{ release.stats.deletions }} 行(-)](https://github.com/ruby/ruby/compare/v3_1_0...{{ release.tag }}#file_bucket)!
146+
147+
## 下载
148+
149+
* <{{ release.url.gz }}>
150+
151+
SIZE: {{ release.size.gz }}
152+
SHA1: {{ release.sha1.gz }}
153+
SHA256: {{ release.sha256.gz }}
154+
SHA512: {{ release.sha512.gz }}
155+
156+
* <{{ release.url.xz }}>
157+
158+
SIZE: {{ release.size.xz }}
159+
SHA1: {{ release.sha1.xz }}
160+
SHA256: {{ release.sha256.xz }}
161+
SHA512: {{ release.sha512.xz }}
162+
163+
* <{{ release.url.zip }}>
164+
165+
SIZE: {{ release.size.zip }}
166+
SHA1: {{ release.sha1.zip }}
167+
SHA256: {{ release.sha256.zip }}
168+
SHA512: {{ release.sha512.zip }}
169+
170+
## Ruby是什么
171+
172+
Ruby 最初由 Matz (松本行弘,Yukihiro Matsumoto) 于 1993 年开发,现在以开源软件的形式开发。它可以在多个平台上运行,并在全球得到广泛使用,尤其是Web开发领域。

0 commit comments

Comments
 (0)