mirror of
https://github.com/google/comprehensive-rust.git
synced 2024-12-15 06:20:32 +02:00
zh-TW: translate unsafe (#966)
* zh-TW: translate unsafe Part of #684. * zh-TW: Update "read and write" --------- Co-authored-by: Jonathan Hao <phao@google.com>
This commit is contained in:
parent
e33ed49d74
commit
2cdbd933f6
92
po/zh-TW.po
92
po/zh-TW.po
@ -9859,11 +9859,11 @@ msgstr ""
|
||||
|
||||
#: src/unsafe.md:1
|
||||
msgid "# Unsafe Rust"
|
||||
msgstr ""
|
||||
msgstr "# 不安全的 Rust"
|
||||
|
||||
#: src/unsafe.md:3
|
||||
msgid "The Rust language has two parts:"
|
||||
msgstr ""
|
||||
msgstr "Rust 語言包含兩個部分:"
|
||||
|
||||
#: src/unsafe.md:5
|
||||
msgid ""
|
||||
@ -9871,13 +9871,15 @@ msgid ""
|
||||
"* **Unsafe Rust:** can trigger undefined behavior if preconditions are "
|
||||
"violated."
|
||||
msgstr ""
|
||||
"* **安全的 Rust:**可確保記憶體安全,無法觸發未定義的行為。\n"
|
||||
"* **不安全的 Rust:**如果違反先決條件,便可能觸發未定義的行為。"
|
||||
|
||||
#: src/unsafe.md:8
|
||||
msgid ""
|
||||
"We will be seeing mostly safe Rust in this course, but it's important to "
|
||||
"know\n"
|
||||
"what Unsafe Rust is."
|
||||
msgstr ""
|
||||
msgstr "雖然本課程中出現的大多都是安全的 Rust,但瞭解不安全的 Rust 也很重要。"
|
||||
|
||||
#: src/unsafe.md:11
|
||||
msgid ""
|
||||
@ -9885,10 +9887,12 @@ msgid ""
|
||||
"carefully\n"
|
||||
"documented. It is usually wrapped in a safe abstraction layer."
|
||||
msgstr ""
|
||||
"不安全的程式碼通常都很簡短、受到隔離,而且封裝在安全的抽象層中。您應該仔細記"
|
||||
"錄這類程式碼的正確性。"
|
||||
|
||||
#: src/unsafe.md:14
|
||||
msgid "Unsafe Rust gives you access to five new capabilities:"
|
||||
msgstr ""
|
||||
msgstr "透過不安全的 Rust,可以使用五項新功能:"
|
||||
|
||||
#: src/unsafe.md:16
|
||||
msgid ""
|
||||
@ -9898,6 +9902,11 @@ msgid ""
|
||||
"* Call `unsafe` functions, including `extern` functions.\n"
|
||||
"* Implement `unsafe` traits."
|
||||
msgstr ""
|
||||
"* 對裸指標解參考。\n"
|
||||
"* 存取或修改可變的靜態變數。\n"
|
||||
"* 存取 `union` 欄位。\n"
|
||||
"* 呼叫 `unsafe` 函式 (包括 `extern` 函式)。\n"
|
||||
"* 實作 `unsafe` 特徵。"
|
||||
|
||||
#: src/unsafe.md:22
|
||||
msgid ""
|
||||
@ -9907,6 +9916,9 @@ msgid ""
|
||||
"unsafe-rust.html)\n"
|
||||
"and the [Rustonomicon](https://doc.rust-lang.org/nomicon/)."
|
||||
msgstr ""
|
||||
"接下來將簡單介紹不安全的功能。如需瞭解詳情,請參閱 [Rust Book 的第 19.1 章]"
|
||||
"(https://rust-lang.tw/book-tw/ch19-01-unsafe-rust.html),以及 [Rustonomicon]"
|
||||
"(https://doc.rust-lang.org/nomicon/)。"
|
||||
|
||||
#: src/unsafe.md:28
|
||||
msgid ""
|
||||
@ -9916,14 +9928,18 @@ msgid ""
|
||||
"themselves. It means the compiler no longer enforces Rust's memory-safety "
|
||||
"rules."
|
||||
msgstr ""
|
||||
"Unsafe Rust does not mean the code is incorrect. It means that developers "
|
||||
"have turned off the compiler safety features and have to write correct code "
|
||||
"by themselves. It means the compiler no longer enforces Rust's memory-safety "
|
||||
"rules."
|
||||
|
||||
#: src/unsafe/raw-pointers.md:1
|
||||
msgid "# Dereferencing Raw Pointers"
|
||||
msgstr ""
|
||||
msgstr "# 對裸指標解參考"
|
||||
|
||||
#: src/unsafe/raw-pointers.md:3
|
||||
msgid "Creating pointers is safe, but dereferencing them requires `unsafe`:"
|
||||
msgstr ""
|
||||
msgstr "建立指標相當安全,不過對指標解參考就需要使用 `unsafe`:"
|
||||
|
||||
#: src/unsafe/raw-pointers.md:5
|
||||
msgid ""
|
||||
@ -9957,12 +9973,17 @@ msgid ""
|
||||
"requirements of the unsafe\n"
|
||||
"operations it is doing."
|
||||
msgstr ""
|
||||
"It is good practice (and required by the Android Rust style guide) to write "
|
||||
"a comment for each `unsafe` block explaining how the code inside it "
|
||||
"satisfies the safety requirements of the unsafe operations it is doing."
|
||||
|
||||
#: src/unsafe/raw-pointers.md:31
|
||||
msgid ""
|
||||
"In the case of pointer dereferences, this means that the pointers must be\n"
|
||||
"[_valid_](https://doc.rust-lang.org/std/ptr/index.html#safety), i.e.:"
|
||||
msgstr ""
|
||||
"In the case of pointer dereferences, this means that the pointers must be "
|
||||
"[_valid_](https://doc.rust-lang.org/std/ptr/index.html#safety), i.e.:"
|
||||
|
||||
#: src/unsafe/raw-pointers.md:34
|
||||
msgid ""
|
||||
@ -9975,18 +9996,25 @@ msgid ""
|
||||
"must be live and no\n"
|
||||
" reference may be used to access the memory."
|
||||
msgstr ""
|
||||
" * The pointer must be non-null.\n"
|
||||
"* The pointer must be _dereferenceable_ (within the bounds of a single "
|
||||
"allocated object).\n"
|
||||
"* The object must not have been deallocated.\n"
|
||||
"* There must not be concurrent accesses to the same location.\n"
|
||||
"* If the pointer was obtained by casting a reference, the underlying object "
|
||||
"must be live and no reference may be used to access the memory."
|
||||
|
||||
#: src/unsafe/raw-pointers.md:41
|
||||
msgid "In most cases the pointer must also be properly aligned."
|
||||
msgstr ""
|
||||
msgstr "In most cases the pointer must also be properly aligned."
|
||||
|
||||
#: src/unsafe/mutable-static-variables.md:1
|
||||
msgid "# Mutable Static Variables"
|
||||
msgstr ""
|
||||
msgstr "# 可變的靜態變數"
|
||||
|
||||
#: src/unsafe/mutable-static-variables.md:3
|
||||
msgid "It is safe to read an immutable static variable:"
|
||||
msgstr ""
|
||||
msgstr "您可以放心讀取不可變的靜態變數:"
|
||||
|
||||
#: src/unsafe/mutable-static-variables.md:5
|
||||
msgid ""
|
||||
@ -10003,7 +10031,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"However, since data races can occur, it is unsafe to read and write mutable\n"
|
||||
"static variables:"
|
||||
msgstr ""
|
||||
msgstr "不過,讀取並寫入可變的靜態變數並不安全,因為可能發生資料競爭:"
|
||||
|
||||
#: src/unsafe/mutable-static-variables.md:16
|
||||
msgid ""
|
||||
@ -10029,14 +10057,17 @@ msgid ""
|
||||
"in low-level `no_std` code, such as implementing a heap allocator or working "
|
||||
"with some C APIs."
|
||||
msgstr ""
|
||||
"Using a mutable static is generally a bad idea, but there are some cases "
|
||||
"where it might make sense in low-level `no_std` code, such as implementing a "
|
||||
"heap allocator or working with some C APIs."
|
||||
|
||||
#: src/unsafe/unions.md:1
|
||||
msgid "# Unions"
|
||||
msgstr ""
|
||||
msgstr "# 聯合體"
|
||||
|
||||
#: src/unsafe/unions.md:3
|
||||
msgid "Unions are like enums, but you need to track the active field yourself:"
|
||||
msgstr ""
|
||||
msgstr "聯合體和列舉很像,但您需要自行追蹤可用欄位:"
|
||||
|
||||
#: src/unsafe/unions.md:5
|
||||
msgid ""
|
||||
@ -10061,6 +10092,8 @@ msgid ""
|
||||
"are occasionally needed\n"
|
||||
"for interacting with C library APIs."
|
||||
msgstr ""
|
||||
"Unions are very rarely needed in Rust as you can usually use an enum. They "
|
||||
"are occasionally needed for interacting with C library APIs."
|
||||
|
||||
#: src/unsafe/unions.md:24
|
||||
msgid ""
|
||||
@ -10070,10 +10103,14 @@ msgid ""
|
||||
"transmute.html) or a safe\n"
|
||||
"wrapper such as the [`zerocopy`](https://crates.io/crates/zerocopy) crate."
|
||||
msgstr ""
|
||||
"If you just want to reinterpret bytes as a different type, you probably want "
|
||||
"[`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn."
|
||||
"transmute.html) or a safe wrapper such as the [`zerocopy`](https://crates.io/"
|
||||
"crates/zerocopy) crate."
|
||||
|
||||
#: src/unsafe/calling-unsafe-functions.md:1
|
||||
msgid "# Calling Unsafe Functions"
|
||||
msgstr ""
|
||||
msgstr "# 呼叫不安全的函式"
|
||||
|
||||
#: src/unsafe/calling-unsafe-functions.md:3
|
||||
msgid ""
|
||||
@ -10081,6 +10118,8 @@ msgid ""
|
||||
"you\n"
|
||||
"must uphold to avoid undefined behaviour:"
|
||||
msgstr ""
|
||||
"如果函式或方法具有額外先決條件,而您必須遵循這些條件才能避免未定義的行為,那"
|
||||
"麼就可以將該函式或方法標示為 `unsafe`:"
|
||||
|
||||
#: src/unsafe/calling-unsafe-functions.md:6
|
||||
msgid ""
|
||||
@ -10114,7 +10153,7 @@ msgstr ""
|
||||
|
||||
#: src/unsafe/writing-unsafe-functions.md:1
|
||||
msgid "# Writing Unsafe Functions"
|
||||
msgstr ""
|
||||
msgstr "# 編寫不安全的函式"
|
||||
|
||||
#: src/unsafe/writing-unsafe-functions.md:3
|
||||
msgid ""
|
||||
@ -10122,6 +10161,7 @@ msgid ""
|
||||
"conditions to avoid undefined\n"
|
||||
"behaviour."
|
||||
msgstr ""
|
||||
"如果您的函式必須滿足特定條件才能避免未定義的行為,您可以將其標示為 `unsafe`。"
|
||||
|
||||
#: src/unsafe/writing-unsafe-functions.md:6
|
||||
msgid ""
|
||||
@ -10156,6 +10196,8 @@ msgid ""
|
||||
"We wouldn't actually use pointers for this because it can be done safely "
|
||||
"with references."
|
||||
msgstr ""
|
||||
"We wouldn't actually use pointers for this because it can be done safely "
|
||||
"with references."
|
||||
|
||||
#: src/unsafe/writing-unsafe-functions.md:35
|
||||
msgid ""
|
||||
@ -10164,17 +10206,20 @@ msgid ""
|
||||
"prohibit this with `#[deny(unsafe_op_in_unsafe_fn)]`. Try adding it and see "
|
||||
"what happens."
|
||||
msgstr ""
|
||||
"Note that unsafe code is allowed within an unsafe function without an "
|
||||
"`unsafe` block. We can prohibit this with `#[deny(unsafe_op_in_unsafe_fn)]`. "
|
||||
"Try adding it and see what happens."
|
||||
|
||||
#: src/unsafe/extern-functions.md:1
|
||||
msgid "# Calling External Code"
|
||||
msgstr ""
|
||||
msgstr "# 呼叫外部程式碼"
|
||||
|
||||
#: src/unsafe/extern-functions.md:3
|
||||
msgid ""
|
||||
"Functions from other languages might violate the guarantees of Rust. "
|
||||
"Calling\n"
|
||||
"them is thus unsafe:"
|
||||
msgstr ""
|
||||
msgstr "其他語言的函式可能會違反 Rust 保證,因此呼叫這類函式並不安全:"
|
||||
|
||||
#: src/unsafe/extern-functions.md:6
|
||||
msgid ""
|
||||
@ -10200,6 +10245,9 @@ msgid ""
|
||||
"undefined behaviour under any\n"
|
||||
"arbitrary circumstances."
|
||||
msgstr ""
|
||||
"This is usually only a problem for extern functions which do things with "
|
||||
"pointers which might violate Rust's memory model, but in general any C "
|
||||
"function might have undefined behaviour under any arbitrary circumstances."
|
||||
|
||||
#: src/unsafe/extern-functions.md:25
|
||||
msgid ""
|
||||
@ -10210,7 +10258,7 @@ msgstr ""
|
||||
|
||||
#: src/unsafe/unsafe-traits.md:1
|
||||
msgid "# Implementing Unsafe Traits"
|
||||
msgstr ""
|
||||
msgstr "# 實作不安全的特徵"
|
||||
|
||||
#: src/unsafe/unsafe-traits.md:3
|
||||
msgid ""
|
||||
@ -10218,6 +10266,8 @@ msgid ""
|
||||
"must guarantee\n"
|
||||
"particular conditions to avoid undefined behaviour."
|
||||
msgstr ""
|
||||
"與函式類似,如果實作程序必須保證符合特定條件才能避免未定義的行為,您可以將特"
|
||||
"徵標示為 `unsafe`。"
|
||||
|
||||
#: src/unsafe/unsafe-traits.md:6
|
||||
msgid ""
|
||||
@ -10225,6 +10275,8 @@ msgid ""
|
||||
"[something like this](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes."
|
||||
"html):"
|
||||
msgstr ""
|
||||
"舉例來說,`zerocopy` crate 就具有不安全的特徵,如[這個頁面](https://docs.rs/"
|
||||
"zerocopy/latest/zerocopy/trait.AsBytes.html)所示:"
|
||||
|
||||
#: src/unsafe/unsafe-traits.md:9
|
||||
msgid ""
|
||||
@ -10255,16 +10307,20 @@ msgid ""
|
||||
"the requirements for\n"
|
||||
"the trait to be safely implemented."
|
||||
msgstr ""
|
||||
"There should be a `# Safety` section on the Rustdoc for the trait explaining "
|
||||
"the requirements for the trait to be safely implemented."
|
||||
|
||||
#: src/unsafe/unsafe-traits.md:33
|
||||
msgid ""
|
||||
"The actual safety section for `AsBytes` is rather longer and more "
|
||||
"complicated."
|
||||
msgstr ""
|
||||
"The actual safety section for `AsBytes` is rather longer and more "
|
||||
"complicated."
|
||||
|
||||
#: src/unsafe/unsafe-traits.md:35
|
||||
msgid "The built-in `Send` and `Sync` traits are unsafe."
|
||||
msgstr ""
|
||||
msgstr "The built-in `Send` and `Sync` traits are unsafe."
|
||||
|
||||
#: src/exercises/day-3/afternoon.md:1
|
||||
msgid "# Day 3: Afternoon Exercises"
|
||||
|
Loading…
Reference in New Issue
Block a user