Skip to content

Commit 18fab64

Browse files
committed
更新第三章部分翻译
1 parent 8e6e1e5 commit 18fab64

File tree

2 files changed

+45
-10
lines changed

2 files changed

+45
-10
lines changed

03-vga-text-mode.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ pub fn print_something() {
223223

224224
这个函数首先创建一个指向`0xb8000`地址VGA缓冲区的`Writer`。实现这一点,我们需要编写的代码可能看起来有点奇怪:首先,我们把整数`0xb8000`强制转换为一个可变的**裸指针**[raw pointer](https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html#dereferencing-a-raw-pointer));之后,通过运算符`*`,我们将这个裸指针解引用;最后,我们再通过`&mut`,再次获得它的可变借用。这些转换需要**`unsafe`语句块**[unsafe block](https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html)),因为编译器并不能保证这个裸指针是有效的。
225225

226-
然后它将字节 `b'H'` 写入缓冲区内. 前缀 `b`创建了一个字节常量[byte literal](https://doc.rust-lang.org/reference/tokens.html#byte-literals)),表示单个ASCII码字符;通过尝试写入 `"ello "``"Wörld!"`,我们可以测试 `write_string` 方法和其后对无法打印字符的处理逻辑。为了观察输出,我们需要在`_start`函数中调用`print_something`方法:
226+
然后它将字节 `b'H'` 写入缓冲区内. 前缀 `b`创建了一个字节字面量[byte literal](https://doc.rust-lang.org/reference/tokens.html#byte-literals)),表示单个ASCII码字符;通过尝试写入 `"ello "``"Wörld!"`,我们可以测试 `write_string` 方法和其后对无法打印字符的处理逻辑。为了观察输出,我们需要在`_start`函数中调用`print_something`方法:
227227

228228
```rust
229229
// in src/main.rs
@@ -244,9 +244,9 @@ pub extern "C" fn _start() -> ! {
244244

245245
我们刚才看到,自己想要输出的信息被正确地打印到屏幕上。然而,未来Rust编译器更暴力的优化可能让这段代码不按预期工作。
246246

247-
产生问题的原因在于,我们只向`Buffer`写入,却不再从它读出数据。此时,编译器不知道我们事实上已经在操作VGA缓冲区内存,而不是在操作普通的RAM——因此也不知道产生的**副效应**(side effect),即会有几个字符显示在屏幕上。这时,编译器也许会认为这些写入操作都没有必要,甚至会选择忽略这些操作!所以,为了避免这些并不正确的优化,这些写入操作应当被指定为[易失操作](https://en.wikipedia.org/wiki/Volatile_(computer_programming))。这将告诉编译器,这些写入可能会产生副效应,不应该被优化掉。
247+
产生问题的原因在于,我们只向`Buffer`写入,却不再从它读出数据。此时,编译器不知道我们事实上已经在操作VGA缓冲区内存,而不是在操作普通的RAM——因此也不知道产生的副作用,即会有几个字符显示在屏幕上。这时,编译器也许会认为这些写入操作都没有必要,甚至会选择忽略这些操作!所以,为了避免这些并不正确的优化,这些写入操作应当被指定为[易失操作](https://en.wikipedia.org/wiki/Volatile_(computer_programming))。这将告诉编译器,这些写入可能会产生副效应,不应该被优化掉。
248248

249-
为了在我们的VGA缓冲区中使用易失的写入操作,我们使用[volatile](https://docs.rs/volatile)库。这个****(crate)提供一个名为`Volatile`**包装类型**(wrapping type)和它的`read``write`方法;这些方法包装了`core::ptr`内的[read_volatile](https://doc.rust-lang.org/nightly/core/ptr/fn.read_volatile.html)[write_volatile](https://doc.rust-lang.org/nightly/core/ptr/fn.write_volatile.html) 函数,从而保证读操作或写操作不会被编译器优化。
249+
为了在我们的VGA缓冲区中使用易失的写入操作,我们使用[volatile](https://docs.rs/volatile)库。这个****(crate)提供一个名为`Volatile`**包装类型**(wrapping type),它的`read``write`方法;这些方法包装了`core::ptr`内的[read_volatile](https://doc.rust-lang.org/nightly/core/ptr/fn.read_volatile.html)[write_volatile](https://doc.rust-lang.org/nightly/core/ptr/fn.write_volatile.html) 函数,从而保证读操作或写操作不会被编译器优化。
250250

251251
要添加`volatile`包为项目的**依赖项**(dependency),我们可以在`Cargo.toml`文件的`dependencies`中添加下面的代码:
252252

translation-table.md

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,69 +12,104 @@
1212
|:----|:--------|:------|
1313
| append by bytes || 按字符拼接 |
1414
| Application Binary Interface, ABI || 应用程序二进制接口 |
15-
| background color || 背景色 |
15+
| background color |,三 | 背景色 |
1616
| bare metal | 一,二 | 裸机 |
1717
| bare-metal executable || 裸机程序 |
18+
| block (in contexts) || 阻塞 |
1819
| bootable disk image || 可引导的映像 |
1920
| bootloader || 引导程序 |
21+
| bright bit || 加亮位 |
2022
| BSS segment || BSS段 |
23+
| byte literal || 字节字面量 |
2124
| byte string || 字节串 |
2225
| caret requirement (Rust) || 脱字号条件 |
23-
| character cell || 字符单元 |
26+
| character cell | 二,三 | 字符单元 |
27+
| C-like enum (Rust) || 类似于C语言的枚举 |
28+
| Code page 437 || 代码页437 |
29+
| color code || 颜色代码 |
2430
| Combinators | 十二 | 组合子 |
2531
| compiler built-in libraries || 编译器内建库 |
32+
| const evaluator || 常量求值器 |
33+
| const functions (Rust) || 常函数 |
2634
| Cooperative Multitasking | 十二 | 协作式多任务 |
27-
| copy semantics || 复制语义 |
35+
| copy semantics |,三 | 复制语义 |
2836
| CPU feature || CPU特征 |
37+
| crate (Rust) |||
38+
| crate root (Rust) || 根模块 |
2939
| cross compile || 交叉编译 |
3040
| custom target || 自定义目标 |
41+
| dependency (Rust) || 依赖项 |
42+
| derive (Rust) || 生成 |
3143
| destructor || 析构函数 |
3244
| "dev" profile (Rust) || dev配置 |
3345
| device name || 设备名 |
3446
| diverging | 十二 | 发散 |
3547
| diverging function (Rust) || 发散函数 |
3648
| dynamically dispatch | 十二 | 动态派发 |
3749
| edition (Rust) || 版次 |
50+
| enum (Rust) || 枚举 |
3851
| Executable and Linkable Format, ELF || ELF格式 |
52+
| explicit lifetime (Rust) || 显式生命周期 |
3953
| embedded system || 嵌入式系统 |
4054
| entry point || 入口点 |
4155
| entry point address || 入口点地址 |
4256
| feature flag || 特性标签 |
43-
| foreground color || 前景色 |
57+
| foreground color | 二,三 | 前景色 |
58+
| formatting macros (Rust) || 格式化宏 |
4459
| freestanding executable || 独立式可执行程序 |
4560
| garbage collection || 垃圾回收 |
61+
| generic || 泛型 |
4662
| green threads || 绿色线程,软件线程 |
4763
| host system | 一,二 | 宿主系统 |
64+
| immutable variable (Rust) || 不可变变量 |
65+
| interior mutability (Rust) || 内部可变性 |
4866
| kernal || 内核 |
4967
| language item (Rust) || 语言项 |
68+
| line feed || 换行符 |
5069
| linker | 一,二 | 链接器 |
5170
| linker argument || 链接器参数 |
71+
| lazy initialization || 延迟初始化 |
5272
| magic number || 魔术数字 |
73+
| memory-mapped I/O || 存储器映射输入输出 |
5374
| memory safety || 内存安全 |
75+
| module (Rust) | 三 | 模块 |
76+
| mutable static variable (Rust) || 可变静态变量 |
77+
| mutual exclusion || 互斥条件 |
5478
| name mangling || 名称重整 |
5579
| "never" type (Rust) || Never类型 |
5680
| page table || 分页表 |
5781
| Pin | 十二 | 固定 |
5882
| precompiled library || 预编译库 |
5983
| Preemptive Multitasking | 十二 | 抢占式多任务 |
60-
| raw pointer || 裸指针 |
84+
| range notation (Rust) || 区间标号 |
85+
| raw pointer | 二,三 | 裸指针 |
6186
| redzone || 红区 |
6287
| release channel (Rust) || 发行频道 |
6388
| "release" profile || release配置 |
6489
| root module || 根模块 |
90+
| root namespace || 根命名空间 |
91+
| rule (in macros, Rust) || (宏的)规则 |
6592
| runtime system || 运行时系统 |
93+
| semantic version number, semver || 语义版本号 |
6694
| Single Instruction Multiple Data, SIMD || 单指令多数据流 |
95+
| spinlock || 自旋锁 |
6796
| stack trace || 堆栈轨迹 |
6897
| stack unwinding | 一,二 | 栈展开 |
6998
| standard output || 标准输出 |
99+
| 'static lifetime (Rust) || 'static生命周期 |
70100
| static variable || 静态变量 |
71101
| structured exception handling, SEH || 结构化异常处理 |
72102
| software threads || 软件线程,绿色线程 |
103+
| submodule (Rust) || 子模块 |
73104
| system call || 系统调用 |
74105
| target triple (Rust) | 一,二 | 目标三元组 |
75106
| target specification || 目标配置清单 |
76107
| target system || 目标系统 |
77-
| unsafe block || unsafe语句块 |
108+
| unsafe block |,三 | unsafe语句块 |
78109
| unstable feature || 不稳定特性 |
79-
| VGA text buffer (x86) || VGA字符缓冲区 |
110+
| VGA text buffer (x86) | 二,三 | VGA字符缓冲区 |
111+
| VGA text mode (x86) || VGA字符模式 |
80112
| virtual address || 虚拟地址 |
113+
| volatile operation || 易失操作 |
114+
| warning || 警告 |
115+
| wrapping type || 包装类型 |

0 commit comments

Comments
 (0)