From 0e4df4b50536a1b300d4618ea13390869aeb4ba7 Mon Sep 17 00:00:00 2001
From: Jiyong Park <55639800+jiyongp@users.noreply.github.com>
Date: Mon, 28 Aug 2023 23:53:27 +0900
Subject: [PATCH] ko: Update translation (#1116)
---
po/ko.po | 16713 ++++++++++++++++++++++++++++++++++-------------------
1 file changed, 10815 insertions(+), 5898 deletions(-)
diff --git a/po/ko.po b/po/ko.po
index b6533650..4ead7487 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -5,28 +5,25 @@ msgstr ""
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
+"Language: ko\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 3.3.2\n"
-#: src/SUMMARY.md:3 src/welcome.md:1
+#: src/SUMMARY.md:4 src/index.md:1
msgid "Welcome to Comprehensive Rust ๐ฆ"
msgstr "Comprehensive Rust์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค ๐ฆ"
-#: src/SUMMARY.md:4 src/running-the-course.md:1
+#: src/SUMMARY.md:5 src/running-the-course.md:1
msgid "Running the Course"
msgstr "๊ฐ์ ์งํ"
-#: src/SUMMARY.md:5 src/running-the-course/course-structure.md:1
+#: src/SUMMARY.md:6 src/running-the-course/course-structure.md:1
msgid "Course Structure"
msgstr "๊ฐ์ ๊ตฌ์ฑ"
-#: src/SUMMARY.md:6 src/running-the-course/day-4.md:1
-msgid "Day 4"
-msgstr "4์ผ์ฐจ"
-
#: src/SUMMARY.md:7 src/running-the-course/keyboard-shortcuts.md:1
msgid "Keyboard Shortcuts"
msgstr "๋จ์ถํค"
@@ -55,7 +52,8 @@ msgstr "์นด๊ณ (Cargo) ์ํํ๊ธฐ"
msgid "Day 1: Morning"
msgstr "1์ผ์ฐจ ์ค์ "
-#: src/SUMMARY.md:19 src/SUMMARY.md:75 src/SUMMARY.md:128 src/SUMMARY.md:184
+#: src/SUMMARY.md:19 src/SUMMARY.md:76 src/SUMMARY.md:130 src/SUMMARY.md:187
+#: src/SUMMARY.md:213 src/SUMMARY.md:263
msgid "Welcome"
msgstr "๊ฐ์"
@@ -119,713 +117,949 @@ msgstr "String๊ณผ str"
msgid "Functions"
msgstr "ํจ์"
-#: src/SUMMARY.md:35 src/SUMMARY.md:82 src/basic-syntax/methods.md:1
+#: src/SUMMARY.md:35 src/basic-syntax/rustdoc.md:1
+msgid "Rustdoc"
+msgstr "Rustdoc"
+
+#: src/SUMMARY.md:36 src/SUMMARY.md:83 src/basic-syntax/methods.md:1
#: src/methods.md:1
msgid "Methods"
msgstr "๋ฉ์๋"
-#: src/SUMMARY.md:36
+#: src/SUMMARY.md:37
msgid "Overloading"
msgstr "์ค๋ฒ๋ก๋ฉ"
-#: src/SUMMARY.md:37 src/SUMMARY.md:66 src/SUMMARY.md:90 src/SUMMARY.md:119
-#: src/SUMMARY.md:148 src/SUMMARY.md:176 src/SUMMARY.md:199 src/SUMMARY.md:226
-#: src/exercises/day-4/morning.md:1 src/exercises/day-4/android.md:1
+#: src/SUMMARY.md:38 src/SUMMARY.md:67 src/SUMMARY.md:91 src/SUMMARY.md:121
+#: src/SUMMARY.md:150 src/SUMMARY.md:179 src/SUMMARY.md:206 src/SUMMARY.md:227
+#: src/SUMMARY.md:255 src/SUMMARY.md:277 src/SUMMARY.md:298
+#: src/exercises/android/morning.md:1 src/exercises/bare-metal/morning.md:1
+#: src/exercises/bare-metal/afternoon.md:1
+#: src/exercises/concurrency/morning.md:1
+#: src/exercises/concurrency/afternoon.md:1
msgid "Exercises"
msgstr "์ฐ์ต๋ฌธ์ "
-#: src/SUMMARY.md:38 src/exercises/day-1/implicit-conversions.md:1
+#: src/SUMMARY.md:39 src/exercises/day-1/implicit-conversions.md:1
msgid "Implicit Conversions"
msgstr "๋ฌต์์ ํ๋ณํ"
-#: src/SUMMARY.md:39
+#: src/SUMMARY.md:40
msgid "Arrays and for Loops"
msgstr "๋ฐฐ์ด๊ณผ for ๋ฐ๋ณต๋ฌธ"
-#: src/SUMMARY.md:41
+#: src/SUMMARY.md:42
msgid "Day 1: Afternoon"
msgstr "1์ผ์ฐจ ์คํ"
-#: src/SUMMARY.md:43 src/basic-syntax/variables.md:1
+#: src/SUMMARY.md:44 src/basic-syntax/variables.md:1
msgid "Variables"
msgstr "๋ณ์"
-#: src/SUMMARY.md:44 src/basic-syntax/type-inference.md:1
+#: src/SUMMARY.md:45 src/basic-syntax/type-inference.md:1
msgid "Type Inference"
msgstr "ํ์
์ถ๋ก "
-#: src/SUMMARY.md:45
+#: src/SUMMARY.md:46
msgid "static & const"
msgstr "์ ์ ๋ณ์(static)์ ์์(const)"
-#: src/SUMMARY.md:46 src/basic-syntax/scopes-shadowing.md:1
+#: src/SUMMARY.md:47 src/basic-syntax/scopes-shadowing.md:1
msgid "Scopes and Shadowing"
msgstr "๋ฒ์(Scopes)์ ์๋์(Shadowing)"
-#: src/SUMMARY.md:47 src/memory-management.md:1
+#: src/SUMMARY.md:48 src/memory-management.md:1
msgid "Memory Management"
msgstr "๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ"
-#: src/SUMMARY.md:48
+#: src/SUMMARY.md:49
msgid "Stack vs Heap"
msgstr "์คํ(Stack)๊ณผ ํ(Heap)"
-#: src/SUMMARY.md:49 src/memory-management/stack.md:1
+#: src/SUMMARY.md:50
msgid "Stack Memory"
msgstr "์คํ ๋ฉ๋ชจ๋ฆฌ"
-#: src/SUMMARY.md:50 src/memory-management/manual.md:1
+#: src/SUMMARY.md:51 src/memory-management/manual.md:1
msgid "Manual Memory Management"
msgstr "์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ"
-#: src/SUMMARY.md:51 src/memory-management/scope-based.md:1
+#: src/SUMMARY.md:52 src/memory-management/scope-based.md:1
msgid "Scope-Based Memory Management"
msgstr "๋ฒ์๊ธฐ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ"
-#: src/SUMMARY.md:52
+#: src/SUMMARY.md:53
msgid "Garbage Collection"
msgstr "๊ฐ๋น์ง ์ปฌ๋ ์
"
-#: src/SUMMARY.md:53
+#: src/SUMMARY.md:54
msgid "Rust Memory Management"
msgstr "๋ฌ์คํธ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ"
-#: src/SUMMARY.md:54 src/memory-management/comparison.md:1
+#: src/SUMMARY.md:55 src/memory-management/comparison.md:1
msgid "Comparison"
msgstr "๋น๊ต"
-#: src/SUMMARY.md:55 src/ownership.md:1
+#: src/SUMMARY.md:56 src/ownership.md:1
msgid "Ownership"
msgstr "์์ ๊ถ"
-#: src/SUMMARY.md:56 src/ownership/move-semantics.md:1
+#: src/SUMMARY.md:57 src/ownership/move-semantics.md:1
msgid "Move Semantics"
msgstr "Move ๋ฌธ๋ฒ"
-#: src/SUMMARY.md:57 src/ownership/moved-strings-rust.md:1
+#: src/SUMMARY.md:58 src/ownership/moved-strings-rust.md:1
msgid "Moved Strings in Rust"
msgstr "๋ฌ์คํธ์์์ ๋ฌธ์์ด ์ด๋"
-#: src/SUMMARY.md:58 src/ownership/double-free-modern-cpp.md:1
+#: src/SUMMARY.md:59
msgid "Double Frees in Modern C++"
msgstr "Modern C++์์ ์ด์คํด์ ๋ฌธ์ "
-#: src/SUMMARY.md:59 src/ownership/moves-function-calls.md:1
+#: src/SUMMARY.md:60 src/ownership/moves-function-calls.md:1
msgid "Moves in Function Calls"
msgstr "ํจ์ ํธ์ถ์์์ ์ด๋(Move)"
-#: src/SUMMARY.md:60 src/ownership/copy-clone.md:1
+#: src/SUMMARY.md:61 src/ownership/copy-clone.md:1
msgid "Copying and Cloning"
msgstr "๋ณต์ฌ์ ๋ณต์ "
-#: src/SUMMARY.md:61 src/ownership/borrowing.md:1
+#: src/SUMMARY.md:62 src/ownership/borrowing.md:1
msgid "Borrowing"
msgstr "๋น๋ฆผ"
-#: src/SUMMARY.md:62 src/ownership/shared-unique-borrows.md:1
+#: src/SUMMARY.md:63 src/ownership/shared-unique-borrows.md:1
msgid "Shared and Unique Borrows"
msgstr "๊ณต์ ์ ๊ณ ์ ๋น๋ฆผ"
-#: src/SUMMARY.md:63 src/ownership/lifetimes.md:1
+#: src/SUMMARY.md:64 src/ownership/lifetimes.md:1
msgid "Lifetimes"
msgstr "์๋ช
"
-#: src/SUMMARY.md:64 src/ownership/lifetimes-function-calls.md:1
+#: src/SUMMARY.md:65 src/ownership/lifetimes-function-calls.md:1
msgid "Lifetimes in Function Calls"
msgstr "ํจ์ ํธ์ถ์์์ ์๋ช
"
-#: src/SUMMARY.md:65 src/ownership/lifetimes-data-structures.md:1
+#: src/SUMMARY.md:66 src/ownership/lifetimes-data-structures.md:1
msgid "Lifetimes in Data Structures"
msgstr "๊ตฌ์กฐ์ฒด์์์ ์๋ช
"
-#: src/SUMMARY.md:67 src/exercises/day-1/book-library.md:1
-#: src/exercises/day-1/solutions-afternoon.md:3
-msgid "Designing a Library"
-msgstr "๋์๊ด ์ค๊ณ"
+#: src/SUMMARY.md:68 src/exercises/day-1/book-library.md:1
+msgid "Storing Books"
+msgstr "์ฑ
์ ์ฅํ๊ธฐ"
-#: src/SUMMARY.md:68 src/exercises/day-1/iterators-and-ownership.md:1
+#: src/SUMMARY.md:69 src/exercises/day-1/iterators-and-ownership.md:1
msgid "Iterators and Ownership"
msgstr "๋ฐ๋ณต์์ ์์ ๊ถ"
-#: src/SUMMARY.md:71
+#: src/SUMMARY.md:72
msgid "Day 2: Morning"
msgstr "2์ผ์ฐจ ์ค์ "
-#: src/SUMMARY.md:76 src/structs.md:1
+#: src/SUMMARY.md:77 src/structs.md:1
msgid "Structs"
msgstr "๊ตฌ์กฐ์ฒด"
-#: src/SUMMARY.md:77 src/structs/tuple-structs.md:1
+#: src/SUMMARY.md:78 src/structs/tuple-structs.md:1
msgid "Tuple Structs"
msgstr "ํํ"
-#: src/SUMMARY.md:78 src/structs/field-shorthand.md:1
+#: src/SUMMARY.md:79 src/structs/field-shorthand.md:1
msgid "Field Shorthand Syntax"
msgstr "ํ๋ ํ ๋น ๋จ์ถ ๋ฌธ๋ฒ"
-#: src/SUMMARY.md:79 src/enums.md:1
+#: src/SUMMARY.md:80 src/enums.md:1
msgid "Enums"
msgstr "์ด๊ฑฐํ"
-#: src/SUMMARY.md:80 src/enums/variant-payloads.md:1
+#: src/SUMMARY.md:81 src/enums/variant-payloads.md:1
msgid "Variant Payloads"
msgstr "๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ์ด๊ฑฐํ(Variant Payloads)"
-#: src/SUMMARY.md:81 src/enums/sizes.md:1
+#: src/SUMMARY.md:82 src/enums/sizes.md:1
msgid "Enum Sizes"
msgstr "์ด๊ฑฐํ์ ํฌ๊ธฐ"
-#: src/SUMMARY.md:83 src/methods/receiver.md:1
+#: src/SUMMARY.md:84 src/methods/receiver.md:1
msgid "Method Receiver"
msgstr "๋ฉ์๋ ๋ฆฌ์๋ฒ(Receiver)"
-#: src/SUMMARY.md:84 src/SUMMARY.md:159 src/SUMMARY.md:194
+#: src/SUMMARY.md:85 src/SUMMARY.md:161 src/SUMMARY.md:276
#: src/methods/example.md:1 src/concurrency/shared_state/example.md:1
msgid "Example"
msgstr "์์ "
-#: src/SUMMARY.md:85 src/pattern-matching.md:1
+#: src/SUMMARY.md:86 src/pattern-matching.md:1
msgid "Pattern Matching"
msgstr "ํจํด ๋งค์นญ"
-#: src/SUMMARY.md:86 src/pattern-matching/destructuring-enums.md:1
+#: src/SUMMARY.md:87 src/pattern-matching/destructuring-enums.md:1
msgid "Destructuring Enums"
msgstr "์ด๊ฑฐํ ๋ถํด(์ญ๊ตฌ์กฐํ)"
-#: src/SUMMARY.md:87 src/pattern-matching/destructuring-structs.md:1
+#: src/SUMMARY.md:88 src/pattern-matching/destructuring-structs.md:1
msgid "Destructuring Structs"
msgstr "๊ตฌ์กฐ์ฒด ๋ถํด(์ญ๊ตฌ์กฐํ)"
-#: src/SUMMARY.md:88 src/pattern-matching/destructuring-arrays.md:1
+#: src/SUMMARY.md:89 src/pattern-matching/destructuring-arrays.md:1
msgid "Destructuring Arrays"
msgstr "๋ฐฐ์ด ๋ถํด(์ญ๊ตฌ์กฐํ)"
-#: src/SUMMARY.md:89 src/pattern-matching/match-guards.md:1
+#: src/SUMMARY.md:90 src/pattern-matching/match-guards.md:1
msgid "Match Guards"
msgstr "๋งค์น ๊ฐ๋"
-#: src/SUMMARY.md:91 src/exercises/day-2/health-statistics.md:1
+#: src/SUMMARY.md:92 src/exercises/day-2/health-statistics.md:1
msgid "Health Statistics"
msgstr "๊ฑด๊ฐ์ํ ๋ชจ๋ํฐ๋ง ์์คํ
"
-#: src/SUMMARY.md:92 src/exercises/day-2/solutions-morning.md:3
+#: src/SUMMARY.md:93 src/exercises/day-2/solutions-morning.md:3
msgid "Points and Polygons"
msgstr "์ ๊ณผ ๋ค๊ฐํ"
-#: src/SUMMARY.md:94
+#: src/SUMMARY.md:95
msgid "Day 2: Afternoon"
msgstr "2์ผ์ฐจ ์คํ"
-#: src/SUMMARY.md:96 src/control-flow.md:1
+#: src/SUMMARY.md:97 src/SUMMARY.md:290 src/control-flow.md:1
msgid "Control Flow"
msgstr "ํ๋ฆ ์ ์ด"
-#: src/SUMMARY.md:97 src/control-flow/blocks.md:1
+#: src/SUMMARY.md:98 src/control-flow/blocks.md:1
msgid "Blocks"
msgstr "๋ธ๋ก"
-#: src/SUMMARY.md:98
+#: src/SUMMARY.md:99
msgid "if expressions"
msgstr "if ํํ์"
-#: src/SUMMARY.md:99
+#: src/SUMMARY.md:100
msgid "if let expressions"
msgstr "if let ํํ์"
-#: src/SUMMARY.md:100
+#: src/SUMMARY.md:101
msgid "while expressions"
msgstr "while ํํ์"
-#: src/SUMMARY.md:101
+#: src/SUMMARY.md:102
msgid "while let expressions"
msgstr "while let ํํ์"
-#: src/SUMMARY.md:102
+#: src/SUMMARY.md:103
msgid "for expressions"
msgstr "for ํํ์"
-#: src/SUMMARY.md:103
+#: src/SUMMARY.md:104
msgid "loop expressions"
msgstr "loop ํํ์"
-#: src/SUMMARY.md:104
+#: src/SUMMARY.md:105
msgid "match expressions"
msgstr "match ํํ์"
-#: src/SUMMARY.md:105
+#: src/SUMMARY.md:106
msgid "break & continue"
msgstr "break์ continue"
-#: src/SUMMARY.md:106 src/std.md:1
+#: src/SUMMARY.md:107 src/std.md:1
msgid "Standard Library"
msgstr "ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ"
-#: src/SUMMARY.md:107
+#: src/SUMMARY.md:108
msgid "Option and Result"
msgstr "Option๊ณผ Result"
-#: src/SUMMARY.md:108 src/std/string.md:1
+#: src/SUMMARY.md:109 src/std/string.md:1
msgid "String"
msgstr "String"
-#: src/SUMMARY.md:109
+#: src/SUMMARY.md:110
msgid "Vec"
msgstr "Vec"
-#: src/SUMMARY.md:110
+#: src/SUMMARY.md:111
msgid "HashMap"
msgstr "HashMap"
-#: src/SUMMARY.md:111
+#: src/SUMMARY.md:112
msgid "Box"
msgstr "Box"
-#: src/SUMMARY.md:112
+#: src/SUMMARY.md:113
msgid "Recursive Data Types"
msgstr "์ฌ๊ท์ ์๋ฃ๊ตฌ์กฐ"
-#: src/SUMMARY.md:113 src/std/box-niche.md:1
+#: src/SUMMARY.md:114 src/std/box-niche.md:1
msgid "Niche Optimization"
msgstr "๋์น(ํ์) ์ต์ ํ(Niche Optimization)"
-#: src/SUMMARY.md:114
+#: src/SUMMARY.md:115
msgid "Rc"
msgstr "Rc"
-#: src/SUMMARY.md:115 src/modules.md:1
+#: src/SUMMARY.md:116
+msgid "Cell/RefCell"
+msgstr "Cell๊ณผ RefCell"
+
+#: src/SUMMARY.md:117 src/modules.md:1
msgid "Modules"
msgstr "๋ชจ๋"
-#: src/SUMMARY.md:116 src/modules/visibility.md:1
+#: src/SUMMARY.md:118 src/modules/visibility.md:1
msgid "Visibility"
msgstr "๊ฐ์์ฑ"
-#: src/SUMMARY.md:117 src/modules/paths.md:1
+#: src/SUMMARY.md:119 src/modules/paths.md:1
msgid "Paths"
msgstr "๊ฒฝ๋ก"
-#: src/SUMMARY.md:118 src/modules/filesystem.md:1
+#: src/SUMMARY.md:120 src/modules/filesystem.md:1
msgid "Filesystem Hierarchy"
msgstr "ํ์ผ์์คํ
๊ณ์ธต"
-#: src/SUMMARY.md:120 src/exercises/day-2/luhn.md:1
+#: src/SUMMARY.md:122 src/exercises/day-2/luhn.md:1
#: src/exercises/day-2/solutions-afternoon.md:3
msgid "Luhn Algorithm"
msgstr "๋ฃฌ ์๊ณ ๋ฆฌ์ฆ"
-#: src/SUMMARY.md:121 src/exercises/day-2/strings-iterators.md:1
-#: src/exercises/day-2/solutions-afternoon.md:98
+#: src/SUMMARY.md:123 src/exercises/day-2/strings-iterators.md:1
+#: src/exercises/day-2/solutions-afternoon.md:97
msgid "Strings and Iterators"
msgstr "๋ฌธ์์ด๊ณผ ๋ฐ๋ณต์"
-#: src/SUMMARY.md:124
+#: src/SUMMARY.md:126
msgid "Day 3: Morning"
msgstr "3์ผ์ฐจ ์ค์ "
-#: src/SUMMARY.md:129 src/traits.md:1
-msgid "Traits"
-msgstr "ํธ๋ ์(Trait)"
-
-#: src/SUMMARY.md:130 src/traits/deriving-traits.md:1
-msgid "Deriving Traits"
-msgstr "ํธ๋ ์ ์์ํ๊ธฐ"
-
-#: src/SUMMARY.md:131 src/traits/default-methods.md:1
-msgid "Default Methods"
-msgstr "๊ธฐ๋ณธ ๋ฉ์๋"
-
-#: src/SUMMARY.md:132 src/traits/important-traits.md:1
-msgid "Important Traits"
-msgstr "์ค์ํ ํธ๋ ์"
-
-#: src/SUMMARY.md:133
-msgid "Iterator"
-msgstr "Iterator"
-
-#: src/SUMMARY.md:134 src/traits/from-iterator.md:1
-msgid "FromIterator"
-msgstr "FromIterator"
-
-#: src/SUMMARY.md:135
-msgid "From and Into"
-msgstr "From๊ณผ Into"
-
-#: src/SUMMARY.md:136
-msgid "Read and Write"
-msgstr "Read์ Write"
-
-#: src/SUMMARY.md:137
-msgid "Add, Mul, ..."
-msgstr "Add, Mul, ..."
-
-#: src/SUMMARY.md:138
-msgid "Drop"
-msgstr "Drop"
-
-#: src/SUMMARY.md:139
-msgid "Default"
-msgstr "Default"
-
-#: src/SUMMARY.md:140 src/generics.md:1
+#: src/SUMMARY.md:131 src/generics.md:1
msgid "Generics"
msgstr "์ ๋ค๋ฆญ"
-#: src/SUMMARY.md:141 src/generics/data-types.md:1
+#: src/SUMMARY.md:132 src/generics/data-types.md:1
msgid "Generic Data Types"
msgstr "์ ๋ค๋ฆญ ๋ฐ์ดํฐ ํ์
"
-#: src/SUMMARY.md:142 src/generics/methods.md:1
+#: src/SUMMARY.md:133 src/generics/methods.md:1
msgid "Generic Methods"
msgstr "์ ๋ค๋ฆญ ๋ฉ์๋"
-#: src/SUMMARY.md:143 src/generics/trait-bounds.md:1
-msgid "Trait Bounds"
-msgstr "์ ๋ค๋ฆญ ํ์
์ ํ(ํธ๋ ์ ๊ฒฝ๊ณ)"
-
-#: src/SUMMARY.md:144
-msgid "impl Trait"
-msgstr "ํธ๋ ์ ๊ตฌํํ๊ธฐ"
-
-#: src/SUMMARY.md:145 src/generics/closures.md:1
-msgid "Closures"
-msgstr "ํด๋ก์ "
-
-#: src/SUMMARY.md:146 src/generics/monomorphization.md:1
+#: src/SUMMARY.md:134 src/generics/monomorphization.md:1
msgid "Monomorphization"
msgstr "๋จํํ"
-#: src/SUMMARY.md:147 src/generics/trait-objects.md:1
+#: src/SUMMARY.md:135 src/traits.md:1
+msgid "Traits"
+msgstr "ํธ๋ ์(Trait)"
+
+#: src/SUMMARY.md:136 src/traits/trait-objects.md:1
msgid "Trait Objects"
msgstr "ํธ๋ ์ ๊ฐ์ฒด"
-#: src/SUMMARY.md:149 src/exercises/day-3/simple-gui.md:1
+#: src/SUMMARY.md:137 src/traits/deriving-traits.md:1
+msgid "Deriving Traits"
+msgstr "ํธ๋ ์ ์์ํ๊ธฐ"
+
+#: src/SUMMARY.md:138 src/traits/default-methods.md:1
+msgid "Default Methods"
+msgstr "๊ธฐ๋ณธ ๋ฉ์๋"
+
+#: src/SUMMARY.md:139 src/traits/trait-bounds.md:1
+msgid "Trait Bounds"
+msgstr "์ ๋ค๋ฆญ ํ์
์ ํ(ํธ๋ ์ ๊ฒฝ๊ณ)"
+
+#: src/SUMMARY.md:140
+msgid "impl Trait"
+msgstr "ํธ๋ ์ ๊ตฌํํ๊ธฐ"
+
+#: src/SUMMARY.md:141 src/traits/important-traits.md:1
+msgid "Important Traits"
+msgstr "์ค์ํ ํธ๋ ์"
+
+#: src/SUMMARY.md:142
+msgid "Iterator"
+msgstr "Iterator"
+
+#: src/SUMMARY.md:143 src/traits/from-iterator.md:1
+msgid "FromIterator"
+msgstr "FromIterator"
+
+#: src/SUMMARY.md:144
+msgid "From and Into"
+msgstr "From๊ณผ Into"
+
+#: src/SUMMARY.md:145
+msgid "Read and Write"
+msgstr "Read์ Write"
+
+#: src/SUMMARY.md:146
+msgid "Drop"
+msgstr "Drop"
+
+#: src/SUMMARY.md:147
+msgid "Default"
+msgstr "Default"
+
+#: src/SUMMARY.md:148
+msgid "Operators: Add, Mul, ..."
+msgstr "์ฐ์ฐ์: Add, Mul, ..."
+
+#: src/SUMMARY.md:149
+msgid "Closures: Fn, FnMut, FnOnce"
+msgstr "ํด๋ก์ : Fn, FnMut, FnOnce"
+
+#: src/SUMMARY.md:151 src/exercises/day-3/simple-gui.md:1
#: src/exercises/day-3/solutions-morning.md:3
msgid "A Simple GUI Library"
msgstr "๊ฐ๋จํ GUI ๋ผ์ด๋ธ๋ฌ๋ฆฌ"
-#: src/SUMMARY.md:151
+#: src/SUMMARY.md:153
msgid "Day 3: Afternoon"
msgstr "3์ผ์ฐจ ์คํ"
-#: src/SUMMARY.md:153 src/error-handling.md:1
+#: src/SUMMARY.md:155 src/error-handling.md:1
msgid "Error Handling"
msgstr "์ค๋ฅ์ฒ๋ฆฌ"
-#: src/SUMMARY.md:154 src/error-handling/panics.md:1
+#: src/SUMMARY.md:156 src/error-handling/panics.md:1
msgid "Panics"
msgstr "ํจ๋"
-#: src/SUMMARY.md:155
+#: src/SUMMARY.md:157
msgid "Catching Stack Unwinding"
msgstr "์คํ ๋๊ฐ๊ธฐ"
-#: src/SUMMARY.md:156
+#: src/SUMMARY.md:158
msgid "Structured Error Handling"
msgstr "๊ตฌ์กฐํ๋ ์ค๋ฅ์ฒ๋ฆฌ"
-#: src/SUMMARY.md:157
+#: src/SUMMARY.md:159
msgid "Propagating Errors with ?"
msgstr "'?'๋ฅผ ์ด์ฉํ ์ค๋ฅ ์ ํ"
-#: src/SUMMARY.md:158 src/error-handling/converting-error-types.md:1
+#: src/SUMMARY.md:160 src/error-handling/converting-error-types.md:1
#: src/error-handling/converting-error-types-example.md:1
msgid "Converting Error Types"
msgstr "์ค๋ฅํ์
๋ณํ"
-#: src/SUMMARY.md:160 src/error-handling/deriving-error-enums.md:1
+#: src/SUMMARY.md:162 src/error-handling/deriving-error-enums.md:1
msgid "Deriving Error Enums"
msgstr "๋๋ค๋ฅธ ์ค๋ฅ ์ด๊ฑฐํ"
-#: src/SUMMARY.md:161 src/error-handling/dynamic-errors.md:1
+#: src/SUMMARY.md:163 src/error-handling/dynamic-errors.md:1
msgid "Dynamic Error Types"
msgstr "๋์ ์ธ ์๋ฌ ํ์
"
-#: src/SUMMARY.md:162 src/error-handling/error-contexts.md:1
+#: src/SUMMARY.md:164 src/error-handling/error-contexts.md:1
msgid "Adding Context to Errors"
msgstr "์ค๋ฅ์ ์ํฉ์ ๋ณด ์ถ๊ฐ"
-#: src/SUMMARY.md:163 src/testing.md:1
+#: src/SUMMARY.md:165 src/testing.md:1
msgid "Testing"
msgstr "ํ
์คํธ"
-#: src/SUMMARY.md:164 src/testing/unit-tests.md:1
+#: src/SUMMARY.md:166 src/testing/unit-tests.md:1
msgid "Unit Tests"
msgstr "๋จ์ ํ
์คํธ"
-#: src/SUMMARY.md:165 src/testing/test-modules.md:1
+#: src/SUMMARY.md:167 src/testing/test-modules.md:1
msgid "Test Modules"
msgstr "ํ
์คํธ ๋ชจ๋"
-#: src/SUMMARY.md:166 src/testing/doc-tests.md:1
+#: src/SUMMARY.md:168 src/testing/doc-tests.md:1
msgid "Documentation Tests"
msgstr "๋ฌธ์ํ์ฃผ์ ํ
์คํธ"
-#: src/SUMMARY.md:167 src/testing/integration-tests.md:1
+#: src/SUMMARY.md:169 src/testing/integration-tests.md:1
msgid "Integration Tests"
msgstr "ํตํฉ ํ
์คํธ"
-#: src/SUMMARY.md:168 src/unsafe.md:1
+#: src/SUMMARY.md:170 src/bare-metal/useful-crates.md:1
+msgid "Useful crates"
+msgstr "์ ์ฉํ ํฌ๋ ์ดํธ"
+
+#: src/SUMMARY.md:171 src/unsafe.md:1
msgid "Unsafe Rust"
msgstr "์์ ํ์ง ์์ ๋ฌ์คํธ"
-#: src/SUMMARY.md:169 src/unsafe/raw-pointers.md:1
+#: src/SUMMARY.md:172 src/unsafe/raw-pointers.md:1
msgid "Dereferencing Raw Pointers"
msgstr "์์ ํฌ์ธํฐ ์ญ์ฐธ์กฐ(๋ฐ๋ผ๊ฐ๊ธฐ)"
-#: src/SUMMARY.md:170 src/unsafe/mutable-static-variables.md:1
+#: src/SUMMARY.md:173 src/unsafe/mutable-static-variables.md:1
msgid "Mutable Static Variables"
msgstr "์ ์ ๊ฐ๋ณ ๋ณ์"
-#: src/SUMMARY.md:171 src/unsafe/unions.md:1
+#: src/SUMMARY.md:174 src/unsafe/unions.md:1
msgid "Unions"
msgstr "Unions"
-#: src/SUMMARY.md:172 src/unsafe/calling-unsafe-functions.md:1
+#: src/SUMMARY.md:175 src/unsafe/calling-unsafe-functions.md:1
msgid "Calling Unsafe Functions"
msgstr "์์ ํ์ง ์์ ํจ์ ํธ์ถ"
-#: src/SUMMARY.md:173 src/unsafe/writing-unsafe-functions.md:1
+#: src/SUMMARY.md:176 src/unsafe/writing-unsafe-functions.md:1
msgid "Writing Unsafe Functions"
msgstr "์์ ํ์ง ์์ ํจ์ ์์ฑํ๊ธฐ"
-#: src/SUMMARY.md:174
+#: src/SUMMARY.md:177
msgid "Extern Functions"
msgstr "์ธ๋ถ(๋ค๋ฅธ์ธ์ด) ํจ์๋ค"
-#: src/SUMMARY.md:175 src/unsafe/unsafe-traits.md:1
+#: src/SUMMARY.md:178 src/unsafe/unsafe-traits.md:1
msgid "Implementing Unsafe Traits"
msgstr "์์ ํ์ง ์์ ํธ๋ ์ ๊ตฌํํ๊ธฐ"
-#: src/SUMMARY.md:177 src/exercises/day-3/safe-ffi-wrapper.md:1
+#: src/SUMMARY.md:180 src/exercises/day-3/safe-ffi-wrapper.md:1
#: src/exercises/day-3/solutions-afternoon.md:3
msgid "Safe FFI Wrapper"
msgstr "FFI๋ํผ"
-#: src/SUMMARY.md:180
-msgid "Day 4: Morning"
-msgstr "4์ผ์ฐจ ์ค์ "
-
-#: src/SUMMARY.md:185
-msgid "Concurrency"
-msgstr "๋์์ฑ"
-
-#: src/SUMMARY.md:186 src/concurrency/threads.md:1
-msgid "Threads"
-msgstr "์ค๋ ๋"
-
-#: src/SUMMARY.md:187 src/concurrency/scoped-threads.md:1
-msgid "Scoped Threads"
-msgstr "๋ฒ์ ์ค๋ ๋(Scoped Threads)"
-
-#: src/SUMMARY.md:188 src/concurrency/channels.md:1
-msgid "Channels"
-msgstr "์ฑ๋"
-
-#: src/SUMMARY.md:189 src/concurrency/channels/unbounded.md:1
-msgid "Unbounded Channels"
-msgstr "๋ฌด๊ฒฝ๊ณ ์ฑ๋"
-
-#: src/SUMMARY.md:190 src/concurrency/channels/bounded.md:1
-msgid "Bounded Channels"
-msgstr "๊ฒฝ๊ณ ์ฑ๋"
-
-#: src/SUMMARY.md:191 src/concurrency/shared_state.md:1
-msgid "Shared State"
-msgstr "์ํ ๊ณต์ "
-
-#: src/SUMMARY.md:192
-msgid "Arc"
-msgstr "Arc"
-
-#: src/SUMMARY.md:193
-msgid "Mutex"
-msgstr "Mutex"
-
-#: src/SUMMARY.md:195
-msgid "Send and Sync"
-msgstr "Send์ Sync"
-
-#: src/SUMMARY.md:195
-msgid "Send"
-msgstr "Send"
-
-#: src/SUMMARY.md:195
-msgid "Sync"
-msgstr "Sync"
-
-#: src/SUMMARY.md:198 src/concurrency/send-sync/examples.md:1
-msgid "Examples"
-msgstr "์์ "
-
-#: src/SUMMARY.md:200 src/exercises/day-4/dining-philosophers.md:1
-#: src/exercises/day-4/solutions-morning.md:3
-msgid "Dining Philosophers"
-msgstr "์์ฌํ๋ ์ฒ ํ์๋ค"
-
-#: src/SUMMARY.md:201 src/exercises/day-4/link-checker.md:1
-msgid "Multi-threaded Link Checker"
-msgstr "๋ฉํฐ์ค๋ ๋ ๋งํฌ ๊ฒ์ฌ๊ธฐ"
-
-#: src/SUMMARY.md:203
-msgid "Day 4: Afternoon (Android)"
-msgstr "4์ผ์ฐจ ์คํ (์๋๋ก์ด๋)"
-
-#: src/SUMMARY.md:203 src/running-the-course/day-4.md:15 src/android.md:1
+#: src/SUMMARY.md:183 src/SUMMARY.md:253
+#: src/running-the-course/course-structure.md:16 src/bare-metal/android.md:1
msgid "Android"
msgstr "์๋๋ก์ด๋"
-#: src/SUMMARY.md:208 src/android/setup.md:1
+#: src/SUMMARY.md:188 src/android/setup.md:1
msgid "Setup"
msgstr "์ค์น"
-#: src/SUMMARY.md:209 src/android/build-rules.md:1
+#: src/SUMMARY.md:189 src/android/build-rules.md:1
msgid "Build Rules"
msgstr "๋น๋ ๊ท์น"
-#: src/SUMMARY.md:210
+#: src/SUMMARY.md:190
msgid "Binary"
msgstr "๋ฐ์ด๋๋ฆฌ"
-#: src/SUMMARY.md:211
+#: src/SUMMARY.md:191
msgid "Library"
msgstr "๋ผ์ด๋ธ๋ฌ๋ฆฌ"
-#: src/SUMMARY.md:212 src/android/aidl.md:1
+#: src/SUMMARY.md:192 src/android/aidl.md:1
msgid "AIDL"
msgstr "AIDL"
-#: src/SUMMARY.md:213
+#: src/SUMMARY.md:193
msgid "Interface"
msgstr "AIDL ์ธํฐํ์ด์ค"
-#: src/SUMMARY.md:214
+#: src/SUMMARY.md:194
msgid "Implementation"
msgstr "์๋น์ค ๊ตฌํ"
-#: src/SUMMARY.md:215
+#: src/SUMMARY.md:195
msgid "Server"
msgstr "AIDL ์๋ฒ"
-#: src/SUMMARY.md:216 src/android/aidl/deploy.md:1
+#: src/SUMMARY.md:196 src/android/aidl/deploy.md:1
msgid "Deploy"
msgstr "๋ฐฐํฌ"
-#: src/SUMMARY.md:217
+#: src/SUMMARY.md:197
msgid "Client"
msgstr "ํด๋ผ์ด์ธํธ"
-#: src/SUMMARY.md:218 src/android/aidl/changing.md:1
+#: src/SUMMARY.md:198 src/android/aidl/changing.md:1
msgid "Changing API"
msgstr "API ์์ "
-#: src/SUMMARY.md:219 src/android/logging.md:1
+#: src/SUMMARY.md:199 src/SUMMARY.md:243 src/android/logging.md:1
+#: src/bare-metal/aps/logging.md:1
msgid "Logging"
msgstr "๋ก๊น
"
-#: src/SUMMARY.md:220 src/android/interoperability.md:1
+#: src/SUMMARY.md:200 src/android/interoperability.md:1
msgid "Interoperability"
msgstr "์ํธ์ด์ฉ์ฑ"
-#: src/SUMMARY.md:221
+#: src/SUMMARY.md:201
msgid "With C"
msgstr "C์์ ์ํธ์ด์ฉ์ฑ"
-#: src/SUMMARY.md:222
+#: src/SUMMARY.md:202
msgid "Calling C with Bindgen"
msgstr "Bindgen์ ์ฌ์ฉํ Cํธ์ถ"
-#: src/SUMMARY.md:223
+#: src/SUMMARY.md:203
msgid "Calling Rust from C"
msgstr "C์์ ๋ฌ์คํธ ํธ์ถ"
-#: src/SUMMARY.md:224 src/android/interoperability/cpp.md:1
+#: src/SUMMARY.md:204 src/android/interoperability/cpp.md:1
msgid "With C++"
msgstr "C++์์ ์ํธ์ด์ฉ์ฑ"
-#: src/SUMMARY.md:225
+#: src/SUMMARY.md:205
msgid "With Java"
msgstr "Java์์ ์ํธ์ด์ฉ์ฑ"
-#: src/SUMMARY.md:228
+#: src/SUMMARY.md:209
+msgid "Bare Metal: Morning"
+msgstr "Bare Metal ์ค์ "
+
+#: src/SUMMARY.md:214
+msgid "no_std"
+msgstr "no_std"
+
+#: src/SUMMARY.md:215
+msgid "A Minimal Example"
+msgstr "์์ ์์ "
+
+#: src/SUMMARY.md:216
+msgid "alloc"
+msgstr "alloc"
+
+#: src/SUMMARY.md:217 src/bare-metal/microcontrollers.md:1
+msgid "Microcontrollers"
+msgstr "๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ"
+
+#: src/SUMMARY.md:218 src/bare-metal/microcontrollers/mmio.md:1
+msgid "Raw MMIO"
+msgstr "์์ MMIO"
+
+#: src/SUMMARY.md:219
+msgid "PACs"
+msgstr "PAC"
+
+#: src/SUMMARY.md:220
+msgid "HAL Crates"
+msgstr "HAL ํฌ๋ ์ดํธ"
+
+#: src/SUMMARY.md:221
+msgid "Board Support Crates"
+msgstr "๋ณด๋ ์ง์ ํฌ๋ ์ดํธ"
+
+#: src/SUMMARY.md:222
+msgid "The Type State Pattern"
+msgstr "Type State ํจํด"
+
+#: src/SUMMARY.md:223
+msgid "embedded-hal"
+msgstr "embedded-hal"
+
+#: src/SUMMARY.md:224
+msgid "probe-rs, cargo-embed"
+msgstr "progo-rs, cargo-embed"
+
+#: src/SUMMARY.md:225 src/bare-metal/microcontrollers/debugging.md:1
+msgid "Debugging"
+msgstr "๋๋ฒ๊น
"
+
+#: src/SUMMARY.md:226 src/SUMMARY.md:246
+msgid "Other Projects"
+msgstr "๋ค๋ฅธ ํ๋ก์ ํธ"
+
+#: src/SUMMARY.md:228 src/exercises/bare-metal/compass.md:1
+#: src/exercises/bare-metal/solutions-morning.md:3
+msgid "Compass"
+msgstr "๋์นจ๋ฐ"
+
+#: src/SUMMARY.md:230
+msgid "Bare Metal: Afternoon"
+msgstr "Bare Metal ์คํ"
+
+#: src/SUMMARY.md:232
+msgid "Application Processors"
+msgstr "์ ํ๋ฆฌ์ผ์ด์
ํ๋ก์ธ์"
+
+#: src/SUMMARY.md:233 src/bare-metal/aps/entry-point.md:1
+msgid "Getting Ready to Rust"
+msgstr "Rust ์ํ ์ค๋น"
+
+#: src/SUMMARY.md:234
+msgid "Inline Assembly"
+msgstr "์ธ๋ผ์ธ ์ด์
๋ธ๋ฆฌ"
+
+#: src/SUMMARY.md:235
+msgid "MMIO"
+msgstr "MMIO"
+
+#: src/SUMMARY.md:236
+msgid "Let's Write a UART Driver"
+msgstr "UART ๋๋ผ์ด๋ฒ ์์ฑ"
+
+#: src/SUMMARY.md:237
+msgid "More Traits"
+msgstr "๋ ๋ง์ ํธ๋ ์"
+
+#: src/SUMMARY.md:238
+msgid "A Better UART Driver"
+msgstr "๋ ๋์ UART ๋๋ผ์ด๋ฒ"
+
+#: src/SUMMARY.md:239 src/bare-metal/aps/better-uart/bitflags.md:1
+msgid "Bitflags"
+msgstr "๋นํธํ๋๊ทธ"
+
+#: src/SUMMARY.md:240
+msgid "Multiple Registers"
+msgstr "๋ ๋ง์ ๋ ์ง์คํฐ"
+
+#: src/SUMMARY.md:241 src/bare-metal/aps/better-uart/driver.md:1
+msgid "Driver"
+msgstr "๋๋ผ์ด๋ฒ"
+
+#: src/SUMMARY.md:242 src/SUMMARY.md:244
+msgid "Using It"
+msgstr "์ฌ์ฉํด ๋ณด๊ธฐ"
+
+#: src/SUMMARY.md:245 src/bare-metal/aps/exceptions.md:1
+msgid "Exceptions"
+msgstr "์์ธ"
+
+#: src/SUMMARY.md:247
+msgid "Useful Crates"
+msgstr "์ ์ฉํ ํฌ๋ ์ดํธ"
+
+#: src/SUMMARY.md:248
+msgid "zerocopy"
+msgstr "zerocopy"
+
+#: src/SUMMARY.md:249
+msgid "aarch64-paging"
+msgstr "aarch64-paging"
+
+#: src/SUMMARY.md:250
+msgid "buddy_system_allocator"
+msgstr "buddy_system_allocator"
+
+#: src/SUMMARY.md:251
+msgid "tinyvec"
+msgstr "tinyvec"
+
+#: src/SUMMARY.md:252
+msgid "spin"
+msgstr "ํ์ "
+
+#: src/SUMMARY.md:254 src/bare-metal/android/vmbase.md:1
+msgid "vmbase"
+msgstr "vmbase"
+
+#: src/SUMMARY.md:256
+msgid "RTC Driver"
+msgstr "RTC ๋๋ผ์ด๋ฒ"
+
+#: src/SUMMARY.md:259
+msgid "Concurrency: Morning"
+msgstr "๋์์ฑ ์ค์ "
+
+#: src/SUMMARY.md:264 src/concurrency/threads.md:1
+msgid "Threads"
+msgstr "์ค๋ ๋"
+
+#: src/SUMMARY.md:265 src/concurrency/scoped-threads.md:1
+msgid "Scoped Threads"
+msgstr "๋ฒ์ ์ค๋ ๋(Scoped Threads)"
+
+#: src/SUMMARY.md:266 src/concurrency/channels.md:1
+msgid "Channels"
+msgstr "์ฑ๋"
+
+#: src/SUMMARY.md:267 src/concurrency/channels/unbounded.md:1
+msgid "Unbounded Channels"
+msgstr "๋ฌด๊ฒฝ๊ณ ์ฑ๋"
+
+#: src/SUMMARY.md:268 src/concurrency/channels/bounded.md:1
+msgid "Bounded Channels"
+msgstr "๊ฒฝ๊ณ ์ฑ๋"
+
+#: src/SUMMARY.md:269
+msgid "Send and Sync"
+msgstr "Send์ Sync"
+
+#: src/SUMMARY.md:269
+msgid "Send"
+msgstr "Send"
+
+#: src/SUMMARY.md:269
+msgid "Sync"
+msgstr "Sync"
+
+#: src/SUMMARY.md:272 src/concurrency/send-sync/examples.md:1
+msgid "Examples"
+msgstr "์์ "
+
+#: src/SUMMARY.md:273 src/concurrency/shared_state.md:1
+msgid "Shared State"
+msgstr "์ํ ๊ณต์ "
+
+#: src/SUMMARY.md:274
+msgid "Arc"
+msgstr "Arc"
+
+#: src/SUMMARY.md:275
+msgid "Mutex"
+msgstr "Mutex"
+
+#: src/SUMMARY.md:278 src/SUMMARY.md:299
+#: src/exercises/concurrency/dining-philosophers.md:1
+#: src/exercises/concurrency/solutions-morning.md:3
+msgid "Dining Philosophers"
+msgstr "์์ฌํ๋ ์ฒ ํ์๋ค"
+
+#: src/SUMMARY.md:279 src/exercises/concurrency/link-checker.md:1
+msgid "Multi-threaded Link Checker"
+msgstr "๋ฉํฐ์ค๋ ๋ ๋งํฌ ๊ฒ์ฌ๊ธฐ"
+
+#: src/SUMMARY.md:281
+msgid "Concurrency: Afternoon"
+msgstr "๋์์ฑ ์คํ"
+
+#: src/SUMMARY.md:283
+msgid "Async Basics"
+msgstr "๋น๋๊ธฐ ๊ด๋ จ ๊ธฐ๋ณธ์ฌํญ"
+
+#: src/SUMMARY.md:284
+msgid "async/await"
+msgstr "async/await"
+
+#: src/SUMMARY.md:285 src/async/futures.md:1
+msgid "Futures"
+msgstr "Future"
+
+#: src/SUMMARY.md:286 src/async/runtimes.md:1
+msgid "Runtimes"
+msgstr "๋น๋๊ธฐ ๋ฐํ์๋ค"
+
+#: src/SUMMARY.md:287 src/async/runtimes/tokio.md:1
+msgid "Tokio"
+msgstr "Tokio"
+
+#: src/SUMMARY.md:288 src/exercises/concurrency/link-checker.md:126
+#: src/exercises/concurrency/chat-app.md:140 src/async/tasks.md:1
+msgid "Tasks"
+msgstr "ํ์คํฌ"
+
+#: src/SUMMARY.md:289 src/async/channels.md:1
+msgid "Async Channels"
+msgstr "๋น๋๊ธฐ ์ฑ๋"
+
+#: src/SUMMARY.md:291 src/async/control-flow/join.md:1
+msgid "Join"
+msgstr "Join"
+
+#: src/SUMMARY.md:292 src/async/control-flow/select.md:1
+msgid "Select"
+msgstr "Select"
+
+#: src/SUMMARY.md:293
+msgid "Pitfalls"
+msgstr "ํจ์ "
+
+#: src/SUMMARY.md:294
+msgid "Blocking the Executor"
+msgstr "Executor ๋ธ๋กํน ํ๊ธฐ"
+
+#: src/SUMMARY.md:295 src/async/pitfalls/pin.md:1
+msgid "Pin"
+msgstr "Pin"
+
+#: src/SUMMARY.md:296 src/async/pitfalls/async-traits.md:1
+msgid "Async Traits"
+msgstr "๋น๋๊ธฐ ํธ๋ ์"
+
+#: src/SUMMARY.md:297 src/async/pitfalls/cancellation.md:1
+msgid "Cancellation"
+msgstr "์ทจ์"
+
+#: src/SUMMARY.md:300 src/exercises/concurrency/chat-app.md:1
+#: src/exercises/concurrency/solutions-afternoon.md:119
+msgid "Broadcast Chat Application"
+msgstr "์ฑํ
์ ํ๋ฆฌ์ผ์ด์
"
+
+#: src/SUMMARY.md:303
msgid "Final Words"
msgstr "๋์ผ๋ก..."
-#: src/SUMMARY.md:230 src/thanks.md:1
+#: src/SUMMARY.md:307 src/thanks.md:1
msgid "Thanks!"
msgstr "๊ฐ์ฌ์ธ์ฌ"
-#: src/SUMMARY.md:231
+#: src/SUMMARY.md:308
msgid "Other Resources"
msgstr "๋ฌ์คํธ ์ฐธ๊ณ ์๋ฃ"
-#: src/SUMMARY.md:232 src/credits.md:1
+#: src/SUMMARY.md:309 src/credits.md:1
msgid "Credits"
msgstr "๋์์ฃผ์ ๋ถ๋ค"
-#: src/SUMMARY.md:236 src/exercises/solutions.md:1
+#: src/SUMMARY.md:312 src/exercises/solutions.md:1
msgid "Solutions"
msgstr "ํด๋ต"
-#: src/SUMMARY.md:241
+#: src/SUMMARY.md:317
msgid "Day 1 Morning"
msgstr "1์ผ์ฐจ ์ค์ "
-#: src/SUMMARY.md:242
+#: src/SUMMARY.md:318
msgid "Day 1 Afternoon"
msgstr "1์ผ์ฐจ ์คํ"
-#: src/SUMMARY.md:243
+#: src/SUMMARY.md:319
msgid "Day 2 Morning"
msgstr "2์ผ์ฐจ ์ค์ "
-#: src/SUMMARY.md:244
+#: src/SUMMARY.md:320
msgid "Day 2 Afternoon"
msgstr "2์ผ์ฐจ ์คํ"
-#: src/SUMMARY.md:245
+#: src/SUMMARY.md:321
msgid "Day 3 Morning"
msgstr "3์ผ์ฐจ ์ค์ "
-#: src/SUMMARY.md:246
+#: src/SUMMARY.md:322
msgid "Day 3 Afternoon"
msgstr "3์ผ์ฐจ ์คํ"
-#: src/SUMMARY.md:247
-msgid "Day 4 Morning"
-msgstr "4์ผ์ฐจ ์ค์ "
+#: src/SUMMARY.md:323
+msgid "Bare Metal Rust Morning"
+msgstr "Bare Metal ์ค์ "
-#: src/welcome.md:3
+#: src/SUMMARY.md:324 src/exercises/bare-metal/solutions-afternoon.md:1
+msgid "Bare Metal Rust Afternoon"
+msgstr "์ Bare Metal ์คํ"
+
+#: src/SUMMARY.md:325
+msgid "Concurrency Morning"
+msgstr "๋์์ฑ ์ค์ "
+
+#: src/SUMMARY.md:326
+msgid "Concurrency Afternoon"
+msgstr "๋์์ฑ ์คํ"
+
+#: src/index.md:3
msgid ""
"[](https://github.com/"
-"google/comprehensive-rust/actions/workflows/build.yml)"
+"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain)"
msgstr ""
+"[](https://github.com/"
+"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain)"
-#: src/welcome.md:3
+#: src/index.md:3
msgid "Build workflow"
msgstr "๋น๋ ์ํฌํ๋ก"
-#: src/welcome.md:3
+#: src/index.md:3
msgid ""
"[](https://github.com/"
-"google/comprehensive-rust/actions/workflows/build.yml) [ [!"
+"[GitHub contributors](https://img.shields.io/github/contributors/google/"
"comprehensive-rust?style=flat-square)](https://github.com/google/"
"comprehensive-rust/graphs/contributors)"
msgstr ""
"[](https://github.com/"
-"google/comprehensive-rust/actions/workflows/build.yml) [ [!"
+"[GitHub contributors](https://img.shields.io/github/contributors/google/"
"comprehensive-rust?style=flat-square)](https://github.com/google/"
"comprehensive-rust/graphs/contributors)"
-#: src/welcome.md:4
+#: src/index.md:4
msgid "GitHub contributors"
msgstr "GitHub ์ฐธ์ฌ์"
-#: src/welcome.md:4
+#: src/index.md:4
msgid ""
"[](https://github.com/google/"
@@ -839,11 +1073,11 @@ msgstr ""
"io/github/stars/google/comprehensive-rust?style=flat-square)](https://github."
"com/google/comprehensive-rust/stargazers)"
-#: src/welcome.md:5
+#: src/index.md:5
msgid "GitHub stars"
msgstr "GitHub stars"
-#: src/welcome.md:5
+#: src/index.md:5
msgid ""
"[](https://github.com/google/comprehensive-rust/"
@@ -853,18 +1087,16 @@ msgstr ""
"rust?style=flat-square)](https://github.com/google/comprehensive-rust/"
"stargazers)"
-#: src/welcome.md:7
+#: src/index.md:7
msgid ""
-"This is a four day Rust course developed by the Android team. The course "
-"covers the full spectrum of Rust, from basic syntax to advanced topics like "
-"generics and error handling. It also includes Android-specific content on "
-"the last day."
+"This is a free Rust course developed by the Android team at Google. The "
+"course covers the full spectrum of Rust, from basic syntax to advanced "
+"topics like generics and error handling."
msgstr ""
-"์ด 4์ผ์ง๋ฆฌ ๋ฌ์คํธ ๊ฐ์๋ ์๋๋ก์ด๋ ํ์ด ๋ง๋ค์์ต๋๋ค. ๊ธฐ๋ณธ ๋ฌธ๋ฒ๋ถํฐ ์ ๋ค๋ฆญ, "
-"์๋ฌ ํธ๋ค๋ง๊ณผ ๊ฐ์ ๊ณ ๊ธ์ฃผ์ ๊น์ง ๋ฌ์คํธ์ ๋ชจ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ๋ง์ง๋ง ๋ ์๋ "
-"์๋๋ก์ด๋์ ๋ํ ๊ฒ ๊น์ง ๋ค๋ฃน๋๋ค."
+"์ด ๊ฐ์๋ ๋ฌด๋ฃ์ด๋ฉฐ, Google์ Android ํ์ด ๋ง๋ค์์ต๋๋ค. ๊ธฐ๋ณธ ๋ฌธ๋ฒ๋ถํฐ ์ ๋ค"
+"๋ฆญ, ์๋ฌ ํธ๋ค๋ง๊ณผ ๊ฐ์ ๊ณ ๊ธ์ฃผ์ ๊น์ง ๋ฌ์คํธ์ ๋ชจ๋ ๊ฒ์ ํฌํจํฉ๋๋ค."
-#: src/welcome.md:11
+#: src/index.md:11
msgid ""
"The goal of the course is to teach you Rust. We assume you don't know "
"anything about Rust and hope to:"
@@ -872,50 +1104,60 @@ msgstr ""
"๊ฐ์๋ ๋น์ ์ด ๋ฌ์คํธ์ ๋ํด์ ์๋ฌด๊ฒ๋ ๋ชจ๋ฅธ๋ค๊ณ ๊ฐ์ ํ๊ณ ์๋์ ๋ชฉํ๋ฅผ ๊ฐ์ง"
"๊ณ ์์ต๋๋ค:"
-#: src/welcome.md:14
+#: src/index.md:14
msgid "Give you a comprehensive understanding of the Rust syntax and language."
msgstr "๋ฌ์คํธ ๊ตฌ๋ฌธ๊ณผ ์ธ์ด์ ๋ํ ํฌ๊ด์ ์ธ ์ดํด๋ฅผ ์ ๊ณตํฉ๋๋ค."
-#: src/welcome.md:15
+#: src/index.md:15
msgid "Enable you to modify existing programs and write new programs in Rust."
msgstr "๊ธฐ์กด ํ๋ก๊ทธ๋จ์ ์์ ํ๊ณ ๋ฌ์คํธ์์ ์ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ต๋๋ค."
-#: src/welcome.md:16
+#: src/index.md:16
msgid "Show you common Rust idioms."
msgstr "์ผ๋ฐ์ ์ธ ๋ฌ์คํธ ๊ด์ฉ๊ตฌ๋ฅผ ๋ณด์ฌ์ค๋๋ค."
-#: src/welcome.md:18
-msgid "On Day 4, we will cover Android-specific things such as:"
-msgstr "4์ผ์ฐจ ๊ฐ์์ ์ฐ๋ฆฌ๋ ์๋์ ๊ฐ์ ์๋๋ก์ด๋ ํนํ๋ ๋ด์ฉ๋ค๋ ์ค๋ช
ํฉ๋๋ค:"
+#: src/index.md:18
+msgid "We call the first three course days Rust Fundamentals."
+msgstr "๊ฐ์์ ์ฒซ 3์ผ ๋์์๋ Rust์ ๊ธฐ์ด๋ฅผ ๋ค์ง๋๋ค."
-#: src/welcome.md:20
-msgid "Building Android components in Rust."
-msgstr "๋ฌ์คํธ์์ Android ๊ตฌ์ฑ ์์๋ฅผ ๊ตฌ์ถ."
-
-#: src/welcome.md:21
-msgid "AIDL servers and clients."
-msgstr "AIDL ์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ."
-
-#: src/welcome.md:22
-msgid "Interoperability with C, C++, and Java."
-msgstr "C, C++ ๋ฐ Java์์ ์ํธ ์ด์ฉ์ฑ."
-
-#: src/welcome.md:24
+#: src/index.md:20
msgid ""
-"It is important to note that this course does not cover Android "
-"**application** development in Rust, and that the Android-specific parts "
-"are specifically about writing code for Android itself, the operating "
-"system. "
-msgstr ""
-"์ด ๊ฐ์์์๋ ๋ฌ์คํธ๋ก ์๋๋ก์ด๋ **์ ํ๋ฆฌ์ผ์ด์
**์ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋ค๋ฃจ์ง ์"
-"์ต๋๋ค. ์ด ๊ฐ์์์ ๋ค๋ฃจ๋ ์๋๋ก์ด๋ ํนํ๋ ๋ด์ฉ์ ์๋๋ก์ด๋ OS์ ์ผ๋ถ๋ฅผ ๋ฌ"
-"์คํธ๋ก ๊ฐ๋ฐํ๋ ๊ฒ์ ๋ํ ๊ฒ์
๋๋ค. "
+"Building on this, you're invited to dive into one or more specialized topics:"
+msgstr "๊ทธ ํ์๋, ์๋์ ๊ฐ์ ๊ฐ๋ณ ์ฃผ์ ๋ฅผ ์ฌํํด์ ๊ณต๋ถํ ์ ์์ต๋๋ค:"
-#: src/welcome.md:28
+#: src/index.md:22
+msgid ""
+"[Android](android.md): a half-day course on using Rust for Android platform "
+"development (AOSP). This includes interoperability with C, C++, and Java."
+msgstr ""
+"[Android](android.md): Android ํ๋ซํผ ๊ฐ๋ฐ(AOSP) ์ Rust ์ฌ์ฉ์ ๊ดํ ๋ฐ๋์ "
+"๊ณผ์ ์
๋๋ค. ์ฌ๊ธฐ์๋ C, C++, Java์์ ์ํธ ์ด์ฉ์ฑ์ด ํฌํจ๋ฉ๋๋ค."
+
+#: src/index.md:24
+msgid ""
+"[Bare-metal](bare-metal.md): a whole-day class on using Rust for bare-metal "
+"(embedded) development. Both microcontrollers and application processors are "
+"covered."
+msgstr ""
+"[Bare-metal](bare-metal.md): bare-metal(์๋ฒ ๋๋) ๊ฐ๋ฐ ์ Rust ์ฌ์ฉ์ ๊ดํ ์ข
"
+"์ผ ๊ณผ์ ์
๋๋ค. ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ์ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ก์ธ์๋ฅผ ๋ชจ๋ ๋ค๋ฃน๋๋ค."
+
+#: src/index.md:27
+msgid ""
+"[Concurrency](concurrency.md): a whole-day class on concurrency in Rust. We "
+"cover both classical concurrency (preemptively scheduling using threads and "
+"mutexes) and async/await concurrency (cooperative multitasking using "
+"futures)."
+msgstr ""
+"[๋์์ฑ](concurrency.md): Rust์ ๋์์ฑ์ ๊ดํ ์ข
์ผ ๊ณผ์ ์
๋๋ค. ์ฌ๊ธฐ์๋ ๊ณ ์ "
+"์ ์ธ ๋์์ฑ(์ค๋ ๋์ ๋ฎคํ
์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ํ ์ค์ผ์ค๋ง์ ํ๋ ๊ฒ)๊ณผ async/"
+"await ๋์์ฑ(future๋ฅผ ์ฌ์ฉํ๋ ํ๋ ฅ์ ์ธ ๋ฉํฐํ์คํน)์ ๋ชจ๋ ๋ค๋ฃน๋๋ค."
+
+#: src/index.md:33
msgid "Non-Goals"
msgstr "์ ์ธ์ฌํญ"
-#: src/welcome.md:30
+#: src/index.md:35
msgid ""
"Rust is a large language and we won't be able to cover all of it in a few "
"days. Some non-goals of this course are:"
@@ -923,50 +1165,39 @@ msgstr ""
"๋ฌ์คํธ๋ ๋ฉฐ์น ๋ง์ ๋ชจ๋ ๊ฒ์ ๋ค๋ฃจ๊ธฐ์๋ ๋๋ฌด ํฐ ์ธ์ด์
๋๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์"
"๊ฒ์ ๋ชฉํ๋ก ํ์ง ์์ต๋๋ค:"
-#: src/welcome.md:33
+#: src/index.md:38
msgid ""
-"Learn how to use async Rust --- we'll only mention async Rust when covering "
-"traditional concurrency primitives. Please see [Asynchronous Programming in "
-"Rust](https://rust-lang.github.io/async-book/) instead for details on this "
-"topic."
-msgstr ""
-"๋น๋๊ธฐ์ ๋ฌ์คํธ ์ฌ์ฉ๋ฒ. ๊ฐ๋จํ๊ฒ ์ธ๊ธ์ ๋๋ ํ๊ฒ ์ง๋ง ์ข ๋ ์์ธํ ๋ด์ฉ์ "
-"[Asynchronous Programming in Rust](https://rust-lang.github.io/async-book/)"
-"๋ฅผ ์ฐธ์กฐํด์ฃผ์ธ์."
-
-#: src/welcome.md:37
-msgid ""
-"Learn how to develop macros, please see [Chapter 19.5 in the Rust Book]"
+"Learning how to develop macros: please see [Chapter 19.5 in the Rust Book]"
"(https://doc.rust-lang.org/book/ch19-06-macros.html) and [Rust by Example]"
"(https://doc.rust-lang.org/rust-by-example/macros.html) instead."
msgstr ""
-"๋งคํฌ๋ก๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ. [Chapter 19.5 in the Rust Book](https://doc.rust-"
-"lang.org/book/ch19-06-macros.html)์ [Rust by Example](https://doc.rust-lang."
-"org/rust-by-example/macros.html)๋ฅผ ์ฐธ์กฐํ์ธ์."
+"๋งคํฌ๋ก ๋ง๋ค๊ธฐ: ๋งคํฌ๋ก์ ๊ด๋ จํ ์์ธํ ๋ด์ฉ์ [๋ฌ์คํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, 19.1์ ]"
+"(https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html)๊ณผ [Rustonomicon]"
+"(https://doc.rust-lang.org/nomicon/)๋ฅผ ์ฐธ์กฐํ์ธ์."
-#: src/welcome.md:41
+#: src/index.md:42
msgid "Assumptions"
msgstr "๋
์ ์์ค์ ๋ํ ๊ฐ์ "
-#: src/welcome.md:43
+#: src/index.md:44
msgid ""
"The course assumes that you already know how to program. Rust is a "
-"statically typed language and we will sometimes make comparisons with C and "
+"statically-typed language and we will sometimes make comparisons with C and "
"C++ to better explain or contrast the Rust approach."
msgstr ""
"๋ณธ ๊ฐ์๋ ์ฌ๋ฌ๋ถ์ด ํ๋ก๊ทธ๋๋ฐ ์์ฒด์ ๋ํด์๋ ์๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ฌ์คํธ"
"๋ ์ ์ ํ์
์ธ์ด์ด๋ฉฐ, ๊ฐ์ข์์๋ C/C++ ์์ ๋น๊ต, ๋์กฐ๋ฅผ ํตํด ๋ฌ์คํธ๋ฅผ ์ค๋ช
"
"ํ ๊ฒ์
๋๋ค."
-#: src/welcome.md:47
+#: src/index.md:48
msgid ""
-"If you know how to program in a dynamically typed language such as Python or "
+"If you know how to program in a dynamically-typed language such as Python or "
"JavaScript, then you will be able to follow along just fine too."
msgstr ""
"C/C++์ ๋ชจ๋ฅด๋๋ผ๋ ๋์ ํ์
์ธ์ด(Python์ด๋ JavaScript ๋ฑ) ํ๋ก๊ทธ๋๋ฐ ๊ฒฝํ"
"์ด ์๋ค๋ฉด ๋ฐ๋ผ์ค๋๋ฐ ํฐ ๋ฌธ์ ๋ ์์ ๊ฒ์
๋๋ค."
-#: src/welcome.md:52
+#: src/index.md:53
msgid ""
"This is an example of a _speaker note_. We will use these to add additional "
"information to the slides. This could be key points which the instructor "
@@ -977,7 +1208,6 @@ msgstr ""
"ํค ํฌ์ธํธ์ผ ์ ์์ต๋๋ค."
#: src/running-the-course.md:3 src/running-the-course/course-structure.md:3
-#: src/running-the-course/day-4.md:3
msgid "This page is for the course instructor."
msgstr "๊ฐ์ฌ๋ฅผ ์ํ ์๋ด ํ์ด์ง์
๋๋ค."
@@ -1008,26 +1238,20 @@ msgstr ""
#: src/running-the-course.md:16
msgid ""
-"Select your topic for the afternoon of the fourth day. This may be based on "
-"the audience you expect, or on your own expertise."
+"Decide on the dates. Since the course takes at least three full days, we "
+"recommend that you schedule the days over two weeks. Course participants "
+"have said that they find it helpful to have a gap in the course since it "
+"helps them process all the information we give them."
msgstr ""
-"4์ผ์ฐจ ์คํ์ ์ฃผ์ ๋ฅผ ์ ํํฉ๋๋ค. ์๊ฐ์๋ค์ด ์ํ๋, ํน์ ์ฌ๋ฌ๋ถ์ด ์์ ์๋ ์ฃผ"
-"์ ๋ฅผ ๊ณ ๋ฅด์ธ์."
+"๊ฐ์ ๋ ์ง๋ฅผ ์ ํฉ๋๋ค. ์ต์ 3์ผ์ ๊ฑธ์ณ์ ์งํ์ด ๋๊ธฐ ๋๋ฌธ์, ๋ ์ฃผ์ ๊ฑธ์ณ์ ์ค"
+"์ผ์ค์ ์ก๋ ๊ฒ์ ๊ถํฉ๋๋ค. ๊ธฐ์กด ๊ฐ์ ์๊ฐ์๋ค์ ํผ๋๋ฐฑ์ ๋ฐ๋ฅด๋ฉด, ์ฐ๋ฌ์์ ๊ฐ"
+"์๋ฅผ ์งํํ๋ ๊ฒ ๋ณด๋ค, ๊ฐ์๋ฅผ ๋์๋์ ํ๋ ๊ฒ์ด ๊ฐ์ ๋ด์ฉ์ ์ํํ๋๋ฐ ๋ ๋"
+"์์ด ๋์๋ค๊ณ ํฉ๋๋ค."
-#: src/running-the-course.md:19
-msgid ""
-"Decide on the dates. Since the course is large, we recommend that you "
-"schedule the four days over two weeks. Course participants have said that "
-"they find it helpful to have a gap in the course since it helps them process "
-"all the information we give them."
-msgstr ""
-"๊ฐ์ ๋ ์ง๋ฅผ ์ ํฉ๋๋ค. ๊ฐ์ ๋ด์ฉ์ด ๋ง๊ณ ์๊ฐ์๋ค์ด ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ณต๋ถํ ์ ์๋"
-"๋ก ์ค๊ฐ์ ํ์ ๋์ด 2์ฃผ์ ๊ฑธ์ณ 4์ผ์ ์ก๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค."
-
-#: src/running-the-course.md:24
+#: src/running-the-course.md:21
msgid ""
"Find a room large enough for your in-person participants. We recommend a "
-"class size of 15-20 people. That's small enough that people are comfortable "
+"class size of 15-25 people. That's small enough that people are comfortable "
"asking questions --- it's also small enough that one instructor will have "
"time to answer the questions. Make sure the room has _desks_ for yourself "
"and for the students: you will all need to be able to sit and work with your "
@@ -1035,11 +1259,11 @@ msgid ""
"instructor, so a lectern won't be very helpful for you."
msgstr ""
"์ถฉ๋ถํ ๊ณต๊ฐ์ ํ๋ณดํฉ๋๋ค. 15์์ 20๋ช
๊ท๋ชจ์ ๊ณต๊ฐ์ ์ถ์ฒํฉ๋๋ค. ์๊ฐ์๊ณผ ๊ฐ์ฌ"
-"๊ฐ ์ง์๋ฅผ ํ๊ธฐ์ ์ถฉ๋ถํ ์๊ฐ๊ณผ ๊ณต๊ฐ์ด์ด์ผ ํฉ๋๋ค. ๊ฐ์ฌ๋ ์๊ฐ์ ๋ชจ๋ ์ฑ
์์ "
-"์ฌ์ฉํ ์ ์๋ ๊ฐ์์ค์ด๋ฉด ์ข์ต๋๋ค. ๊ฐ์ ์ค์ ๊ฐ์ฌ๊ฐ ๋ผ์ด๋ธ ์ฝ๋ฉ์ ํ๊ฒ ๋ ๊ฒฝ"
-"์ฐ๊ฐ ๋ง์ผ๋ฉฐ, ์ด๋ ์๋ฆฌ์ ์์ ๋
ธํธ๋ถ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค."
+"๊ฐ ์ง์๋ฅผ ํ๊ธฐ์ ์ถฉ๋ถํ ์๊ฐ๊ณผ ๊ณต๊ฐ์ด์ด์ผ ํฉ๋๋ค. ๊ฐ์ฌ๋ ์๊ฐ์ ๋ชจ๋ \\_์ฑ
์_"
+"์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์์ค์ด๋ฉด ์ข์ต๋๋ค. ๊ฐ์ ์ค์ ๊ฐ์ฌ๊ฐ ๋ผ์ด๋ธ ์ฝ๋ฉ์ ํ๊ฒ "
+"๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ, ์ด๋ ์๋ฆฌ์ ์์ ๋
ธํธ๋ถ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค."
-#: src/running-the-course.md:32
+#: src/running-the-course.md:29
msgid ""
"On the day of your course, show up to the room a little early to set things "
"up. We recommend presenting directly using `mdbook serve` running on your "
@@ -1048,31 +1272,30 @@ msgid ""
"as you change pages. Using your laptop will also allow you to fix typos as "
"you or the course participants spot them."
msgstr ""
-"๊ฐ์ ๋น์ผ ์กฐ๊ธ ์ผ์ฐ ์์ ์ค๋นํฉ๋๋ค. ๊ฐ์ฌ ๋
ธํธ๋ถ์์ `mdbook serve -d book/"
-"ko`๋ฅผ ์ด์ฉํด ์ง์ ํ๋ ์ ํ
์ด์
ํ๋ฉด ํ์ด์ง ์ด๋ ์์ ์ง์ฐ์ด ์์ต๋๋ค.([์ค์น "
-"๋ฐฉ๋ฒ](https://github.com/google/comprehensive-rust#building)์ ์ฐธ์กฐํ์ธ์.) "
-"๋ํ, ๊ทธ๋ ๊ฒ ํ๋ฉด ๊ฐ์ ๋์ค ์คํ๋ฅผ ๋ฐ๊ฒฌํ์ ๋ ๊ทธ ์๋ฆฌ์์ ๋ฐ๋ก ์์ ๊ฐ๋ฅํ๋ค"
-"๋ ์ฅ์ ๋ ์์ต๋๋ค."
+"๊ฐ์ ๋น์ผ ์กฐ๊ธ ์ผ์ฐ ์์ ์ค๋นํฉ๋๋ค. ๊ฐ์ฌ ๋
ธํธ๋ถ์์ `mdbook serve`๋ฅผ ์ด์ฉํด "
+"์ง์ ํ๋ ์ ํ
์ด์
ํ๋ฉด ํ์ด์ง ์ด๋ ์์ ์ง์ฐ์ด ์์ต๋๋ค.([์ค์น ๋ฐฉ๋ฒ](https://"
+"github.com/google/comprehensive-rust#building)์ ์ฐธ์กฐํ์ธ์.) ๋ํ, ๊ทธ๋ ๊ฒ ํ"
+"๋ฉด ๊ฐ์ ๋์ค ์คํ๋ฅผ ๋ฐ๊ฒฌํ์ ๋ ๊ทธ ์๋ฆฌ์์ ๋ฐ๋ก ์์ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ๋ ์์ต"
+"๋๋ค."
-#: src/running-the-course.md:38
+#: src/running-the-course.md:35
msgid ""
-"Let people solve the exercises by themselves or in small groups. Make sure "
-"to ask people if they're stuck or if there is anything you can help with. "
-"When you see that several people have the same problem, call it out to the "
-"class and offer a solution, e.g., by showing people where to find the "
-"relevant information in the standard library."
+"Let people solve the exercises by themselves or in small groups. We "
+"typically spend 30-45 minutes on exercises in the morning and in the "
+"afternoon (including time to review the solutions). Make sure to ask people "
+"if they're stuck or if there is anything you can help with. When you see "
+"that several people have the same problem, call it out to the class and "
+"offer a solution, e.g., by showing people where to find the relevant "
+"information in the standard library."
msgstr ""
-"์๊ฐ์๋ค์ด ์ง์ (๊ฐ๋ณ ํน์ ๊ทธ๋ฃน์ผ๋ก) ์ฐ์ต๋ฌธ์ ๋ฅผ ํ๋๋ก ํฉ๋๋ค. ์งํ์ด ๋งํ ๋"
-"์์ ํ์๋ก ํ๋ ์๊ฐ์์ด ์๋์ง ์์๋ก ํ์ธํฉ๋๋ค. ๋ง์ฝ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ์ฌ"
-"๋์ด ๊ฒช๊ณ ์๋ค๋ฉด, ๊ทธ ๋ฌธ์ ๋ฅผ ๊ฐ์์ค ์ ์ฒด ์ธ์์๊ฒ ์๋ฆฌ๊ณ ํด๊ฒฐ์ฑ
์ ์ ์ํฉ๋๋ค. "
-"์๋ฅผ ๋ค์ด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋์ ๊ฐ๋ฉด ๊ทธ ๋ฌธ์ ์ ๋ํ ํด๋ต์ ์ฐพ์ ์ ์๋์ง ์"
-"๋ ค ์ค๋๋ค."
+"์๊ฐ์๋ค์ด ์ง์ (๊ฐ๋ณ ํน์ ๊ทธ๋ฃน์ผ๋ก) ์ฐ์ต๋ฌธ์ ๋ฅผ ํ๋๋ก ํฉ๋๋ค. ๋์ฒด๋ก ์ค์ , "
+"์คํ์ ๊ฐ๊ฐ 30-45๋ถ ์ ๋๋ฅผ ์ฐ์ต๋ฌธ์ ์ ํ ๋นํฉ๋๋ค (์ด๋ ํด๋ต์ ๋ณด๊ณ ์ค๋ช
ํ๋ "
+"์๊ฐ๊น์ง ํฌํจํฉ๋๋ค). ๋งํ ๋์์ ํ์๋ก ํ๋ ์๊ฐ์์ด ์๋์ง ์์๋ก ํ์ธํฉ๋"
+"๋ค. ๋ง์ฝ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ์ฌ๋์ด ๊ฒช๊ณ ์๋ค๋ฉด, ๊ทธ ๋ฌธ์ ๋ฅผ ๊ฐ์์ค ์ ์ฒด ์ธ์์๊ฒ "
+"์๋ฆฌ๊ณ ํด๊ฒฐ์ฑ
์ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋์ ๊ฐ๋ฉด ๊ทธ ๋ฌธ์ ์ "
+"๋ํ ํด๋ต์ ์ฐพ์ ์ ์๋์ง ์๋ ค ์ค๋๋ค."
-#: src/running-the-course.md:44
-msgid "Prepare anything you need to have available for the afternoon of day 4."
-msgstr "4์ผ์ฐจ ์คํ์ ํ์ํ ๊ฒ๋ค์ ์ค๋นํ์ธ์."
-
-#: src/running-the-course.md:46
+#: src/running-the-course.md:43
msgid ""
"That is all, good luck running the course! We hope it will be as much fun "
"for you as it has been for us!"
@@ -1080,7 +1303,7 @@ msgstr ""
"์ด์ ์ค๋น๋ ๋๋ฌ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฌ๋ฏ์ด ์ฌ๋ฌ๋ถ๋ค๋ ์ด ๊ฐ์๋ฅผ ์ฆ๊ธฐ์๊ธธ ๋ฐ๋๋"
"๋ค!"
-#: src/running-the-course.md:49
+#: src/running-the-course.md:46
msgid ""
"Please [provide feedback](https://github.com/google/comprehensive-rust/"
"discussions/86) afterwards so that we can keep improving the course. We "
@@ -1099,72 +1322,52 @@ msgstr "๊ฐ์๋ ๋น ๋ฅธ ์๋๋ก ์งํ๋๋ฉฐ, ์๋ ๋ด์ฉ๋ค์ ๋ค๋ฃน๋
#: src/running-the-course/course-structure.md:7
msgid "Day 1: Basic Rust, ownership and the borrow checker."
-msgstr "1์ผ์ฐจ: ๋ฌ์คํธ ๊ธฐ๋ณธ, ์์ ๊ถ(ownership)๊ณผ ๋น๋ฆผ(borrow) ์ฒดํฌ"
+msgstr "1์ผ์ฐจ: ๋ฌ์คํธ ๊ธฐ๋ณธ, ์์ ๊ถ(ownership)๊ณผ ๋น๋ฆผ(borrow) ์ฒดํฌ."
#: src/running-the-course/course-structure.md:8
msgid "Day 2: Compound data types, pattern matching, the standard library."
-msgstr "2์ผ์ฐจ: ๋ณตํฉ ๋ฐ์ดํฐ ์ ํ, ํจํด ๋งค์นญ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ"
+msgstr "2์ผ์ฐจ: ๋ณตํฉ ๋ฐ์ดํฐ ์ ํ, ํจํด ๋งค์นญ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ."
#: src/running-the-course/course-structure.md:9
msgid "Day 3: Traits and generics, error handling, testing, unsafe Rust."
msgstr ""
"3์ผ์ฐจ: ํธ๋ ์(trait)์ ์ ๋ค๋ฆญ(generic), ์ค๋ฅ ์ฒ๋ฆฌ, ํ
์คํธ, ์์ ํ์ง ์์ ๋ฌ์ค"
-"ํธ"
+"ํธ."
-#: src/running-the-course/course-structure.md:10
-msgid "Day 4: Concurrency in Rust and seeing Rust in action."
-msgstr "4์ผ์ฐจ: ๋ฌ์คํธ์ ๋์์ฑ ๋ฐ ๋ฌ์คํธ๊ฐ ์ค์ ํ์ฉ๋๋ ์ฌ๋ก ์ดํด๋ณด๊ธฐ"
+#: src/running-the-course/course-structure.md:11
+msgid "Deep Dives"
+msgstr "์ฌํ ํ์ต"
-#: src/running-the-course/course-structure.md:12
-msgid "Format"
-msgstr "๊ฐ์ ํ์"
-
-#: src/running-the-course/course-structure.md:14
+#: src/running-the-course/course-structure.md:13
msgid ""
-"The course is meant to be very interactive and we recommend letting the "
-"questions drive the exploration of Rust!"
-msgstr ""
-"์ด ๊ฐ์๋ ๊ฐ์ฌ์ ์๊ฐ์์ด ์๋ฐฉํฅ์ผ๋ก ์ํตํ๋ฉด์ ์งํํ๋๋ก ๋์์ธ ๋์์ต๋"
-"๋ค. ๋ค์ํ ์ง๋ฌธ์ ํตํด ๋ฌ์คํธ์ ์ฌ๋ฌ ๋ถ๋ถ์ ํํํ ์ ์๋๋ก ํ์ธ์!"
+"In addition to the 3-day class on Rust Fundamentals, we cover some more "
+"specialized topics:"
+msgstr "Rust ๊ธฐ์ด์ ๊ดํ 3์ผ ๊ณผ์ ์ดํ์๋, ๋ค์๊ณผ ๊ฐ์ ์ ๋ฌธ ์ฃผ์ ๋ฅผ ๋ค๋ฃน๋๋ค:"
-#: src/running-the-course/day-4.md:5
+#: src/running-the-course/course-structure.md:18
msgid ""
-"The afternoon of the fourth day should cover a topic of your choice. Include "
-"the topic in the announcement of the course, so that participants know what "
-"to expect."
+"The [Android Deep Dive](../android.md) is a half-day course on using Rust "
+"for Android platform development. This includes interoperability with C, C+"
+"+, and Java."
msgstr ""
-"4์ผ์ฐจ ์คํ์๋ ์ฌ๋ฌ๋ถ์ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฃผ์ ๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ๊ฐ์๋ฅผ ์๋ด"
-"ํ ๋ 4์ผ์ฐจ ์คํ์ ์ฃผ์ ๋ฅผ ํฌํจํ์ฌ ์๊ฐ์๋ค์ด ๋ฏธ๋ฆฌ ์ ์ ์๊ฒ ํ์ธ์."
+"[Android ์ฌํ ํ์ต](../android.md)๋ Android ํ๋ซํผ ๊ฐ๋ฐ ์ Rust ์ฌ์ฉ์ ๊ดํ "
+"๋ฐ๋์ ๊ณผ์ ์
๋๋ค. ์ฌ๊ธฐ์๋ C, C++, Java์์ ์ํธ ์ด์ฉ์ฑ์ด ํฌํจ๋ฉ๋๋ค."
-#: src/running-the-course/day-4.md:9
+#: src/running-the-course/course-structure.md:22
msgid ""
-"This phase of the course is a chance for participants to see Rust in action "
-"on a codebase they might be familiar with. You can choose from the topics "
-"already defined here, or plan your own."
+"You will need an [AOSP checkout](https://source.android.com/docs/setup/"
+"download/downloading). Make a checkout of the [course repository](https://"
+"github.com/google/comprehensive-rust) on the same machine and move the `src/"
+"android/` directory into the root of your AOSP checkout. This will ensure "
+"that the Android build system sees the `Android.bp` files in `src/android/`."
msgstr ""
-"4์ผ์ฐจ ์ฏค์ด๋ฉด, ์ค์ ์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ํตํด ๋ฌ์คํธ๊ฐ ํ์ฉ๋๋ ๋ชจ์ต์ ์ดํด๋ณด๋ฉด ์ข์ต"
-"๋๋ค. ์ด๋ฏธ ์ค๋น๋ ์ฃผ์ ์ค์์ ๊ณ ๋ฅผ ์๋ ์๊ณ , ์ฌ๋ฌ๋ถ์ด ์ง์ ์ค๋นํ ์ฃผ์ ๋ฅผ ๋ค"
-"๋ฃฐ ์๋ ์์ต๋๋ค."
+"[AOSP ์ฝ๋](https://source.android.com/docs/setup/download/downloading)๋ฅผ ์ฌ"
+"๋ฌ๋ถ์ ์ปดํจํฐ์ ์ฒดํฌ์์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์, ๊ทธ ์ปดํจํฐ์์ [๊ณผ์ ์ ์ฅ์]"
+"(https://github.com/google/comprehensive-rust)๋ฅผ ์ฒดํฌ์์ํ๊ณ `src/android/` "
+"๋๋ ํฐ๋ฆฌ๋ฅผ AOSP ์ฝ๋์ ๋ฃจํธ๋ก ์ด๋ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋๋ก์ด๋ ๋น๋ ์์คํ
"
+"์์ ๊ณผ์ ์ฉ์ผ๋ก ์ถ๊ฐ๋ `Android.bp`ํ์ผ์ ์ธ์ํ ์ ์์ต๋๋ค."
-#: src/running-the-course/day-4.md:13
-msgid "Some topics need additional preparation:"
-msgstr "์ค๋น๋ ์ฃผ์ (์ด๋ค ์ฃผ์ ๋ ์ถ๊ฐ์ ์ธ ์ค๋น๊ฐ ํ์ํฉ๋๋ค):"
-
-#: src/running-the-course/day-4.md:17
-msgid ""
-"If you chose Android for Day 4 afternoon, you will need an \\[AOSP "
-"checkout\\]\\[1\\]. Make a checkout of the \\[course repository\\]\\[2\\] on "
-"the same machine and move the `src/android/` directory into the root of your "
-"AOSP checkout. This will ensure that the Android build system sees the "
-"`Android.bp` files in `src/android/`."
-msgstr ""
-"4์ผ์ฐจ ์คํ์ ์๋๋ก์ด๋๋ฅผ ๋ค๋ฃจ๊ธฐ๋ก ํ๋ค๋ฉด, \\[AOSP ์ฝ๋\\]\\[1\\]๋ฅผ ์ฒดํฌ์์"
-"ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์, ๊ฐ์ ์ปดํจํฐ์์ \\[๊ณผ์ ์ ์ฅ์\\]\\[2\\]๋ฅผ ์ฒดํฌ์์ํ"
-"๊ณ `src/android/` ๋๋ ํฐ๋ฆฌ๋ฅผ AOSP ์ฝ๋์ ๋ฃจํธ๋ก ์ด๋ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋"
-"๋ก์ด๋ ๋น๋ ์์คํ
์์ ๊ณผ์ ์ฉ์ผ๋ก ์ถ๊ฐ๋ `Android.bp`ํ์ผ์ ์ธ์ํ ์ ์์ต๋"
-"๋ค."
-
-#: src/running-the-course/day-4.md:22
+#: src/running-the-course/course-structure.md:27
msgid ""
"Ensure that `adb sync` works with your emulator or real device and pre-build "
"all Android examples using `src/android/build_all.sh`. Read the script to "
@@ -1175,23 +1378,83 @@ msgstr ""
"๋ณด์ธ์. ๊ทธ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ๊ณ , ๊ทธ ์์์ ์ํ๋๋ ๋ช
๋ น์ด๋ค์ ํ์ธํ ํ ๊ฐ ๋ช
"
"๋ น์ด๋ค์ ์๋์ผ๋ก ์คํํด๋ ์ ๋๋์ง ํ์ธํ์ธ์."
-#: src/running-the-course/day-4.md:26
-msgid "Async"
-msgstr "๋น๋๊ธฐ"
+#: src/running-the-course/course-structure.md:34
+msgid "Bare-Metal"
+msgstr "Bare-Metal"
-#: src/running-the-course/day-4.md:28
+#: src/running-the-course/course-structure.md:36
msgid ""
-"If you chose Async for Day 4 afternoon, you will need a fresh crate set up "
-"and the dependencies downloaded and ready to go. You can then copy/paste the "
-"examples into `src/main.rs` to experiment with them."
+"The [Bare-Metal Deep Dive](../bare-metal.md): a full day class on using Rust "
+"for bare-metal (embedded) development. Both microcontrollers and application "
+"processors are covered."
msgstr ""
-"4์ผ ์ฐจ ์คํ์ ๋น๋๊ธฐ๋ฅผ ๋ค๋ฃจ๊ธฐ๋ก ํ๋ค๋ฉด, ์ ํฌ๋ ์ดํธ๋ฅผ ์ค์ ํ๊ณ ๋ช ๊ฐ์ง ์์กด์ฑ"
-"์ ๋ค์ด๋ก๋ํด ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ๋ฅผ `src/main.rs`์ ๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ "
-"ํ์ฌ ์คํํ ์ ์์ต๋๋ค."
+"[Bare-Metal ์ฌํ ํ์ต](../bare-metal.md): bare-metal(์๋ฒ ๋๋) ๊ฐ๋ฐ ์ Rust "
+"์ฌ์ฉ์ ๊ดํ ์ข
์ผ ๊ณผ์ ์
๋๋ค. ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ์ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ก์ธ์๋ฅผ ๋ชจ๋ "
+"๋ค๋ฃน๋๋ค."
+
+#: src/running-the-course/course-structure.md:40
+msgid ""
+"For the microcontroller part, you will need to buy the [BBC micro:bit]"
+"(https://microbit.org/) v2 development board ahead of time. Everybody will "
+"need to install a number of packages as described on the [welcome page](../"
+"bare-metal.md)."
+msgstr ""
+"๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ ํํธ๋ฅผ ์งํํ๊ธฐ ์ํด์๋ [BBC micro:bit](https://microbit."
+"org/) v2 ๊ฐ๋ฐ ๋ณด๋๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌ๋งคํด์ผ ํฉ๋๋ค. ๋ชจ๋ ์ฌ์ฉ์๋ [์์ ํ์ด์ง](../"
+"bare-metal.md)์ ์ค๋ช
๋ ๋๋ก ๊ฐ์ข
ํจํค์ง๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค."
+
+#: src/running-the-course/course-structure.md:45
+msgid "Concurrency"
+msgstr "๋์์ฑ"
+
+#: src/running-the-course/course-structure.md:47
+msgid ""
+"The [Concurrency Deep Dive](../concurrency.md) is a full day class on "
+"classical as well as `async`/`await` concurrency."
+msgstr ""
+"[๋์์ฑ ์ฌํํ์ต](../concurrency.md)์ ๊ณ ์ ์ ์ธ ๋์์ฑ ๋ฐ `async`/`await` ๋"
+"์์ฑ์ ๋ค๋ฃจ๋ ์ข
์ผ ๊ณผ์ ์
๋๋ค."
+
+#: src/running-the-course/course-structure.md:50
+msgid ""
+"You will need a fresh crate set up and the dependencies downloaded and ready "
+"to go. You can then copy/paste the examples into `src/main.rs` to experiment "
+"with them:"
+msgstr ""
+"์ ํฌ๋ ์ดํธ๋ฅผ ์ค์ ํ๊ณ ๋ช ๊ฐ์ง ์์กด์ฑ์ ๋ค์ด๋ก๋ํด ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ "
+"์์ ๋ฅผ `src/main.rs`์ ๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ ํ์ฌ ํ
์คํธ ํด ๋ณผ ์ ์์ต๋๋ค:"
+
+#: src/running-the-course/course-structure.md:54
+msgid ""
+"```shell\n"
+"cargo init concurrency\n"
+"cd concurrency\n"
+"cargo add tokio --features full\n"
+"cargo run\n"
+"```"
+msgstr ""
+"```shell\n"
+"cargo init concurrency\n"
+"cd concurrency\n"
+"cargo add tokio --features full\n"
+"cargo run\n"
+"```"
+
+#: src/running-the-course/course-structure.md:61
+msgid "Format"
+msgstr "๊ฐ์ ํ์"
+
+#: src/running-the-course/course-structure.md:63
+msgid ""
+"The course is meant to be very interactive and we recommend letting the "
+"questions drive the exploration of Rust!"
+msgstr ""
+"์ด ๊ฐ์๋ ๊ฐ์ฌ์ ์๊ฐ์์ด ์๋ฐฉํฅ์ผ๋ก ์ํตํ๋ฉด์ ์งํํ๋๋ก ๋์์ธ ๋์์ต๋"
+"๋ค. ๋ค์ํ ์ง๋ฌธ์ ํตํด ๋ฌ์คํธ์ ์ฌ๋ฌ ๋ถ๋ถ์ ํํํ ์ ์๋๋ก ํ์ธ์!"
#: src/running-the-course/keyboard-shortcuts.md:3
msgid "There are several useful keyboard shortcuts in mdBook:"
-msgstr "mdBook ์์คํ
(ํ ์ฌ์ดํธ)์์ ์ ์ฉํ ๋จ์ถํค๋ค ์
๋๋ค:"
+msgstr "๋ค์์, mdBook ์์คํ
(ํ ์ฌ์ดํธ)์์ ์ ์ฉํ ๋จ์ถํค๋ค ์
๋๋ค:"
#: src/running-the-course/keyboard-shortcuts.md:5
msgid "Arrow-Left"
@@ -1231,30 +1494,29 @@ msgid ""
"The course has been translated into other languages by a set of wonderful "
"volunteers:"
msgstr ""
-"์ด ๊ณผ์ ์ ๋ค๋ฅธ ์ธ์ด๋ก๋ ์ ๊ณต๋ฉ๋๋ค. ๊ดํธ ์์ ๋ฒ์ญ์ ๋์ ์ฃผ์ ๋ถ๋ค์
๋๋ค."
+"์ด ๊ณผ์ ์ ๋ค๋ฅธ ์ธ์ด๋ก๋ ์ ๊ณต๋ฉ๋๋ค. ๊ดํธ ์์ ๋ฒ์ญ์ ๋์ ์ฃผ์ ๋ถ๋ค์
๋๋ค:"
#: src/running-the-course/translations.md:6
-#, fuzzy
msgid ""
"[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) "
-"by [@rastringer](https://github.com/rastringer) and [@hugojacob](https://"
-"github.com/hugojacob)."
-msgstr "[์์ด](https://google.github.io/comprehensive-rust/)"
+"by [@rastringer](https://github.com/rastringer), [@hugojacob](https://github."
+"com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes) and "
+"[@henrif75](https://github.com/henrif75)."
+msgstr ""
+"[๋ธ๋ผ์ง ํฌ๋ฅดํฌ๊ฐ์ด](https://google.github.io/comprehensive-rust/pt-BR/): "
+"[@rastringer](https://github.com/rastringer), [@hugojacob](https://github."
+"com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes) ๊ทธ๋ฆฌ๊ณ "
+"[@henrif75](https://github.com/henrif75)๊ฐ ์ ๊ณต."
#: src/running-the-course/translations.md:7
-#, fuzzy
msgid ""
"[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]"
"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) and "
"[@jooyunghan](https://github.com/jooyunghan)."
msgstr ""
-"[๋ธ๋ผ์ง ํฌ๋ฅดํฌ๊ฐ์ด](https://google.github.io/comprehensive-rust/pt-BR/) "
-"([@rastringer](https://github.com/rastringer), [@hugojacob](https://github."
-"com/hugojacob)).\n"
-"\n"
-"[ํ๊ตญ์ด](https://google.github.io/comprehensive-rust/ko/) ([@keispace]"
-"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), "
-"[@jooyunghan](https://github.com/jooyunghan))"
+"[ํ๊ตญ์ด](https://google.github.io/comprehensive-rust/ko/): [@keispace]"
+"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) ๊ทธ๋ฆฌ๊ณ "
+"[@jooyunghan](https://github.com/jooyunghan)๊ฐ ์ ๊ณต."
#: src/running-the-course/translations.md:9
msgid ""
@@ -1262,6 +1524,52 @@ msgid ""
msgstr "ํ์ด์ง ์ค๋ฅธ์ชฝ ์์ ๋ฉ๋ด๋ฅผ ํตํด ๋ค๋ฅธ ์ธ์ด๋ก ์ ํํ ์ ์์ต๋๋ค."
#: src/running-the-course/translations.md:11
+msgid "Incomplete Translations"
+msgstr "๋ฒ์ญ ๋ฌธ์ "
+
+#: src/running-the-course/translations.md:13
+msgid ""
+"There is a large number of in-progress translations. We link to the most "
+"recently updated translations:"
+msgstr ""
+"์งํ ์ค์ธ ๋ฒ์ญ์ด ๋ง์ต๋๋ค. ์ต๊ทผ์ ์
๋ฐ์ดํธ๋ ๋ฒ์ญ๋ณธ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๋งํฌ๋ ๋ค์"
+"๊ณผ ๊ฐ์ต๋๋ค:"
+
+#: src/running-the-course/translations.md:16
+msgid ""
+"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]"
+"(https://github.com/raselmandol)."
+msgstr ""
+"[๋ฒต๊ฐ์ด](https://google.github.io/comprehensive-rust/bn/): [@raselmandol]"
+"(https://github.com/raselmandol) ์ ๊ณต."
+
+#: src/running-the-course/translations.md:17
+msgid ""
+"[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS]"
+"(https://github.com/KookaS) and [@vcaen](https://github.com/vcaen)."
+msgstr ""
+"[ํ๋์ค์ด](https://google.github.io/comprehensive-rust/fr/): [@KookaS]"
+"(https://github.com/KookaS) ๋ฐ [@vcaen](https://github.com/vcaen) ์ ๊ณต."
+
+#: src/running-the-course/translations.md:18
+msgid ""
+"[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn]"
+"(https://github.com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)."
+msgstr ""
+"[๋
์ผ์ด](https://google.github.io/comprehensive-rust/de/): [@Throvn](https://"
+"github.com/Throvn) ๋ฐ [@ronaldfw](https://github.com/ronaldfw) ์ ๊ณต."
+
+#: src/running-the-course/translations.md:19
+msgid ""
+"[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN]"
+"(https://github.com/CoinEZ) and [@momotaro1105](https://github.com/"
+"momotaro1105)."
+msgstr ""
+"[์ผ๋ณธ์ด](https://google.github.io/comprehensive-rust/ja/): [@CoinEZ-JPN]"
+"(https://github.com/CoinEZ) ๋ฐ [@momotaro1105](https://github.com/"
+"momotaro1105) ์ ๊ณต."
+
+#: src/running-the-course/translations.md:21
msgid ""
"If you want to help with this effort, please see [our instructions](https://"
"github.com/google/comprehensive-rust/blob/main/TRANSLATIONS.md) for how to "
@@ -1273,108 +1581,6 @@ msgstr ""
"์ค์ธ ๋ฒ์ญ ์์
์ ๋ํ ๋ด์ฉ์ [์ด์ ํธ๋์ปค](https://github.com/google/"
"comprehensive-rust/issues/282)๋ฅผ ์ฐธ๊ณ ํ์ธ์."
-#: src/running-the-course/translations.md:13
-msgid ""
-"There is a large number of in-progress translations. We link to the most "
-"recently updated translations:"
-msgstr ""
-"์งํ ์ค์ธ ๋ฒ์ญ์ด ๋ง์ต๋๋ค. ์ต๊ทผ์ ์
๋ฐ์ดํธ๋ ๋ฒ์ญ๋ณธ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๋งํฌ๋ ๋ค์"
-"๊ณผ ๊ฐ์ต๋๋ค."
-
-#: src/running-the-course/translations.md:16
-msgid ""
-"[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS]"
-"(https://github.com/KookaS) and [@vcaen](https://github.com/vcaen)."
-msgstr ""
-"[French](https://google.github.io/comprehensive-rust/fr/): [@KookaS](https://"
-"github.com/KookaS) ๋ฐ [@vcaen](https://github.com/vcaen) ์ ๊ณต"
-
-#: src/running-the-course/translations.md:17
-msgid ""
-"[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn]"
-"(https://github.com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)."
-msgstr ""
-"[German](https://google.github.io/comprehensive-rust/de/): [@Throvn](https://"
-"github.com/Throvn) ๋ฐ [@ronaldfw](https://github.com/ronaldfw) ์ ๊ณต"
-
-#: src/running-the-course/translations.md:18
-msgid ""
-"[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN]"
-"(https://github.com/CoinEZ) and [@momotaro1105](https://github.com/"
-"momotaro1105)."
-msgstr ""
-"[Japanese](https://google.github.io/comprehensive-rust/ja/): [@CoinEZ-JPN]"
-"(https://github.com/CoinEZ) ๋ฐ [@momotaro1105](https://github.com/"
-"momotaro1105) ์ ๊ณต"
-
-#: src/running-the-course/course-structure.md:11
-msgid "Deep Dives"
-msgstr "์ฌํ ํ์ต"
-
-#: src/running-the-course/course-structure.md:13
-msgid ""
-"In addition to the 3-day class on Rust Fundamentals, we cover some more "
-"specialized topics:"
-msgstr "Rust ๊ธฐ์ด์ ๊ดํ 3์ผ ๊ณผ์ ์ธ์๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ฌธ ์ฃผ์ ๋ฅผ ๋ค๋ฃน๋๋ค."
-
-#: src/running-the-course/course-structure.md:18
-msgid ""
-"The [Android Deep Dive](../android.md) is a half-day course on using Rust "
-"for Android platform development. This includes interoperability with C, C+"
-"+, and Java."
-msgstr ""
-"[Android ์ฌํ ํ์ต](../android.md)๋ Android ํ๋ซํผ ๊ฐ๋ฐ ์ Rust ์ฌ์ฉ์ ๊ดํ "
-"๋ฐ๋์ ๊ณผ์ ์
๋๋ค. ์ฌ๊ธฐ์๋ C, C++, Java์์ ์ํธ ์ด์ฉ์ฑ์ด ํฌํจ๋ฉ๋๋ค."
-
-#: src/running-the-course/course-structure.md:34
-msgid "Bare-Metal"
-msgstr "Bare-Metal"
-
-#: src/running-the-course/course-structure.md:36
-msgid ""
-"The [Bare-Metal Deep Dive](../bare-metal.md): a full day class on using Rust "
-"for bare-metal (embedded) development. Both microcontrollers and application "
-"processors are covered."
-msgstr ""
-"[Bare-Metal ์ฌํ ํ์ต](../bare-metal.md): bare-metal(์๋ฒ ๋๋) ๊ฐ๋ฐ ์ Rust "
-"์ฌ์ฉ์ ๊ดํ ์ข
์ผ ๊ณผ์ ์
๋๋ค. ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ์ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ก์ธ์๋ฅผ ๋ชจ๋ "
-"๋ค๋ฃน๋๋ค."
-
-#: src/running-the-course/course-structure.md:40
-msgid ""
-"For the microcontroller part, you will need to buy the [BBC micro:bit]"
-"(https://microbit.org/) v2 development board ahead of time. Everybody will "
-"need to install a number of packages as described on the [welcome page](../"
-"bare-metal.md)."
-msgstr ""
-"๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ ํํธ๋ฅผ ์งํํ๊ธฐ ์ํด์๋ [BBC micro:bit](https://microbit."
-"org/) v2 ๊ฐ๋ฐ ๋ณด๋๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌ๋งคํด์ผ ํฉ๋๋ค. ๋ชจ๋ ์ฌ์ฉ์๋ [์์ ํ์ด์ง](../"
-"bare-metal.md)์ ์ค๋ช
๋ ๋๋ก ๊ฐ์ข
ํจํค์ง๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค."
-
-#: src/running-the-course/course-structure.md:47
-msgid ""
-"The [Concurrency Deep Dive](../concurrency.md) is a full day class on "
-"classical as well as `async`/`await` concurrency."
-msgstr ""
-"[๋์์ฑ ์ฌํํ์ต](../concurrency.md)์ ๊ณ ์ ์ ์ธ ๋์์ฑ ๋ฐ `async`/`await` ๋"
-"์์ฑ์ ๋ค๋ฃจ๋ ์ข
์ผ ๊ณผ์ ์
๋๋ค."
-
-#: src/running-the-course/course-structure.md:54
-msgid ""
-"```shell\n"
-"cargo init concurrency\n"
-"cd concurrency\n"
-"cargo add tokio --features full\n"
-"cargo run\n"
-"```"
-msgstr ""
-"```shell\n"
-"cargo init concurrency\n"
-"cd concurrency\n"
-"cargo add tokio --features full\n"
-"cargo run\n"
-"```"
-
#: src/cargo.md:3
msgid ""
"When you start reading about Rust, you will soon meet [Cargo](https://doc."
@@ -1393,65 +1599,53 @@ msgid "Installation"
msgstr "์ค์นํ๊ธฐ"
#: src/cargo.md:10
-msgid "Rustup (Recommended)"
-msgstr "Rustup (์ถ์ฒ)"
+msgid "**Please follow the instructions on .**"
+msgstr "**์ ์ค์น ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด์ธ์.**"
#: src/cargo.md:12
msgid ""
-"You can follow the instructions to install cargo and rust compiler, among "
-"other standard ecosystem tools with the [rustup](https://rust-analyzer."
-"github.io/) tool, which is maintained by the Rust Foundation."
+"This will give you the Cargo build tool (`cargo`) and the Rust compiler "
+"(`rustc`). You will also get `rustup`, a command line utility that you can "
+"use to install/switch toolchains, setup cross compilation, etc."
msgstr ""
-"๋ฌ์คํธ ์ฌ๋จ์์ ๊ด๋ฆฌํ๊ณ ์๋ [rustup](https://rust-analyzer.github.io/) ๋๊ตฌ"
-"๋ฅผ ์ฌ์ฉํ์ฌ ์นด๊ณ ๋ฐ ๋ฌ์คํธ ์ปดํ์ผ๋ฌ ๋ฑ ํ์ค ๋๊ตฌ๋ฅผ ์ค์น ํ ์ ์์ต๋๋ค."
-
-#: src/cargo.md:14
-msgid ""
-"Along with cargo and rustc, Rustup will install itself as a command line "
-"utility that you can use to install/switch toolchains, setup cross "
-"compilation, etc."
-msgstr ""
-"์นด๊ณ (cargo)์ ๋ฌ์คํธ ์ปดํ์ผ๋ฌ(rustc)์ ํจ๊ป, rustup์ ํด์ฒด์ธ์ ์ค์นํ๊ณ , ๋ค"
+"์ ์ค์น ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด๋ฉด, ๋น๋ ์์คํ
์ธ ์นด๊ณ (`cargo`)์ ๋ฌ์คํธ ์ปดํ์ผ๋ฌ(`rustc`)"
+"๊ฐ ์ค์น๋ฉ๋๋ค. ์ด์ ํจ๊ป, `rustup`๋ ์ค์น๋๋๋ฐ ์ด ํด์ ํด์ฒด์ธ์ ์ค์นํ๊ณ , ๋ค"
"๋ฅธ ํด์ฒด์ธ์ผ๋ก ์ ํํ๊ณ , ํฌ๋ก์ค ์ปดํ์ผ ์ค์ ์ ํ๋ ์ผ์ ๋ด๋นํ๋ ์ปค๋งจ๋ ๋ผ์ธ "
"์ ํธ๋ฆฌํฐ ์
๋๋ค."
#: src/cargo.md:16
-msgid "Package Managers"
-msgstr "ํจํค์ง ๋งค๋์ "
+msgid ""
+"On Debian/Ubuntu, you can also install Cargo, the Rust source and the [Rust "
+"formatter](https://github.com/rust-lang/rustfmt) via `apt`. However, this "
+"gets you an outdated rust version and may lead to unexpected behavior. The "
+"command would be:"
+msgstr ""
+"๋ฐ๋น์/์ฐ๋ถํฌ ์์คํ
์์๋ `apt`๋ฅผ ์ด์ฉํด์ ์นด๊ณ , ๋ฌ์คํธ ์์ค, [๋ฌ์คํธ ํฌ๋งค"
+"ํฐ](https://github.com/rust-lang/rustfmt)๋ฅผ ์ค์นํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ฐฉ"
+"๋ฒ์ ๋ฐ๋ฅผ ๊ฒฝ์ฐ ์ต์ ๋ฒ์ ์ด ์๋ ๋ฌ์คํธ๋ฅผ ์ฌ์ฉ๊ฒ๋๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ ์์์น ๋ชปํ ๋ฌธ์ "
+"๋ฅผ ๊ฒช์ ์๋ ์์ต๋๋ค. ์ค์น ๋ช
๋ น์ด๋ ์๋์ ๊ฐ์ต๋๋ค:"
#: src/cargo.md:18
-msgid "Debian"
-msgstr "๋ฐ๋น์"
-
-#: src/cargo.md:20
msgid ""
-"On Debian/Ubuntu, you can install Cargo, the Rust source and the [Rust "
-"formatter](https://github.com/rust-lang/rustfmt) with"
+"```shell\n"
+" sudo apt install cargo rust-src rustfmt\n"
+"```"
msgstr ""
-"๋ฐ๋น์์ด๋ ์ฐ๋ถํฌ์์ cargo, ๋ฌ์คํธ ์์ค์ฝ๋, [๋ฌ์คํธ ํฌ๋งคํฐ](https://github."
-"com/rust-lang/rustfmt)๋ฅผ ์๋ ์ปค๋งจ๋๋ก ์ค์นํฉ๋๋ค."
+"```shell\n"
+"$ sudo apt install cargo rust-src rustfmt\n"
+"```"
#: src/cargo.md:22
msgid ""
-"```shell\n"
-"$ sudo apt install cargo rust-src rustfmt\n"
-"```"
+"We suggest using [VS Code](https://code.visualstudio.com/) to edit the code "
+"(but any LSP compatible editor works with rust-analyzer[3](https://rust-"
+"analyzer.github.io/))."
msgstr ""
-"```shell\n"
-"$ sudo apt install cargo rust-src rustfmt\n"
-"```"
+"์ฐ๋ฆฌ๋ ์ฝ๋ ์๋ํฐ๋ก [VS Code](https://code.visualstudio.com/)๋ฅผ ์ถ์ฒํฉ๋๋ค. "
+"๊ทธ๋ฌ๋ LSP๋ฅผ ์ง์ํ๋ (๊ทธ๋์ rust-analyzer[3](https://rust-analyzer.github."
+"io/)์ ์ฐ๋์ด ๊ฐ๋ฅํ) ์๋ํฐ๋ผ๋ฉด ์ด๋ค ๊ฒ์ด๋ผ๋ ๊ด์ฐฎ์ต๋๋ค."
-#: src/cargo.md:26
-msgid ""
-"This will allow \\[rust-analyzer\\]\\[1\\] to jump to the definitions. We "
-"suggest using [VS Code](https://code.visualstudio.com/) to edit the code "
-"(but any LSP compatible editor works)."
-msgstr ""
-"์ด๋ ๊ฒ ํ๋ฉด \\[rust-analyzer\\]\\[1\\]๋ฅผ ์ด์ฉํด์ ํน์ ์ฌ๋ณผ์ด ์ ์๋ ์์น๋ก "
-"์ฝ๊ฒ ์ด๋ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ํฐ๋ก [VS Code](https://code.visualstudio."
-"com/)๋ฅผ ์ถ์ฒํฉ๋๋ค๋ง, ์ฌ์ค LSP๋ฅผ ์ง์ํ๋ค๋ฉด ์ด๋ค ์๋ํฐ๋ ๋ฌด๋ฐฉํฉ๋๋ค."
-
-#: src/cargo.md:29
+#: src/cargo.md:24
msgid ""
"Some folks also like to use the [JetBrains](https://www.jetbrains.com/"
"clion/) family of IDEs, which do their own analysis but have their own "
@@ -1487,14 +1681,14 @@ msgstr ""
#: src/cargo/rust-ecosystem.md:8
msgid ""
"`cargo`: the Rust dependency manager and build tool. Cargo knows how to "
-"download dependencies hosted on and it will pass them to "
-"`rustc` when building your project. Cargo also comes with a built-in test "
-"runner which is used to execute unit tests."
+"download dependencies, usually hosted on , and it will "
+"pass them to `rustc` when building your project. Cargo also comes with a "
+"built-in test runner which is used to execute unit tests."
msgstr ""
-"`cargo`: ๋ฌ์คํธ ์์กด์ฑ ๊ด๋ฆฌ์ ๋ฐ ๋น๋๋๊ตฌ ์
๋๋ค. ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ์ ๋ช
์๋ "
-"์์กด์ฑ๋ค์ ์์ ์๋์ผ๋ก ๋ค์ด๋ก๋ ๋ฐ๊ณ , ๊ทธ ์์ค์ฝ๋๋ฅผ "
-"`rustc`๋ก ์ ๋ฌํ์ฌ ๋น๋๋ฅผ ์ํต๋๋ค. ๋ํ ์ ๋ ํ
์คํธ๋ฅผ ์คํํ๋ ํ
์คํธ ๋ฌ๋"
-"๋ฅผ ๋ด์ฅํ๊ณ ์์ต๋๋ค."
+"`cargo`: ๋ฌ์คํธ ์์กด์ฑ ๊ด๋ฆฌ์์ด์ ๋น๋ ์์คํ
์
๋๋ค. ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ์ ๋ช
"
+"์๋ ์์กด์ฑ๋ค์ ์์ ์๋์ผ๋ก ๋ค์ด๋ก๋ ๋ฐ๊ณ , ๊ทธ ์์ค์ฝ๋"
+"๋ฅผ `rustc`๋ก ์ ๋ฌํ์ฌ ๋น๋๋ฅผ ์ํต๋๋ค. ๋ํ ์ ๋ ํ
์คํธ๋ฅผ ์คํํ๋ ํ
์คํธ ๋ฌ"
+"๋๋ฅผ ๋ด์ฅํ๊ณ ์์ต๋๋ค."
#: src/cargo/rust-ecosystem.md:13
msgid ""
@@ -1504,19 +1698,20 @@ msgid ""
"standard library. You can have multiple versions of Rust installed at once "
"and `rustup` will let you switch between them as needed."
msgstr ""
-"`rustup`: ๋ฌ์คํธ ํด์ฒด์ธ ์ค์น ํ๋ก๊ทธ๋จ ๋ฐ ์
๋ฐ์ดํธ ํ๋ก๊ทธ๋จ. ์ด ๋๊ตฌ๋ ์ ๋ฒ์ "
-"์ ๋ฌ์คํธ๊ฐ ์ถ์๋ ๋ `rustc` ๋ฐ `cargo` ์ค์นํ๊ณ ์
๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋"
-"๋ค. ๋ํ `rustup`์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ฌธ์๋ฅผ ๋ค์ด๋ก๋ํ ์๋ ์์ต๋๋ค. "
-"ํ ๋ฒ์ ์ฌ๋ฌ ๋ฒ์ ์ ๋ฌ์คํธ๋ฅผ ์ค์นํ ์ ์์ผ๋ฉฐ `rustup`์ ํตํด ํ์์ ๋ฐ๋ผ ์ด"
-"๋ค ๋ฒ์ ์ ์ ํํ ์ ์์ต๋๋ค."
+"`rustup`: ๋ฌ์คํธ ํด์ฒด์ธ ์ค์น ํ๋ก๊ทธ๋จ์ด์ ์
๋ฐ์ดํธ ํ๋ก๊ทธ๋จ ์
๋๋ค. ์ด ๋๊ตฌ"
+"๋ ์ ๋ฒ์ ์ ๋ฌ์คํธ๊ฐ ์ถ์๋ ๋ `rustc` ๋ฐ `cargo` ์ค์นํ๊ณ ์
๋ฐ์ดํธํ๋ ๋ฐ "
+"์ฌ์ฉ๋ฉ๋๋ค. ๋ํ `rustup`์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ฌธ์๋ฅผ ๋ค์ด๋ก๋ํ ์๋ ์"
+"์ต๋๋ค. ํ ๋ฒ์ ์ฌ๋ฌ ๋ฒ์ ์ ๋ฌ์คํธ๋ฅผ ์ค์นํ ์ ์์ผ๋ฉฐ `rustup`์ ์ด์ฉํด์ ์ค"
+"์ ๋ก ์ฌ์ฉํ ๋ฒ์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค."
#: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25
#: src/hello-world/small-example.md:27 src/why-rust/runtime.md:10
#: src/why-rust/modern.md:21 src/basic-syntax/compound-types.md:30
+#: src/basic-syntax/references.md:23
#: src/pattern-matching/destructuring-enums.md:35
-#: src/error-handling/try-operator.md:50
+#: src/error-handling/try-operator.md:48
#: src/error-handling/converting-error-types-example.md:50
-#: src/concurrency/threads.md:30
+#: src/concurrency/threads.md:30 src/async/async-await.md:25
msgid "Key points:"
msgstr "ํค ํฌ์ธํธ:"
@@ -1544,6 +1739,14 @@ msgstr ""
#: src/cargo/rust-ecosystem.md:32
msgid ""
+"Dependencies can also be resolved from alternative [registries](https://doc."
+"rust-lang.org/cargo/reference/registries.html), git, folders, and more."
+msgstr ""
+"์์กด์ฑ์ ๋ค์ํ [์ ์ฅ์](registries), git ํ๋ก์ ํธ, ๋๋ ํฐ๋ฆฌ ๋ฑ์์ ์ ๊ณต๋ "
+"์ ์์ต๋๋ค."
+
+#: src/cargo/rust-ecosystem.md:34
+msgid ""
"Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the "
"current edition is Rust 2021. Previous editions were Rust 2015 and Rust 2018."
msgstr ""
@@ -1551,13 +1754,13 @@ msgstr ""
"ํ์ฌ๋ Rust 2021 ์๋์
์
๋๋ค. ์ด ์ ์๋์
์ผ๋ก Rust 2015์ Rust 2018์ด ์์ต"
"๋๋ค."
-#: src/cargo/rust-ecosystem.md:35
+#: src/cargo/rust-ecosystem.md:37
msgid ""
"The editions are allowed to make backwards incompatible changes to the "
"language."
msgstr "์๋์
์ ์ด์ ์๋์
๊ณผ ํธํ์ด ๋์ง ์์ ์ ์์ต๋๋ค."
-#: src/cargo/rust-ecosystem.md:38
+#: src/cargo/rust-ecosystem.md:40
msgid ""
"To prevent breaking code, editions are opt-in: you select the edition for "
"your crate via the `Cargo.toml` file."
@@ -1565,7 +1768,7 @@ msgstr ""
"์๋์
์ด ๋ฐ๋๋ฉด์ ํ๋ก๊ทธ๋จ์ด ์๋์น ์๊ฒ ๊นจ์ง๋ ๋ฌธ์ ๋ฅผ ๋ง๊ธฐ ์ํด, ๊ฐ ํ๋ก๊ทธ๋จ"
"์ ์์ ์ด ๋น๋๋ ์๋์
์ ๋ช
์์ ์ผ๋ก `Cargo.toml`์ ์ง์ ํด์ผ ํฉ๋๋ค."
-#: src/cargo/rust-ecosystem.md:41
+#: src/cargo/rust-ecosystem.md:43
msgid ""
"To avoid splitting the ecosystem, Rust compilers can mix code written for "
"different editions."
@@ -1573,7 +1776,7 @@ msgstr ""
"๋ฌ์คํธ ์ํ๊ณ๊ฐ ์๋์
๋ณ๋ก ํํธํ ๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํด, ๋ฌ์คํธ ์ปดํ์ผ๋ฌ๋ ์"
"๋ก ๋ค๋ฅธ ์๋์
์์ ์์ฑ๋ ์ฝ๋๋ค์ ํ๋์ ๋ฐ์ด๋๋ฆฌ๋ก ๋ฌถ์ ์ ์์ต๋๋ค."
-#: src/cargo/rust-ecosystem.md:44
+#: src/cargo/rust-ecosystem.md:46
msgid ""
"Mention that it is quite rare to ever use the compiler directly not through "
"`cargo` (most users never do)."
@@ -1581,51 +1784,51 @@ msgstr ""
"`cargo`๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ปดํ์ผ๋ฌ๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์์ ์ธ๊ธํด ์ฃผ"
"์๊ธฐ ๋ฐ๋๋๋ค."
-#: src/cargo/rust-ecosystem.md:46
+#: src/cargo/rust-ecosystem.md:48
msgid ""
"It might be worth alluding that Cargo itself is an extremely powerful and "
"comprehensive tool. It is capable of many advanced features including but "
"not limited to: "
msgstr ""
"์นด๊ณ ์์ฒด๊ฐ ๋งค์ฐ ๊ฐ๋ ฅํ๊ณ ํฌ๊ด์ ์ธ ๋๊ตฌ์์ ์ ๊ทน์ ์ผ๋ก ์๋ฆฌ์ธ์. ์นด๊ณ ๋ ๋ค์"
-"๊ณผ ๊ฐ์ ๋ค์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค."
+"๊ณผ ๊ฐ์ ๋ค์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค: "
-#: src/cargo/rust-ecosystem.md:47
+#: src/cargo/rust-ecosystem.md:49
msgid "Project/package structure"
msgstr "ํ๋ก์ ํธ/ํจํค์ง ๊ตฌ์กฐํ"
-#: src/cargo/rust-ecosystem.md:48
+#: src/cargo/rust-ecosystem.md:50
msgid "[workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)"
msgstr ""
"[์ํฌ์คํ์ด์ค](https://doc.rust-lang.org/cargo/reference/workspaces.html)"
-#: src/cargo/rust-ecosystem.md:49
+#: src/cargo/rust-ecosystem.md:51
msgid "Dev Dependencies and Runtime Dependency management/caching"
msgstr "๊ฐ๋ฐ/๋ฐํ์ ์ข
์์ฑ ๊ด๋ฆฌ ๋ฐ ์บ์ฑ"
-#: src/cargo/rust-ecosystem.md:50
+#: src/cargo/rust-ecosystem.md:52
msgid ""
"[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts."
"html)"
msgstr ""
"[๋น๋ ์คํฌ๋ฆฝํธ](https://doc.rust-lang.org/cargo/reference/build-scripts.html)"
-#: src/cargo/rust-ecosystem.md:51
+#: src/cargo/rust-ecosystem.md:53
msgid ""
"[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install."
"html)"
msgstr ""
"[์ ์ญ ์ค์น](https://doc.rust-lang.org/cargo/commands/cargo-install.html)"
-#: src/cargo/rust-ecosystem.md:52
+#: src/cargo/rust-ecosystem.md:54
msgid ""
"It is also extensible with sub command plugins as well (such as [cargo "
"clippy](https://github.com/rust-lang/rust-clippy))."
msgstr ""
"[cargo clippy](https://github.com/rust-lang/rust-clippy)์ ๊ฐ์ ํ์ ํ๋ฌ๊ทธ์ธ"
-"์ผ๋ก ํ์ฅ ๊ฐ๋ฅ"
+"์ผ๋ก ํ์ฅ ๊ฐ๋ฅ."
-#: src/cargo/rust-ecosystem.md:53
+#: src/cargo/rust-ecosystem.md:55
msgid ""
"Read more from the [official Cargo Book](https://doc.rust-lang.org/cargo/)"
msgstr ""
@@ -1680,7 +1883,7 @@ msgstr "์ฝ๋ ๋ธ๋ก์ ํฌ์ปค์ค๋ฅผ ๋๊ณ "
#: src/cargo/code-samples.md:19
msgid " to execute the code when focus is in the text box."
-msgstr "๋ฅผ ๋๋ฌ ์คํํด ๋ณผ ์ ์์ต๋๋ค."
+msgstr " ๋ฅผ ๋๋ฌ ์คํํด ๋ณผ ์ ์์ต๋๋ค."
#: src/cargo/code-samples.md:24
msgid ""
@@ -1743,24 +1946,32 @@ msgstr ""
#: src/cargo/running-locally.md:15
msgid ""
-"With this is in place, then follow these steps to build a Rust binary from "
-"one of the examples in this training:"
+"You can use any later version too since Rust maintains backwards "
+"compatibility."
msgstr ""
-"์ ์์ ์ผ๋ก ์ค์น๊ฐ ๋์์ผ๋ฉด ๊ฐ์์ ์ฝ๋ ๋ธ๋ก์ค ํ๋๋ฅผ ์๋ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ ๋ก์ปฌ์"
-"์ ์คํํ ์ ์์ต๋๋ค:"
+"์ด ๋ฒ์ ๋ณด๋ค ๋ ์ต์ ์ ๋ฒ์ ์ด์ด๋ ์๊ด ์์ต๋๋ค. ๋ฌ์คํธ๋ ํ์ ํธํ์ฑ์ ์ง์ํฉ"
+"๋๋ค."
-#: src/cargo/running-locally.md:18
+#: src/cargo/running-locally.md:17
+msgid ""
+"With this in place, follow these steps to build a Rust binary from one of "
+"the examples in this training:"
+msgstr ""
+"์ ์์ ์ผ๋ก ์ค์น๊ฐ ๋์์ผ๋ฉด, ๊ฐ์ ์์ ์ค ํ๋๋ฅผ ๋ฌ์คํธ ๋ฐ์ด๋๋ฆฌ๋ก ๋น๋ํด ๋ด
์"
+"๋ค:"
+
+#: src/cargo/running-locally.md:20
msgid "Click the \"Copy to clipboard\" button on the example you want to copy."
msgstr "์์ ๋ธ๋ก์ ์๋ \"Copy to clipboard\" ๋ฒํผ์ ํด๋ฆญํด์ ๋ณต์ฌํฉ๋๋ค."
-#: src/cargo/running-locally.md:20
+#: src/cargo/running-locally.md:22
msgid ""
"Use `cargo new exercise` to create a new `exercise/` directory for your code:"
msgstr ""
"ํฐ๋ฏธ๋์์ `cargo new exercise`๋ฅผ ์
๋ ฅํด์ ์๋ก์ด `exercise/` ํด๋๋ฅผ ๋ง๋ญ๋"
"๋ค:"
-#: src/cargo/running-locally.md:22
+#: src/cargo/running-locally.md:24
msgid ""
"```shell\n"
"$ cargo new exercise\n"
@@ -1772,12 +1983,12 @@ msgstr ""
" Created binary (application) `exercise` package\n"
"```"
-#: src/cargo/running-locally.md:27
+#: src/cargo/running-locally.md:29
msgid ""
"Navigate into `exercise/` and use `cargo run` to build and run your binary:"
msgstr "`exercise/` ํด๋๋ก ์ด๋ํ ํ, `cargo run` ์ปค๋งจ๋๋ก ์ฝ๋๋ฅผ ์คํํฉ๋๋ค:"
-#: src/cargo/running-locally.md:29
+#: src/cargo/running-locally.md:31
msgid ""
"```shell\n"
"$ cd exercise\n"
@@ -1797,7 +2008,7 @@ msgstr ""
"Hello, world!\n"
"```"
-#: src/cargo/running-locally.md:38
+#: src/cargo/running-locally.md:40
msgid ""
"Replace the boiler-plate code in `src/main.rs` with your own code. For "
"example, using the example on the previous page, make `src/main.rs` look like"
@@ -1805,7 +2016,7 @@ msgstr ""
"`src/main.rs`์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ด์ ํ์ด์ง์ ์์ค๋ฅผ ์๋์ ๊ฐ"
"์ด `src/main.rs`์ ์์ฑํฉ๋๋ค"
-#: src/cargo/running-locally.md:41
+#: src/cargo/running-locally.md:43
msgid ""
"```rust\n"
"fn main() {\n"
@@ -1819,11 +2030,11 @@ msgstr ""
"}\n"
"```"
-#: src/cargo/running-locally.md:47
+#: src/cargo/running-locally.md:49
msgid "Use `cargo run` to build and run your updated binary:"
msgstr "`cargo run`์ปค๋งจ๋๋ก ์์ค๋ฅผ ๋น๋ํ๊ณ ์คํํฉ๋๋ค:"
-#: src/cargo/running-locally.md:49
+#: src/cargo/running-locally.md:51
msgid ""
"```shell\n"
"$ cargo run\n"
@@ -1841,7 +2052,7 @@ msgstr ""
"Edit me!\n"
"```"
-#: src/cargo/running-locally.md:57
+#: src/cargo/running-locally.md:59
msgid ""
"Use `cargo check` to quickly check your project for errors, use `cargo "
"build` to compile it without running it. You will find the output in `target/"
@@ -1853,7 +2064,7 @@ msgstr ""
"์์ต๋๋ค. `cargo build --release`์ปค๋งจ๋๋ ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ฉ ์ต์ ํ๋ฅผ ์ผ์ ์ปดํ์ผ"
"ํ๋ฉฐ `target/release/`ํด๋์์ ํ์ธ ํ ์ ์์ต๋๋ค."
-#: src/cargo/running-locally.md:62
+#: src/cargo/running-locally.md:64
msgid ""
"You can add dependencies for your project by editing `Cargo.toml`. When you "
"run `cargo` commands, it will automatically download and compile missing "
@@ -1862,7 +2073,7 @@ msgstr ""
"`Cargo.toml`ํ์ผ์๋ ์์กด์ฑ ํจํค์ง๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. `cargo`์ปค๋งจ๋๋ฅผ ์คํ"
"ํ๋ฉด ์๋์ผ๋ก ์์กด์ฑ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ปดํ์ผ ๊น์ง ํด ์ค๋๋ค."
-#: src/cargo/running-locally.md:70
+#: src/cargo/running-locally.md:72
msgid ""
"Try to encourage the class participants to install Cargo and use a local "
"editor. It will make their life easier since they will have a normal "
@@ -1878,7 +2089,7 @@ msgstr "1์ผ์ฐจ ๊ฐ์"
#: src/welcome-day-1.md:3
msgid ""
-"This is the first day of Comprehensive Rust. We will cover a lot of ground "
+"This is the first day of Rust Fundamentals. We will cover a lot of ground "
"today:"
msgstr "๊ฐ์ ์ฒซ ๋ ์
๋๋ค. ์ค๋ ๋ฐฐ์ธ ๊ฒ์ด ์ฐธ ๋ง์ต๋๋ค:"
@@ -1916,14 +2127,15 @@ msgstr "๊ถ๊ธํ ์ ์ด ์์ผ๋ฉด ์ฃผ์ ํ์ง ๋ง๊ณ ์ง๋ฌธ ํด์ผ ํฉ๋๋ค."
msgid ""
"The class is meant to be interactive and discussions are very much "
"encouraged!"
-msgstr "์ด ์์
์ ์ํธ์์ฉ์ด ์ค์ํ๊ณ ํ ๋ก ์ ๊ถ์ฅํฉ๋๋ค."
+msgstr "์ด ์์
์ ์ํธ์์ฉ์ด ์ํฉ๋๋ค. ํ ๋ก ์ ๋ง์ค์ด์ง ๋ง์ธ์!"
#: src/welcome-day-1.md:20
msgid ""
"As an instructor, you should try to keep the discussions relevant, i.e., "
-"keep the related to how Rust does things vs some other language. It can be "
-"hard to find the right balance, but err on the side of allowing discussions "
-"since they engage people much more than one-way communication."
+"keep the discussions related to how Rust does things vs some other "
+"language. It can be hard to find the right balance, but err on the side of "
+"allowing discussions since they engage people much more than one-way "
+"communication."
msgstr ""
"๊ฐ์ฌ๋ก์ ํ ๋ก ์ด ์๊ธธ๋ก ์์ง ์๊ฒ ์ฃผ์ํ์ธ์. ์๋ฅผ ๋ค์ด ๋ฌ์คํธ์ ๋ค๋ฅธ ์ธ์ด๋ค"
"์ ๋น๊ตํ๋ค๋ ์ง ํ๋ ๊ฒ์ ์ข์ต๋๋ค. ์ ์ ํ ๊ท ํ์ ์ฐพ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ๋ผ๋ฉด ํ ๋ก "
@@ -1989,7 +2201,7 @@ msgstr ""
#: src/welcome-day-1/what-is-rust.md:5
msgid "Rust is a statically compiled language in a similar role as C++"
-msgstr "๋ฌ์คํธ๋ C++์ ์ ์ฌํ ์ ์ ์ปดํ์ผ ์ธ์ด์
๋๋ค."
+msgstr "๋ฌ์คํธ๋ C++์ ์ ์ฌํ ์ ์ ์ปดํ์ผ ์ธ์ด์
๋๋ค"
#: src/welcome-day-1/what-is-rust.md:6
msgid "`rustc` uses LLVM as its backend."
@@ -1999,7 +2211,7 @@ msgstr "`rustc`๋ LLVM์ ๋ฐฑ์๋๋ก ์ฌ์ฉํฉ๋๋ค."
msgid ""
"Rust supports many [platforms and architectures](https://doc.rust-lang.org/"
"nightly/rustc/platform-support.html):"
-msgstr "๋ฌ์คํธ๋ ๋ค์ํ ํ๋ซํผ๊ณผ ์ํคํ
์ณ๋ฅผ ์ง์ํฉ๋๋ค."
+msgstr "๋ฌ์คํธ๋ ๋ค์ํ ํ๋ซํผ๊ณผ ์ํคํ
์ณ๋ฅผ ์ง์ํฉ๋๋ค:"
#: src/welcome-day-1/what-is-rust.md:9
msgid "x86, ARM, WebAssembly, ..."
@@ -2019,19 +2231,19 @@ msgstr "ํ์จ์ด์ ๋ถํธ๋ก๋(์๋ฒ ๋๋)"
#: src/welcome-day-1/what-is-rust.md:13
msgid "smart displays,"
-msgstr "์ค๋งํธ ๋์คํ๋ ์ด"
+msgstr "์ค๋งํธ ๋์คํ๋ ์ด,"
#: src/welcome-day-1/what-is-rust.md:14
msgid "mobile phones,"
-msgstr "์ค๋งํธํฐ"
+msgstr "์ค๋งํธํฐ,"
#: src/welcome-day-1/what-is-rust.md:15
msgid "desktops,"
-msgstr "๋ฐ์คํฌํ"
+msgstr "๋ฐ์คํฌํ,"
#: src/welcome-day-1/what-is-rust.md:16
msgid "servers."
-msgstr "์๋ฒ"
+msgstr "์๋ฒ."
#: src/welcome-day-1/what-is-rust.md:21
msgid "Rust fits in the same area as C++:"
@@ -2043,11 +2255,12 @@ msgstr "๋์ ์ ์ฐ์ฑ."
#: src/welcome-day-1/what-is-rust.md:24
msgid "High level of control."
-msgstr "๋์ ๋ ๋ฒจ ์์ค์ ์ ์ด."
+msgstr "๋์ ์์ค์ ์ ์ด."
#: src/welcome-day-1/what-is-rust.md:25
-msgid "Can be scaled down to very constrained devices like mobile phones."
-msgstr "ํด๋ํฐ๊ณผ ๊ฐ์ ๋งค์ฐ ์ ํ๋ ์ฅ์น๋ก ์ค์ผ์ผ ๋ค์ด ๊ฐ๋ฅ."
+msgid ""
+"Can be scaled down to very constrained devices such as microcontrollers."
+msgstr "๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ ๊ฐ์ ๋งค์ฐ ์ ํ๋ ์ฅ์น๋ก ์ค์ผ์ผ ๋ค์ด ๊ฐ๋ฅ."
#: src/welcome-day-1/what-is-rust.md:26
msgid "Has no runtime or garbage collection."
@@ -2066,12 +2279,17 @@ msgstr ""
#: src/hello-world.md:6
msgid ""
-"```rust\n"
+"```rust,editable\n"
"fn main() {\n"
" println!(\"Hello ๐!\");\n"
"}\n"
"```"
msgstr ""
+"```rust,editable\n"
+"fn main() {\n"
+" println!(\"Hello ๐!\");\n"
+"}\n"
+"```"
#: src/hello-world.md:12
msgid "What you see:"
@@ -2104,21 +2322,20 @@ msgstr ""
#: src/hello-world.md:22
msgid ""
"This slide tries to make the students comfortable with Rust code. They will "
-"see a ton of it over the next four days so we start small with something "
+"see a ton of it over the next three days so we start small with something "
"familiar."
msgstr ""
-"์ด ์ฌ๋ผ์ด๋๋ ํ์๋ค์ด ๋ฌ์คํธ ์ฝ๋์ ์ต์ํด์ง๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค. ์์ผ๋ก 4"
+"์ด ์ฌ๋ผ์ด๋๋ ํ์๋ค์ด ๋ฌ์คํธ ์ฝ๋์ ์ต์ํด์ง๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค. ์์ผ๋ก 3"
"์ผ ๋์ ๋ง์ ์ฝ๋๋ฅผ ์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฐ์ ์น์ํ ์ฝ๋๋ถํฐ ์์ํฉ๋๋ค."
#: src/hello-world.md:27
msgid ""
"Rust is very much like other languages in the C/C++/Java tradition. It is "
-"imperative (not functional) and it doesn't try to reinvent things unless "
-"absolutely necessary."
+"imperative and it doesn't try to reinvent things unless absolutely necessary."
msgstr ""
"๋ฌ์คํธ๋ C/C++/Java์ ๊ฐ์ ์ ํต์ ์ธ ๋ค๋ฅธ ์ธ์ด์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๋ฌ์คํธ๋ ์ "
-"์ฐจ์ (ํจ์ํ ์๋) ์ธ์ด์
๋๋ค. ์ ๋ง๋ก ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด, ๋ฌ์คํธ๋ ์ด๋ฏธ ์กด"
-"์ฌํ๋ ๊ฒ์ ์๋ก ๊ตฌํํ๋ ค๊ณ ํ์ง ์์ต๋๋ค."
+"์ฐจ์ ์ธ์ด์
๋๋ค. ์ ๋ง๋ก ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด, ๋ฌ์คํธ๋ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒ์ "
+"์๋ก ๊ตฌํํ๋ ค๊ณ ํ์ง ์์ต๋๋ค."
#: src/hello-world.md:31
msgid "Rust is modern with full support for things like Unicode."
@@ -2136,13 +2353,26 @@ msgstr ""
msgid ""
"Macros being 'hygienic' means they don't accidentally capture identifiers "
"from the scope they are used in. Rust macros are actually only [partially "
-"hygenic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)."
+"hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene."
+"html)."
msgstr ""
"๋๋ํ ๋งคํฌ๋ก(hygienic macro)๋ ๋งคํฌ๋ก๊ฐ ์ฌ์ฉ๋๋ ์ค์ฝํ์์ ์๋์น ์๊ฒ ๋ณ์"
"๋ฅผ ๊ฐ๋ก์ฑ์ง ์์ต๋๋ค. ์ฌ์ค ๋ฌ์คํธ ๋งคํฌ๋ก๋ ์์ ํ hygenicํ์ง๋ ์์ต๋๋ค. [๋ง"
"ํฌ](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene.html)๋ฅผ ์ฐธ"
"๊ณ ํ์ธ์."
+#: src/hello-world.md:40
+msgid ""
+"Rust is multi-paradigm. For example, it has powerful [object-oriented "
+"programming features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, "
+"while it is not a functional language, it includes a range of [functional "
+"concepts](https://doc.rust-lang.org/book/ch13-00-functional-features.html)."
+msgstr ""
+"๋ฌ์คํธ๋ ๋ฉํฐ ํจ๋ฌ๋ค์ ์ธ์ด์
๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ๋ ฅํ [๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ"
+"๋ฅ](https://doc.rust-lang.org/book/ch17-00-oop.html)์ ์ง์ํ๊ธฐ๋ ํ๋ฉฐ, ํจ์"
+"ํ ์ธ์ด๋ก ๋ถ๋ฅ๋์ง๋ ์์ง๋ง ํญ๋์ ๋ฒ์์ [ํจ์ํ ์ปจ์
](https://doc.rust-"
+"lang.org/book/ch13-00-functional-features.html)์ ์ง์ํฉ๋๋ค."
+
#: src/hello-world/small-example.md:3
msgid "Here is a small example program in Rust:"
msgstr "๋ฌ์คํธ๋ก ์์ฑ๋ ์์ ์์ ์
๋๋ค:"
@@ -2231,6 +2461,14 @@ msgstr ""
"๋งทํ
์ธ์ด์ ๋ฌธ๋ฒ์ ์๊ธฐ ์ํด `std::fmt`๋ฅผ ๊ฒ์ํด์ผ ํ๋ค๋ ๊ฒ์ ๊ฐ๋ฅด์น์ธ์.ํ"
"์๋ค์ด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒ์ ๊ธฐ๋ฅ์ ์ต์ํด ์ง๋๋ก ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค."
+#: src/hello-world/small-example.md:44
+msgid ""
+"In a shell `rustup doc std::fmt` will open a browser on the local std::fmt "
+"documentation"
+msgstr ""
+"์์์ `rustup doc std::fmt`๋ฅผ ์ํํ๋ฉด ๋ก์ปฌ ๋ธ๋ผ์ฐ์ ๋ก `std:fmt`์ ๋ํ ๋ฌธ"
+"์๋ฅผ ๋ณด์ฌ์ค๋๋ค"
+
#: src/why-rust.md:3
msgid "Some unique selling points of Rust:"
msgstr "๋ฌ์คํธ๋ง์ ๋
ํนํ ์ธ์ผ์ฆ ํฌ์ธํธ(์ฅ์ ):"
@@ -2323,13 +2561,13 @@ msgstr ""
#: src/why-rust/compile-time.md:19
msgid ""
-"You can for use [`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box."
+"You can use [`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box."
"html#method.leak) to leak a pointer. A use of this could be to get runtime-"
"initialized and runtime-sized static variables"
msgstr ""
"[`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box.html#method."
"leak)์ ์ด์ฉํ์ฌ ํฌ์ธํฐ๋ฅผ ์๋์ ์ผ๋ก ๋์ถ์ํฌ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ด์ฉํด์ ๋ฐํ"
-"์์ด ์์ฑํ๊ณ ๋ฐํ์์ด ํฌ๊ธฐ๋ฅผ ์ ํ ์ ์ ๋ณ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค."
+"์์ด ์์ฑํ๊ณ ๋ฐํ์์ด ํฌ๊ธฐ๋ฅผ ์ ํ ์ ์ ๋ณ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค"
#: src/why-rust/compile-time.md:21
msgid ""
@@ -2371,25 +2609,29 @@ msgstr "๋ฐํ์ ์ ์ ์๋์ง ์์(undefined) ๋์ ์์:"
#: src/why-rust/runtime.md:5
msgid "Array access is bounds checked."
-msgstr "๋ฐฐ์ด ์ ๊ทผ์ ๊ฒฝ๊ณ ์ฒดํฌ"
+msgstr "๋ฐฐ์ด ์ ๊ทผ์ ๊ฒฝ๊ณ ์ฒดํฌ."
#: src/why-rust/runtime.md:6
-msgid "Integer overflow is defined."
+msgid "Integer overflow is defined (panic or wrap-around)."
msgstr "์ ์ํ ํ์
์ ๋ณ์์์ ์ค๋ฒํ๋ก์ฐ ๋ฐ์์ ๋์์ด ์ ์ ์๋์ด์์ต๋๋ค."
#: src/why-rust/runtime.md:12
msgid ""
-"Integer overflow is defined via a compile-time flag. The options are either "
-"a panic (a controlled crash of the program) or wrap-around semantics. By "
-"default, you get panics in debug mode (`cargo build`) and wrap-around in "
-"release mode (`cargo build --release`)."
+"Integer overflow is defined via the [`overflow-checks`](https://doc.rust-"
+"lang.org/rustc/codegen-options/index.html#overflow-checks) compile-time "
+"flag. If enabled, the program will panic (a controlled crash of the "
+"program), otherwise you get wrap-around semantics. By default, you get "
+"panics in debug mode (`cargo build`) and wrap-around in release mode (`cargo "
+"build --release`)."
msgstr ""
-"์ ์ํ ์ค๋ฒํ๋ก์ฐ๋ ์ปดํ์ผ ํ์ ํ๋ ๊ทธ๋ฅผ ํตํด ์ ์๋ฉ๋๋ค. ์ต์
์ ํจ๋(ํ๋ก๊ทธ"
-"๋จ ํฌ๋ ์) ํน์ ์ฌ๋ฆผ(wrap-around)์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฒ๊ทธ ๋ชจ๋(`cargo "
-"build`)์์๋ ํจ๋์ด, ๋ฆด๋ฆฌ์ฆ ๋ชจ๋(`cargo build --release`)์์๋ wrap-around"
-"๊ฐ ๋ฐ์ํฉ๋๋ค."
+"์ ์ํ ์ค๋ฒํ๋ก์ฐ๋ [`overflow-checks`](https://doc.rust-lang.org/rustc/"
+"codegen-options/index.html#overflow-checks) ์ปดํ์ผ ํ์ ํ๋๊ทธ๋ฅผ ํตํด ์ ์๋ฉ"
+"๋๋ค. ์ด ํ๋๊ทธ๊ฐ ์ผ์ง๋ฉด, ํ๋ก๊ทธ๋จ์ ์ ์ํ ์ค๋ฒํ๋ก์ฐ ๋ฐ์์ panic (ํ๋ก๊ทธ๋จ"
+"์ ํฌ๋์ ์ํค๋ ์ ์ ์๋ ๋ฐฉ๋ฒ) ํฉ๋๋ค. ์ด ํ๋๊ทธ๊ฐ ๊บผ์ง๋ฉด, ์ค๋ฒํ๋ก์ฐ๋ "
+"wrap-around ๊ฐ ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฒ๊ทธ ๋ชจ๋(`cargo build`)์์๋ ํจ๋์ด, ๋ฆด"
+"๋ฆฌ์ฆ ๋ชจ๋(`cargo build --release`)์์๋ wrap-around๊ฐ ๋ฐ์ํฉ๋๋ค."
-#: src/why-rust/runtime.md:17
+#: src/why-rust/runtime.md:18
msgid ""
"Bounds checking cannot be disabled with a compiler flag. It can also not be "
"disabled directly with the `unsafe` keyword. However, `unsafe` allows you to "
@@ -2401,37 +2643,29 @@ msgstr ""
"๊ฐ์ ํจ์๋ ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ์ํํ์ง ์์ต๋๋ค."
#: src/why-rust/modern.md:3
-msgid "Rust is built with all the experience gained in the last 40 years."
+msgid "Rust is built with all the experience gained in the last decades."
msgstr ""
-"๋ฌ์คํธ๋ ์ง๋ 40๋
๊ฐ์ ๋ชจ๋ (ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์) ๊ฒฝํ์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค."
+"๋ฌ์คํธ๋ ์ง๋ ์์ญ๋
๊ฐ์ ๋ชจ๋ (ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์) ๊ฒฝํ์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค."
#: src/why-rust/modern.md:5
msgid "Language Features"
msgstr "์ธ์ด์ ํน์ง"
#: src/why-rust/modern.md:7
-#, fuzzy
msgid "Enums and pattern matching."
msgstr "์ด๊ฑฐํ๊ณผ ํจํด ๋งค์นญ."
#: src/why-rust/modern.md:8
-#, fuzzy
msgid "Generics."
msgstr "์ ๋ค๋ฆญ."
#: src/why-rust/modern.md:9
-#, fuzzy
msgid "No overhead FFI."
msgstr "FFI ๋ฐํ์ ์ค๋ฒํค๋ ์์."
#: src/why-rust/modern.md:10
-#, fuzzy
msgid "Zero-cost abstractions."
-msgstr ""
-"_์ญ์ฃผ: FFI: Foreign Function Interface. ํ ์ธ์ด ์ฝ๋๋ฅผ ํธ์ถํ๊ธฐ ์ํ ์ธํฐํ์ด"
-"์ค_\n"
-"\n"
-"์ ๋ก ์ฝ์คํธ ์ถ์ํ."
+msgstr "๋น์ฉ์ด ๋ค์ง ์๋ ์ถ์ํ."
#: src/why-rust/modern.md:12
msgid "Tooling"
@@ -2574,12 +2808,13 @@ msgid "Variable assignment is done with `=`, comparison is done with `==`."
msgstr "๋ณ์ ํ ๋น์ `=`, ๋น๊ต๋ `==`๋ฅผ ์ฌ์ฉํฉ๋๋ค."
#: src/basic-syntax/scalar-types.md:3 src/basic-syntax/compound-types.md:3
+#: src/exercises/day-3/safe-ffi-wrapper.md:16
msgid "Types"
msgstr "ํ์
"
#: src/basic-syntax/scalar-types.md:3 src/basic-syntax/compound-types.md:3
msgid "Literals"
-msgstr "์ค์นผ๋ผ ๋ฆฌํฐ๋ด ๊ฐ"
+msgstr "๋ฆฌํฐ๋ด ๊ฐ"
#: src/basic-syntax/scalar-types.md:5
msgid "Signed integers"
@@ -2590,8 +2825,8 @@ msgid "`i8`, `i16`, `i32`, `i64`, `i128`, `isize`"
msgstr "`i8`, `i16`, `i32`, `i64`, `i128`, `isize`"
#: src/basic-syntax/scalar-types.md:5
-msgid "`-10`, `0`, `1_000`, `123i64`"
-msgstr "`-10`, `0`, `1_000`, `123i64`"
+msgid "`-10`, `0`, `1_000`, `123_i64`"
+msgstr "`-10`, `0`, `1_000`, `123_i64`"
#: src/basic-syntax/scalar-types.md:6
msgid "Unsigned integers"
@@ -2602,8 +2837,8 @@ msgid "`u8`, `u16`, `u32`, `u64`, `u128`, `usize`"
msgstr "`u8`, `u16`, `u32`, `u64`, `u128`, `usize`"
#: src/basic-syntax/scalar-types.md:6
-msgid "`0`, `123`, `10u16`"
-msgstr "`0`, `123`, `10u16`"
+msgid "`0`, `123`, `10_u16`"
+msgstr "`0`, `123`, `10_u16`"
#: src/basic-syntax/scalar-types.md:7
msgid "Floating point numbers"
@@ -2614,8 +2849,8 @@ msgid "`f32`, `f64`"
msgstr "`f32`, `f64`"
#: src/basic-syntax/scalar-types.md:7
-msgid "`3.14`, `-10.0e20`, `2f32`"
-msgstr "`3.14`, `-10.0e20`, `2f32`"
+msgid "`3.14`, `-10.0e20`, `2_f32`"
+msgstr "`3.14`, `-10.0e20`, `2_f32`"
#: src/basic-syntax/scalar-types.md:8
msgid "Strings"
@@ -2626,8 +2861,8 @@ msgid "`&str`"
msgstr "`&str`"
#: src/basic-syntax/scalar-types.md:8
-msgid "`\"foo\"`, `r#\"\\\\\"#`"
-msgstr "`\"foo\"`, `r#\"\\\\\"#`"
+msgid "`\"foo\"`, `\"two\\nlines\"`"
+msgstr "`\"foo\"`, `\"two\\nlines\"`"
#: src/basic-syntax/scalar-types.md:9
msgid "Unicode scalar values"
@@ -2642,59 +2877,96 @@ msgid "`'a'`, `'ฮฑ'`, `'โ'`"
msgstr "`'a'`, `'ฮฑ'`, `'โ'`"
#: src/basic-syntax/scalar-types.md:10
-msgid "Byte strings"
-msgstr "๋ฐ์ดํธ ๋ฌธ์"
-
-#: src/basic-syntax/scalar-types.md:10
-msgid "`&[u8]`"
-msgstr "`&[u8]`"
-
-#: src/basic-syntax/scalar-types.md:10
-msgid "`b\"abc\"`, `br#\" \" \"#`"
-msgstr "`b\"abc\"`, `br#\" \" \"#`"
-
-#: src/basic-syntax/scalar-types.md:11
msgid "Booleans"
msgstr "๋ถ๋ฆฌ์ธ"
-#: src/basic-syntax/scalar-types.md:11
+#: src/basic-syntax/scalar-types.md:10
msgid "`bool`"
msgstr "`bool`"
-#: src/basic-syntax/scalar-types.md:11
+#: src/basic-syntax/scalar-types.md:10
msgid "`true`, `false`"
msgstr "`true`, `false`"
-#: src/basic-syntax/scalar-types.md:13
+#: src/basic-syntax/scalar-types.md:12
msgid "The types have widths as follows:"
msgstr "๊ฐ ํ์
์ ํฌ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:"
-#: src/basic-syntax/scalar-types.md:15
-#, fuzzy
+#: src/basic-syntax/scalar-types.md:14
msgid "`iN`, `uN`, and `fN` are _N_ bits wide,"
-msgstr ""
-"์ ์(`i`) ๋ฐ ๋ถ๋์์ํ(`f`)์ ๋ค์ ์ซ์์ ๊ฐ์ ๋นํธ ์ ์
๋๋ค. (`i8` = 8๋น"
-"ํธ)"
+msgstr "`iN`, `uN`, `fN`์ ๋ชจ๋ _N_๋นํธ ์
๋๋ค."
+
+#: src/basic-syntax/scalar-types.md:15
+msgid "`isize` and `usize` are the width of a pointer,"
+msgstr "`isize` ์ `usize` ๋ ํฌ์ธํฐ์ ๊ฐ์ ํฌ๊ธฐ์
๋๋ค,"
#: src/basic-syntax/scalar-types.md:16
-#, fuzzy
-msgid "`isize` and `usize` are the width of a pointer,"
-msgstr "`isize` ์ `usize` ๋ ํฌ์ธํฐ์ ๊ฐ์ ํฌ๊ธฐ์
๋๋ค."
+msgid "`char` is 32 bits wide,"
+msgstr "`char` 32 ๋นํธ ์
๋๋ค,"
#: src/basic-syntax/scalar-types.md:17
-#, fuzzy
-msgid "`char` is 32 bit wide,"
-msgstr ""
-"_์ญ์ฃผ: 32 ๋นํธ ์์คํ
์์๋ 32 ๋นํธ, 64 ๋นํธ ์์คํ
์์๋ 64 ๋นํธ. C์ `int`"
-"์ ๊ฐ์._"
+msgid "`bool` is 8 bits wide."
+msgstr "`bool`์ 8 ๋นํธ ์
๋๋ค."
-#: src/basic-syntax/scalar-types.md:18
-#, fuzzy
-msgid "`bool` is 8 bit wide."
+#: src/basic-syntax/scalar-types.md:21
+msgid "There are a few syntaxes which are not shown above:"
+msgstr "์์ ํ์๋์ง ์์ ๋ช ๊ฐ์ง ๋ฌธ๋ฒ์ด ์์ต๋๋ค:"
+
+#: src/basic-syntax/scalar-types.md:23
+msgid ""
+"Raw strings allow you to create a `&str` value with escapes disabled: "
+"`r\"\\n\" == \"\\\\n\"`. You can embed double-quotes by using an equal "
+"amount of `#` on either side of the quotes:"
msgstr ""
-"`char` 32 ๋นํธ ์
๋๋ค.\n"
-"\n"
-"`bool`์ 8 ๋นํธ ์
๋๋ค."
+"Raw strings allow you to create a `&str` value with escapes disabled: "
+"`r\"\\n\" == \"\\\\n\"`. You can embed double-quotes by using an equal "
+"amount of `#` on either side of the quotes:"
+
+#: src/basic-syntax/scalar-types.md:27
+msgid ""
+"```rust,editable\n"
+"fn main() {\n"
+" println!(r#\"link\"#);\n"
+" println!(\"link\");\n"
+"}\n"
+"```"
+msgstr ""
+"```rust,editable\n"
+"fn main() {\n"
+" println!(r#\"link\"#);\n"
+" println!(\"link\");\n"
+"}\n"
+"```"
+
+#: src/basic-syntax/scalar-types.md:34
+msgid "Byte strings allow you to create a `&[u8]` value directly:"
+msgstr "Byte strings allow you to create a `&[u8]` value directly:"
+
+#: src/basic-syntax/scalar-types.md:36
+msgid ""
+"```rust,editable\n"
+"fn main() {\n"
+" println!(\"{:?}\", b\"abc\");\n"
+" println!(\"{:?}\", &[97, 98, 99]);\n"
+"}\n"
+"```"
+msgstr ""
+"```rust,editable\n"
+"fn main() {\n"
+" println!(\"{:?}\", b\"abc\");\n"
+" println!(\"{:?}\", &[97, 98, 99]);\n"
+"}\n"
+"```"
+
+#: src/basic-syntax/scalar-types.md:43
+msgid ""
+"All underscores in numbers can be left out, they are for legibility only. So "
+"`1_000` can be written as `1000` (or `10_00`), and `123_i64` can be written "
+"as `123i64`."
+msgstr ""
+"All underscores in numbers can be left out, they are for legibility only. So "
+"`1_000` can be written as `1000` (or `10_00`), and `123_i64` can be written "
+"as `123i64`."
#: src/basic-syntax/compound-types.md:5
msgid "Arrays"
@@ -2770,10 +3042,10 @@ msgstr "๋ฐฐ์ด:"
#: src/basic-syntax/compound-types.md:34
msgid ""
-"Arrays have elements of the same type, `T`, and length, `N`, which is a "
-"compile-time constant. Note that the length of the array is _part of its "
-"type_, which means that `[u8; 3]` and `[u8; 4]` are considered two different "
-"types."
+"A value of the array type `[T; N]` holds `N` (a compile-time constant) "
+"elements of the same type `T`. Note that the length of the array is _part of "
+"its type_, which means that `[u8; 3]` and `[u8; 4]` are considered two "
+"different types."
msgstr ""
"๋ฐฐ์ด์, ๊ฐ์ ํ์
`T`์ ๊ฐ์ด `N`๊ฐ ์๋ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ์ `N`์ ์ปดํ์ผ ํ์์ "
"๊ฒฐ์ ๋ ๊ฐ์ด์ด์ผ ํฉ๋๋ค. ์ด ๊ธธ์ด๋ ํ์
์ ์ผ๋ถ์
๋๋ค. ๋ฐ๋ผ์, `[u8; 3]`์ "
@@ -2828,7 +3100,7 @@ msgid ""
msgstr ""
"๋น์ด์๋ ํํ`()`์ ๋จ์ ํ์
(unit type)์ด๋ผ๊ณ ๋ ํฉ๋๋ค. ์ด๋ ํ์
์ด๋ฉด์ ํด"
"๋น ํ์
์ ์ ์ผํ๋ฉฐ ์ ํจํ ๊ฐ์
๋๋ค. ์ฆ ํ์
๊ณผ ๊ฐ์ด ๋ชจ๋ `()`์
๋๋ค. ์๋ฅผ ๋ค"
-"์ด ํจ์๋ ์์์ ๋ฐํ ๊ฐ์ด ์์์ ๋ํ๋ผ ๋ ์ฌ์ฉํฉ๋๋ค."
+"์ด ํจ์๋ ์์์ ๋ฐํ ๊ฐ์ด ์์์ ๋ํ๋ผ ๋ ์ฌ์ฉํฉ๋๋ค. "
#: src/basic-syntax/compound-types.md:59
msgid ""
@@ -2887,7 +3159,7 @@ msgid ""
msgstr ""
"`mut`๋ก ์ ์ธ๋ ์ฐธ์กฐ๋ ๊ทธ ๋ณ์๊ฐ ์ด์์๋ ๋์ ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค."
-#: src/basic-syntax/references.md:24
+#: src/basic-syntax/references.md:25
msgid ""
"Be sure to note the difference between `let mut ref_x: &i32` and `let ref_x: "
"&mut i32`. The first one represents a mutable reference which can be bound "
@@ -2951,10 +3223,11 @@ msgstr "์ฌ๋ผ์ด์ค๋ ํฐ ์ปฌ๋์
์ ์ผ๋ถ(ํน์ ์ ์ฒด)๋ฅผ ๋ณด์ฌ์ฃผ๋
msgid ""
"```rust,editable\n"
"fn main() {\n"
-" let a: [i32; 6] = [10, 20, 30, 40, 50, 60];\n"
+" let mut a: [i32; 6] = [10, 20, 30, 40, 50, 60];\n"
" println!(\"a: {a:?}\");\n"
"\n"
" let s: &[i32] = &a[2..4];\n"
+"\n"
" println!(\"s: {s:?}\");\n"
"}\n"
"```"
@@ -2969,15 +3242,15 @@ msgstr ""
"}\n"
"```"
-#: src/basic-syntax/slices.md:15
+#: src/basic-syntax/slices.md:16
msgid "Slices borrow data from the sliced type."
msgstr "์ฌ๋ผ์ด์ค๋ ๋ค๋ฅธ(์ฌ๋ผ์ด์ค ๋) ํ์
์ผ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ '๋น๋ ค'์ต๋๋ค."
-#: src/basic-syntax/slices.md:16
-msgid "Question: What happens if you modify `a[3]`?"
-msgstr "์ง๋ฌธ: `a[3]`์ ์์ ํ๋ฉด ๋ฌด์จ ์ผ์ด ์์ด๋ ๊น์?"
+#: src/basic-syntax/slices.md:17
+msgid "Question: What happens if you modify `a[3]` right before printing `s`?"
+msgstr "์ง๋ฌธ: `s`๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ ์ `a[3]`์ ์์ ํ๋ฉด ๋ฌด์จ ์ผ์ด ์์ด๋ ๊น์?"
-#: src/basic-syntax/slices.md:20
+#: src/basic-syntax/slices.md:21
msgid ""
"We create a slice by borrowing `a` and specifying the starting and ending "
"indexes in brackets."
@@ -2985,7 +3258,7 @@ msgstr ""
"์ฌ๋ผ์ด์ค๋ ์ฐ์ `a`๋ฅผ ๋น๋ฆฐ๋ค์, ์์๊ณผ ๋ ์ธ๋ฑ์ค๋ฅผ ๋ธ๋ํท(`[]`)์์ ์ง์ ํด์ "
"๋ง๋ญ๋๋ค."
-#: src/basic-syntax/slices.md:22
+#: src/basic-syntax/slices.md:23
msgid ""
"If the slice starts at index 0, Rustโs range syntax allows us to drop the "
"starting index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are "
@@ -2994,7 +3267,7 @@ msgstr ""
"์ฌ๋ผ์ด์ค๊ฐ ์ธ๋ฑ์ค 0๋ถํฐ ์์ํ๋ค๋ฉด ์์ ์ธ๋ฑ์ค๋ ์๋ต ๊ฐ๋ฅํฉ๋๋ค. ์ฆ `&a[0.."
"a.len()]`์ `&a[..a.len()]` ๋ ๋์ผํฉ๋๋ค."
-#: src/basic-syntax/slices.md:24
+#: src/basic-syntax/slices.md:25
msgid ""
"The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are "
"identical."
@@ -3002,12 +3275,12 @@ msgstr ""
"๋ง์ง๋ง ์ธ๋ฑ์ค๋ ์๋ต ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋์ `&a[2..a.len()]` ์ `&a[2..]`๋ ๋์ผ"
"ํฉ๋๋ค."
-#: src/basic-syntax/slices.md:26
+#: src/basic-syntax/slices.md:27
msgid ""
"To easily create a slice of the full array, we can therefore use `&a[..]`."
msgstr "๋ฐ๋ผ์ ์ ์ฒด ๋ฐฐ์ด์ ๋ํ ์ฌ๋ผ์ด์ค๋ `&a[..]`๊ฐ ๋ฉ๋๋ค."
-#: src/basic-syntax/slices.md:28
+#: src/basic-syntax/slices.md:29
msgid ""
"`s` is a reference to a slice of `i32`s. Notice that the type of `s` "
"(`&[i32]`) no longer mentions the array length. This allows us to perform "
@@ -3017,25 +3290,28 @@ msgstr ""
"๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋น ์ ธ์์์ ์ฃผ๋ชฉํ์๊ธฐ ๋ฐ๋๋๋ค. ์ฆ, ์ฌ๋ผ์ด์ค๋ฅผ ์ด์ฉํ๋ฉด ๋ค์ํ "
"๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค."
-#: src/basic-syntax/slices.md:30
+#: src/basic-syntax/slices.md:31
msgid ""
"Slices always borrow from another object. In this example, `a` has to remain "
"'alive' (in scope) for at least as long as our slice. "
msgstr ""
"์ฌ๋ผ์ด์ค๋ ํญ์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก๋ถํฐ '๋น๋ ค' ์ต๋๋ค. ์ด ์์์์ ๊ฐ์ฒด `a`๋ ์ฌ๋ผ์ด"
-"์ค `s`๋ณด๋ค ๋ ์ค๋ ์ด์ ์์ด์ผ๋ง ํฉ๋๋ค."
+"์ค `s`๋ณด๋ค ๋ ์ค๋ ์ด์ ์์ด์ผ๋ง ํฉ๋๋ค. "
-#: src/basic-syntax/slices.md:32
+#: src/basic-syntax/slices.md:33
msgid ""
"The question about modifying `a[3]` can spark an interesting discussion, but "
-"the answer is that for memory safety reasons you cannot do it through `a` "
-"after you created a slice, but you can read the data from both `a` and `s` "
-"safely. More details will be explained in the borrow checker section."
+"the answer is that for memory safety reasons you cannot do it through `a` at "
+"this point in the execution, but you can read the data from both `a` and `s` "
+"safely. It works before you created the slice, and again after the "
+"`println`, when the slice is no longer used. More details will be explained "
+"in the borrow checker section."
msgstr ""
"`a[3]`์ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋๋ ์ง๋ฌธ์ ์ข์ ์ง๋ฌธ์
๋๋ค. ์ฌ๊ธฐ์ ๋ํ ๋ต์ `a`์ "
"`s`๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์๋ ์์ง๋ง ์์ ํ ์๋ ์์ผ๋ฉฐ, ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ "
-"์ํด์๋ผ๋ ๊ฒ์
๋๋ค. ์ ๊ทธ๋ฐ์ง์ ๋ํ ์ข๋ ๊ตฌ์ฒด์ ์ธ ๋ต์ ๋น๋ฆผ ๊ฒ์ฌ ๋ถ๋ถ์์ "
-"์์ธํ ์ค๋ช
ํฉ๋๋ค."
+"์ํด์๋ผ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฐ๋ฐ, ์ฌ๋ผ์ด์ค๊ฐ ์ฌ์ฉ๋์ง ์์ ๋, ์ฆ ์ฌ๋ผ์ด์ค๋ฅผ ๋ง๋ค"
+"๊ธฐ ์ ์ด๋, ํน์ `println`์ดํ์๋ `a[3]`์ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์ ๊ทธ๋ฐ์ง์ ๋"
+"ํ ์ข๋ ๊ตฌ์ฒด์ ์ธ ๋ต์ ๋น๋ฆผ ๊ฒ์ฌ ๋ถ๋ถ์์ ์์ธํ ์ค๋ช
ํฉ๋๋ค."
#: src/basic-syntax/string-slices.md:1
msgid "`String` vs `str`"
@@ -3095,9 +3371,9 @@ msgid ""
"encoded string data stored in a block of memory. String literals "
"(`โHelloโ`), are stored in the programโs binary."
msgstr ""
-"`&str`์ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค์ ๋ถ๋ณ ์ฐธ์กฐ์
๋๋ค. ๋ฌ์คํธ์์ ๋ฌธ์์ด์ UTF-8๋ก ์ธ์ฝ"
-"๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฌธ์์ด ๋ฆฌํฐ๋ด(`\"Hello\"`)์ ํ๋ก๊ทธ๋จ ๋ฐ์ด๋๋ฆฌ์ ์ "
-"์ฅ๋ฉ๋๋ค."
+"`&str`์ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค์
๋๋ค. ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๋ UTF-8๋ก ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด ๋ฐ"
+"์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฌธ์์ด ๋ฆฌํฐ๋ด(`\"Hello\"`)์ ํ๋ก๊ทธ๋จ ๋ฐ์ด๋๋ฆฌ์ ์ ์ฅ๋ฉ๋"
+"๋ค."
#: src/basic-syntax/string-slices.md:30
msgid ""
@@ -3145,7 +3421,7 @@ msgstr ""
"ํจํ ๋ฌธ์์ด์ ๊ฐ๋ฆฌํจ๋ค๋ ์ ์ด ๋ค๋ฆ
๋๋ค. ๋ฌ์คํธ์ `String`์ C++์ `std::"
"string` ๊ณผ ๋๋ต ๊ฑฐ์ ๋์ผํฉ๋๋ค. (์ฃผ์ ์ฐจ์ด์ : ๋ฌ์คํธ์ `String`์ UTF-8 ์ธ์ฝ"
"๋ฉ ๋ฐ์ดํธ๋ง ํฌํจํ ์ ์์ผ๋ฉฐ ์์ ๋ฌธ์์ด ์ต์ ํ(small-string optimization)๋ "
-"์ฌ์ฉํ์ง ์์ต๋๋ค."
+"๊ตฌํํ์ง ์์ต๋๋ค."
#: src/basic-syntax/functions.md:3
msgid ""
@@ -3158,59 +3434,56 @@ msgstr ""
msgid ""
"```rust,editable\n"
"fn main() {\n"
-" fizzbuzz_to(20); // Defined below, no forward declaration needed\n"
+" print_fizzbuzz_to(20);\n"
"}\n"
"\n"
-"fn is_divisible_by(lhs: u32, rhs: u32) -> bool {\n"
-" if rhs == 0 {\n"
-" return false; // Corner case, early return\n"
+"fn is_divisible(n: u32, divisor: u32) -> bool {\n"
+" if divisor == 0 {\n"
+" return false;\n"
" }\n"
-" lhs % rhs == 0 // The last expression in a block is the return "
-"value\n"
+" n % divisor == 0\n"
"}\n"
"\n"
-"fn fizzbuzz(n: u32) -> () { // No return value means returning the unit "
-"type `()`\n"
-" match (is_divisible_by(n, 3), is_divisible_by(n, 5)) {\n"
-" (true, true) => println!(\"fizzbuzz\"),\n"
-" (true, false) => println!(\"fizz\"),\n"
-" (false, true) => println!(\"buzz\"),\n"
-" (false, false) => println!(\"{n}\"),\n"
+"fn fizzbuzz(n: u32) -> String {\n"
+" let fizz = if is_divisible(n, 3) { \"fizz\" } else { \"\" };\n"
+" let buzz = if is_divisible(n, 5) { \"buzz\" } else { \"\" };\n"
+" if fizz.is_empty() && buzz.is_empty() {\n"
+" return format!(\"{n}\");\n"
" }\n"
+" format!(\"{fizz}{buzz}\")\n"
"}\n"
"\n"
-"fn fizzbuzz_to(n: u32) { // `-> ()` is normally omitted\n"
+"fn print_fizzbuzz_to(n: u32) {\n"
" for i in 1..=n {\n"
-" fizzbuzz(i);\n"
+" println!(\"{}\", fizzbuzz(i));\n"
" }\n"
"}\n"
"```"
msgstr ""
"```rust,editable\n"
"fn main() {\n"
-" fizzbuzz_to(20); // C/C++ ์ ๋ฌ๋ฆฌ ํธ์ถ๋ถ ํ๋จ์ ์ ์ํด๋ ๋ฌธ์ ์์ต๋"
-"๋ค.\n"
+" print_fizzbuzz_to(20);\n"
"}\n"
"\n"
-"fn is_divisible_by(lhs: u32, rhs: u32) -> bool {\n"
-" if rhs == 0 {\n"
-" return false; // Corner case์ด๋ฏ๋ก ๋ฐํํฉ๋๋ค.\n"
+"fn is_divisible(n: u32, divisor: u32) -> bool {\n"
+" if divisor == 0 {\n"
+" return false;\n"
" }\n"
-" lhs % rhs == 0 // ๋ง์ง๋ง ํํ์์ ๋ฐํ ๊ฐ์
๋๋ค.(;์์์ ์ฃผ๋ชฉ)\n"
+" n % divisor == 0\n"
"}\n"
"\n"
-"fn fizzbuzz(n: u32) -> () { // `()`๋ ๋ฐํ๊ฐ์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.\n"
-" match (is_divisible_by(n, 3), is_divisible_by(n, 5)) {\n"
-" (true, true) => println!(\"fizzbuzz\"),\n"
-" (true, false) => println!(\"fizz\"),\n"
-" (false, true) => println!(\"buzz\"),\n"
-" (false, false) => println!(\"{n}\"),\n"
+"fn fizzbuzz(n: u32) -> String {\n"
+" let fizz = if is_divisible(n, 3) { \"fizz\" } else { \"\" };\n"
+" let buzz = if is_divisible(n, 5) { \"buzz\" } else { \"\" };\n"
+" if fizz.is_empty() && buzz.is_empty() {\n"
+" return format!(\"{n}\");\n"
" }\n"
+" format!(\"{fizz}{buzz}\")\n"
"}\n"
"\n"
-"fn fizzbuzz_to(n: u32) { // `-> ()` ๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ตํฉ๋๋ค.\n"
+"fn print_fizzbuzz_to(n: u32) {\n"
" for i in 1..=n {\n"
-" fizzbuzz(i);\n"
+" println!(\"{}\", fizzbuzz(i));\n"
" }\n"
"}\n"
"```"
@@ -3220,8 +3493,8 @@ msgid ""
"We refer in `main` to a function written below. Neither forward declarations "
"nor headers are necessary. "
msgstr ""
-"`main` ํจ์์์ ๊ทธ ๋ค์์ ์ค๋ ํจ์๋ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋จ์ ์ ์ธ์ด๋ "
-"ํค๋ ๊ฐ์๊ฑด ํ์ ์์ต๋๋ค."
+"`main` ํจ์์์ ๊ทธ ๋ค์์ ์ค๋ ํจ์๋ค์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฏธ๋ฆฌ ์ ์ธํ๊ธฐ"
+"(forward declaration)๋ ํค๋ ๊ฐ์๊ฑด ํ์ ์์ต๋๋ค. "
#: src/basic-syntax/functions.md:36
msgid ""
@@ -3250,50 +3523,97 @@ msgstr ""
#: src/basic-syntax/functions.md:39
msgid ""
-"The range expression in the `for` loop in `fizzbuzz_to()` contains `=n`, "
-"which causes it to include the upper bound."
+"The range expression in the `for` loop in `print_fizzbuzz_to()` contains "
+"`=n`, which causes it to include the upper bound."
msgstr ""
"`fizzbuzz_to()`ํจ์ ๋ด `for` ๋ฐ๋ชฉ๋ฌธ์ ๋ฒ์ ํํ์ ์ค `=n`์ n๊น์ง ํฌํจํ๋ค๋ "
"์๋ฏธ์
๋๋ค."
-#: src/basic-syntax/functions.md:40
+#: src/basic-syntax/rustdoc.md:3
msgid ""
-"The `match` expression in `fizzbuzz()` is doing a lot of work. It is "
-"expanded below to show what is happening."
-msgstr ""
-"`fizzbuzz()`ํจ์์ `match` ํํ์์ ๋ง์ ์ผ์ ํฉ๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ์กฐ"
-"๊ธ ๋ ์ดํดํ๊ธฐ ์ฝ๋๋ก ์๋ ์ฝ๋๋ฅผ ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค."
+"All language items in Rust can be documented using special `///` syntax."
+msgstr "Rust์ ์์ดํ
(item)์ `///` ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ํํ ์ ์์ต๋๋ค."
-#: src/basic-syntax/functions.md:42
-msgid "(Type annotations added for clarity, but they can be elided.)"
-msgstr "(๋ช
ํํ ์ค๋ช
์ ์ํด ํ์
์ด ๋ช
์์ ์ผ๋ก ์ ์ธ ๋์์ง๋ง ์๋ต ๊ฐ๋ฅํฉ๋๋ค.)"
-
-#: src/basic-syntax/functions.md:44
+#: src/basic-syntax/rustdoc.md:5
msgid ""
-"```rust,ignore\n"
-"let by_3: bool = is_divisible_by(n, 3);\n"
-"let by_5: bool = is_divisible_by(n, 5);\n"
-"let by_35: (bool, bool) = (by_3, by_5);\n"
-"match by_35 {\n"
-" // ...\n"
+"```rust,editable\n"
+"/// Determine whether the first argument is divisible by the second "
+"argument.\n"
+"///\n"
+"/// If the second argument is zero, the result is false.\n"
+"fn is_divisible_by(lhs: u32, rhs: u32) -> bool {\n"
+" if rhs == 0 {\n"
+" return false; // Corner case, early return\n"
+" }\n"
+" lhs % rhs == 0 // The last expression in a block is the return "
+"value\n"
+"}\n"
"```"
msgstr ""
-"```rust,ignore\n"
-"let by_3: bool = is_divisible_by(n, 3);\n"
-"let by_5: bool = is_divisible_by(n, 5);\n"
-"let by_35: (bool, bool) = (by_3, by_5);\n"
-"match by_35 {\n"
-" // ...\n"
+"```rust,editable\n"
+"/// ์ฒซ ๋ฒ์งธ ์ธ์๊ฐ ๋ ๋ฒ์งธ ์ธ์๋ก ๋๋ ์ง ์ ์๋์ง ๊ฒฐ์ ํฉ๋๋ค.\n"
+"///\n"
+"/// ๋ ๋ฒ์งธ ์ธ์๊ฐ 0์ด๋ฉด ๊ฒฐ๊ณผ๋ false์
๋๋ค.\n"
+"fn is_divisible_by(lhs: u32, rhs: u32) -> bool {\n"
+" if rhs == 0 {\n"
+" return false; // Corner case, early return\n"
+" }\n"
+" lhs % rhs == 0 // ๋ธ๋ก ์์ ๋ง์ง๋ง ํํ์์ ๋ฐํ๊ฐ์
๋๋ค\n"
+"}\n"
"```"
+#: src/basic-syntax/rustdoc.md:17
+msgid ""
+"The contents are treated as Markdown. All published Rust library crates are "
+"automatically documented at [`docs.rs`](https://docs.rs) using the [rustdoc]"
+"(https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is "
+"idiomatic to document all public items in an API using this pattern."
+msgstr ""
+"์ฝํ
์ธ ๋ ๋งํฌ๋ค์ด์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ๊ฒ์๋ ๋ชจ๋ Rust ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๋ ์ดํธ๋ "
+"[rustdoc](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) ๋๊ตฌ๋ฅผ ์ฌ์ฉ"
+"ํ์ฌ [`docs.rs`](https://docs.rs)์ ์๋์ผ๋ก ๋ฌธ์ํ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก API์ "
+"๋ชจ๋ ๊ณต๊ฐ ํญ๋ชฉ์ ์ด ํจํด์ ์ฌ์ฉํ์ฌ ๋ฌธ์ํ๋ฉ๋๋ค."
+
+#: src/basic-syntax/rustdoc.md:24
+msgid ""
+"Show students the generated docs for the `rand` crate at [`docs.rs/rand`]"
+"(https://docs.rs/rand)."
+msgstr ""
+"[`docs.rs/rand`](https://docs.rs/rand)์์ `rand` ํฌ๋ ์ดํธ์ฉ์ผ๋ก ์์ฑ๋ ๋ฌธ์"
+"๋ฅผ ๋ณด์ฌ์ค๋๋ค."
+
+#: src/basic-syntax/rustdoc.md:27
+msgid ""
+"This course does not include rustdoc on slides, just to save space, but in "
+"real code they should be present."
+msgstr ""
+"์ด ์ฌ๋ผ์ด๋์ ์์ ์ฝ๋๋ ๋ฌธ์ํ ์ฃผ์์ด ์๋ต๋์ด ์์ง๋ง, ์ค์ ์ฝ๋๋ผ๋ฉด ๋ฌธ์"
+"ํ ์ฃผ์์ ๋ฐ๋์ ์จ์ผ ํฉ๋๋ค."
+
+#: src/basic-syntax/rustdoc.md:30
+msgid ""
+"Inner doc comments are discussed later (in the page on modules) and need not "
+"be addressed here."
+msgstr ""
+"๋ฌธ์ ๋ด๋ถ ์ฃผ์ ๋ชจ๋ ํ์ด์ง ๋ท๋ถ๋ถ์์ ๋ค๋ฃจ๋ฉฐ ์ฌ๊ธฐ์ ๋ค๋ฃจ์ง ์์๋ ๋ฉ๋๋ค."
+
+#: src/basic-syntax/rustdoc.md:33
+msgid ""
+"Rustdoc comments can contain code snippets that we can run and test using "
+"`cargo test`. We will discuss these tests in the [Testing section](../"
+"testing/doc-tests.html)."
+msgstr ""
+"๋ฌธ์ํ ์ฃผ์์ ์ฝ๋๋ฅผ ํฌํจํ ์๋ ์์ผ๋ฉฐ, ์ด ์ฝ๋๋ `cargo test`๋ฅผ ํตํด ํ
์คํธ"
+"๋ก ๋์ํ ์๋ ์์ต๋๋ค. [ํ
์คํธ](../testing/doc-tests.html)์์ ๋ ์์ธํ ๋ค"
+"๋ฃจ๊ฒ ์ต๋๋ค."
+
#: src/basic-syntax/methods.md:3
msgid ""
-"Rust has methods, they are simply functions that are associated with a "
-"particular type. The first argument of a method is an instance of the type "
-"it is associated with:"
+"Methods are functions associated with a type. The `self` argument of a "
+"method is an instance of the type it is associated with:"
msgstr ""
-"๋ฌ์คํธ์ ๋ฉ์๋๋ ํน์ ํ์
๊ณผ ์ฐ๊ฒฐ๋ ํจ์์
๋๋ค. ๋ฉ์๋์ ์ฒซ๋ฒ์งธ ์ธ์์ ํ์
"
-"์ด ๋ฐ๋ก ๊ทธ ๋ฉ์๋๊ฐ ์ฐ๊ฒฐ๋ ํ์
์
๋๋ค:"
+"๋ฉ์๋๋ ํน์ ํ์
๊ณผ ์ฐ๊ฒฐ๋ ํจ์์
๋๋ค. ๋ฉ์๋์ `self` ์ธ์๊ฐ ๊ทธ ๋ฉ์๋๊ฐ ์ฐ"
+"๊ฒฐ๋ ์ธ์คํด์ค์ ํ์
์
๋๋ค:"
#: src/basic-syntax/methods.md:6
msgid ""
@@ -3351,6 +3671,45 @@ msgid ""
"class."
msgstr "์ค๋๊ณผ ๋ด์ผ ๊ฐ์์์ ๋ ๋ง์ ๋ฉ์๋ ์ฌ์ฉ๋ฒ์ ๋ค๋ฃฐ ๊ฒ์
๋๋ค."
+#: src/basic-syntax/methods.md:34
+msgid "Add a static method called `Rectangle::new` and call this from `main`:"
+msgstr "`Rectangle::new` ์์ฑ์๋ฅผ ์ถ๊ฐํ๊ณ ์ด๋ฅผ `main`์์ ํธ์ถํฉ๋๋ค:"
+
+#: src/basic-syntax/methods.md:36
+msgid ""
+"```rust,editable,compile_fail\n"
+"fn new(width: u32, height: u32) -> Rectangle {\n"
+" Rectangle { width, height }\n"
+"}\n"
+"```"
+msgstr ""
+"```rust,editable,compile_fail\n"
+"fn new(width: u32, height: u32) -> Rectangle {\n"
+" Rectangle { width, height }\n"
+"}\n"
+"```"
+
+#: src/basic-syntax/methods.md:42
+msgid ""
+"While _technically_, Rust does not have custom constructors, static methods "
+"are commonly used to initialize structs (but don't have to). The actual "
+"constructor, `Rectangle { width, height }`, could be called directly. See "
+"the [Rustnomicon](https://doc.rust-lang.org/nomicon/constructors.html)."
+msgstr ""
+"\\_๊ธฐ์ ์ _์ผ๋ก ์ด์ผ๊ธฐ ํ์๋ฉด, ๋ฌ์คํธ๋ ์ปค์คํ
์์ฑ์๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ์ "
+"์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ตฌ์กฐ์ฒด๋ฅผ ์ด๊ธฐํ ํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์
๋๋ค (๋ฌผ๋ก ์ด๊ฒ"
+"์ด ๊ฐ์ ๋์ง๋ ์์ต๋๋ค). ์ง์ง ์์ฑ์์ธ `Rectangle { width, height }`๋ฅผ ์ง์ "
+"ํธ์ถํ ์๋ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ [Rustnomicon](https://doc.rust-lang.org/"
+"nomicon/constructors.html)์ ์ฐธ์กฐํ์ธ์."
+
+#: src/basic-syntax/methods.md:45
+msgid ""
+"Add a `Rectangle::square(width: u32)` constructor to illustrate that such "
+"static methods can take arbitrary parameters."
+msgstr ""
+"`Rectangle::square(width: u32)` ์์ฑ์๋ฅผ ์ถ๊ฐํ์ฌ ์์ฑ์๊ฐ ์์์ ๋งค๊ฐ๋ณ์๋ฅผ "
+"์ฌ์ฉํ ์ ์์์ ๋ณด์
์๋ค."
+
#: src/basic-syntax/functions-interlude.md:1
msgid "Function Overloading"
msgstr "(ํจ์) ์ค๋ฒ๋ก๋ฉ"
@@ -3361,7 +3720,7 @@ msgstr "์ค๋ฒ๋ก๋ฉ์ ์ง์๋์ง ์์ต๋๋ค:"
#: src/basic-syntax/functions-interlude.md:5
msgid "Each function has a single implementation:"
-msgstr "๊ฐ๋ณํจ์๋ ๋จ์ผ ๊ตฌํ๋ง ๊ฐ์ต๋๋ค."
+msgstr "๊ฐ๋ณํจ์๋ ๋จ์ผ ๊ตฌํ๋ง ๊ฐ์ต๋๋ค:"
#: src/basic-syntax/functions-interlude.md:6
msgid "Always takes a fixed number of parameters."
@@ -3373,11 +3732,11 @@ msgstr "ํ๋ผ๋งคํฐ๋ค์ ํ์
์ ํญ์ ๊ณ ์ ๋์ด ์์ต๋๋ค."
#: src/basic-syntax/functions-interlude.md:8
msgid "Default values are not supported:"
-msgstr "ํ๋ผ๋งคํฐ์ ๊ธฐ๋ณธ ๊ฐ์ ์ง์๋์ง ์์ต๋๋ค."
+msgstr "ํ๋ผ๋งคํฐ์ ๊ธฐ๋ณธ ๊ฐ์ ์ง์๋์ง ์์ต๋๋ค:"
#: src/basic-syntax/functions-interlude.md:9
msgid "All call sites have the same number of arguments."
-msgstr "๋ชจ๋ ํธ์ถ๋ถ์์๋ ๋์ผํ ์์ ์ธ์๋ฅผ ์ค์ ํด์ผํฉ๋๋ค. "
+msgstr "๋ชจ๋ ํธ์ถ๋ถ์์๋ ๋์ผํ ์์ ์ธ์๋ฅผ ์ค์ ํด์ผํฉ๋๋ค."
#: src/basic-syntax/functions-interlude.md:10
msgid "Macros are sometimes used as an alternative."
@@ -3464,7 +3823,10 @@ msgstr ""
#: src/exercises/day-1/morning.md:22 src/exercises/day-1/afternoon.md:11
#: src/exercises/day-2/morning.md:11 src/exercises/day-2/afternoon.md:7
-#: src/exercises/day-3/morning.md:7 src/exercises/day-4/morning.md:12
+#: src/exercises/day-3/morning.md:7 src/exercises/bare-metal/morning.md:7
+#: src/exercises/bare-metal/afternoon.md:7
+#: src/exercises/concurrency/morning.md:12
+#: src/exercises/concurrency/afternoon.md:13
msgid ""
"After looking at the exercises, you can look at the \\[solutions\\] provided."
msgstr ""
@@ -3495,6 +3857,18 @@ msgid ""
"}\n"
"```"
msgstr ""
+"```rust,editable,compile_fail\n"
+"fn multiply(x: i16, y: i16) -> i16 {\n"
+" x * y\n"
+"}\n"
+"\n"
+"fn main() {\n"
+" let x: i8 = 15;\n"
+" let y: i16 = 1000;\n"
+"\n"
+" println!(\"{x} * {y} = {}\", multiply(x, y));\n"
+"}\n"
+"```"
#: src/exercises/day-1/implicit-conversions.md:19
msgid ""
@@ -3571,6 +3945,9 @@ msgid ""
"let array = [10, 20, 30];\n"
"```"
msgstr ""
+"```rust\n"
+"let array = [10, 20, 30];\n"
+"```"
#: src/exercises/day-1/for-loops.md:9
msgid ""
@@ -3587,6 +3964,12 @@ msgid ""
"}\n"
"```"
msgstr ""
+"```rust,editable\n"
+"fn main() {\n"
+" let array = [10, 20, 30];\n"
+" println!(\"array: {array:?}\");\n"
+"}\n"
+"```"
#: src/exercises/day-1/for-loops.md:18
msgid ""
@@ -3613,6 +3996,22 @@ msgid ""
"}\n"
"```"
msgstr ""
+"```rust,editable\n"
+"fn main() {\n"
+" let array = [10, 20, 30];\n"
+" print!(\"Iterating over array:\");\n"
+" for n in array {\n"
+" print!(\" {n}\");\n"
+" }\n"
+" println!();\n"
+"\n"
+" print!(\"Iterating over range:\");\n"
+" for i in 0..3 {\n"
+" print!(\" {}\", array[i]);\n"
+" }\n"
+" println!();\n"
+"}\n"
+"```"
#: src/exercises/day-1/for-loops.md:38
msgid ""
@@ -3631,6 +4030,11 @@ msgid ""
" โโฃ7 8 9โฆโ โฃ3 6 9โฆ\n"
"```"
msgstr ""
+"```bob\n"
+" โโก1 2 3โคโ โก1 4 7โค\n"
+"\"transpose\"โโข4 5 6โฅโ \"==\"โข2 5 8โฅ\n"
+" โโฃ7 8 9โฆโ โฃ3 6 9โฆ\n"
+"```"
#: src/exercises/day-1/for-loops.md:47
msgid "Hard-code both functions to operate on 3 ร 3 matrices."
@@ -3767,14 +4171,6 @@ msgstr ""
"ํ์
์ถ๋ก ์ ๋๋ถ์ `i32`๋ ์๋ต ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ์๊ฐ ์งํ๋ ์๋ก ์๋ต ๊ฐ๋ฅํ ๋ถ"
"๋ถ์ ์ ์ ์๋ตํ ๊ฒ์
๋๋ค."
-#: src/basic-syntax/variables.md:18
-msgid ""
-"Note that since `println!` is a macro, `x` is not moved, even using the "
-"function like syntax of `println!(\"x: {}\", x)`"
-msgstr ""
-"`println!(\"x: {}\", x)`๋ ํจ์ ํธ์ถ ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋งคํฌ๋ก ํธ์ถ์ด๋ฉฐ `x`"
-"๋ ์ด๋๋์ง ์์ต๋๋ค."
-
#: src/basic-syntax/type-inference.md:3
msgid "Rust will look at how the variable is _used_ to determine the type:"
msgstr "๋ฌ์คํธ๋ ๋ณ์๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง๋ฅผ ๋ณด๊ณ ๊ทธ ๋ณ์์ ํ์
์ ์ถ๋ก ํฉ๋๋ค:"
@@ -3879,30 +4275,44 @@ msgstr ""
#: src/basic-syntax/type-inference.md:46
msgid ""
"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator."
-"html#method.collect) relies on `FromIterator`, which [`HashSet`](https://doc."
-"rust-lang.org/std/iter/trait.FromIterator.html) implements."
+"html#method.collect) relies on [`FromIterator`](https://doc.rust-lang.org/"
+"std/iter/trait.FromIterator.html), which [`HashSet`](https://doc.rust-lang."
+"org/std/collections/struct.HashSet.html#impl-FromIterator%3CT%3E-for-"
+"HashSet%3CT,+S%3E) implements."
msgstr ""
"[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator."
-"html#method.collect)๋ [`HashSet`](https://doc.rust-lang.org/std/iter/trait."
-"FromIterator.html)์ ๊ตฌํํ `FromIterator`์ ์์กดํฉ๋๋ค."
+"html#method.collect)๋ [`HashSet`](https://doc.rust-lang.org/std/collections/"
+"struct.HashSet.html#impl-FromIterator%3CT%3E-for-HashSet%3CT,+S%3E)์ ๊ตฌํํ "
+"[`FromIterator`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html)"
+"์ ์์กดํฉ๋๋ค."
#: src/basic-syntax/static-and-const.md:1
msgid "Static and Constant Variables"
msgstr "์ ์ ๋ณ์(static)๊ณผ ์์(const)"
#: src/basic-syntax/static-and-const.md:3
-msgid "Global state is managed with static and constant variables."
-msgstr "ํ๋ก๊ทธ๋จ์ ๊ธ๋ก๋ฒ ์ํ๋ ๊ฒฐ๊ตญ ์ ์ ๋ณ์์ ์์๋ก ํํ๋ฉ๋๋ค."
+msgid ""
+"Static and constant variables are two different ways to create globally-"
+"scoped values that cannot be moved or reallocated during the execution of "
+"the program. "
+msgstr ""
+"์ ์ ๋ณ์์ ์์๋ ์ ์ญ ์ค์ฝํ์์ ๊ฐ์ ์์ฑํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์
๋๋ค. ์ ์ญ ์ค"
+"์ฝํ์ ์์ฑ๋ ๊ฐ์ ํ๋ก๊ทธ๋จ ์ํ ๋์ค์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ด๋๋์ง ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ "
+"์์์ ๊ทธ ์์น๊ฐ ๋ณํ์ง ์์ต๋๋ค. "
-#: src/basic-syntax/static-and-const.md:5
+#: src/basic-syntax/static-and-const.md:6
msgid "`const`"
msgstr "์์(`const`)"
-#: src/basic-syntax/static-and-const.md:7
-msgid "You can declare compile-time constants:"
-msgstr "์ปดํ์ผ ์ ๊ฐ์ด ์ ํด์ง๋ ์์๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค:"
+#: src/basic-syntax/static-and-const.md:8
+msgid ""
+"Constant variables are evaluated at compile time and their values are "
+"inlined wherever they are used:"
+msgstr ""
+"์์๋ ์ปดํ์ผ ํ ๋ ๊ทธ ๊ฐ์ด ์ ํด์ง๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ์ ๊ทธ ์์๊ฐ ์ฌ์ฉ๋๋ ๋ชจ"
+"๋ ๋ถ๋ถ์์ ์ธ๋ผ์ธ ๋ฉ๋๋ค:"
-#: src/basic-syntax/static-and-const.md:9
+#: src/basic-syntax/static-and-const.md:11
msgid ""
"```rust,editable\n"
"const DIGEST_SIZE: usize = 3;\n"
@@ -3942,23 +4352,36 @@ msgstr ""
"}\n"
"```"
-#: src/basic-syntax/static-and-const.md:27
+#: src/basic-syntax/static-and-const.md:29
msgid ""
-"According the the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-"
-"const-vs-static.html) these are inlined upon use."
+"According to the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-"
+"vs-static.html) these are inlined upon use."
msgstr ""
"[Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static.html)"
"์ ๋ฐ๋ฅด๋ฉด ์์๋, ๊ทธ ์์๊ฐ ์ฌ์ฉ๋๋ ๊ณณ์ ์ธ๋ผ์ธ ๋ฉ๋๋ค."
-#: src/basic-syntax/static-and-const.md:29
+#: src/basic-syntax/static-and-const.md:31
+msgid ""
+"Only functions marked `const` can be called at compile time to generate "
+"`const` values. `const` functions can however be called at runtime."
+msgstr ""
+"`const` ๊ฐ์ ์์ฑํ ๋์๋ `const`๋ก ๋งํน๋ ํจ์๋ง์ด ํธ์ถ ๊ฐ๋ฅํ๋ฉฐ, ์ด ํจ์๋ค"
+"์ ์ปดํ์ผ ์์ ํธ์ถ์ด ๋ฉ๋๋ค. ๋ฌผ๋ก `const`ํจ์๋ค์ ๋ฐํ์์ ํธ์ถํ๋ ๊ฒ๋ ๊ฐ"
+"๋ฅํฉ๋๋ค."
+
+#: src/basic-syntax/static-and-const.md:33
msgid "`static`"
msgstr "์ ์ ๋ณ์(`static`)"
-#: src/basic-syntax/static-and-const.md:31
-msgid "You can also declare static variables:"
-msgstr "๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ ๋ณ์๋ ์ ์ธํ ์ ์์ต๋๋ค:"
+#: src/basic-syntax/static-and-const.md:35
+msgid ""
+"Static variables will live during the whole execution of the program, and "
+"therefore will not move:"
+msgstr ""
+"์ ์ ๋ณ์๋ ํ๋ก๊ทธ๋จ์ด ์ํ๋๋ ๋์ ์ ์ง๊ฐ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ค๋ฅธ ๋ณ์๋ก ์ด๋"
+"(move)๋์ง ์์ต๋๋ค:"
-#: src/basic-syntax/static-and-const.md:33
+#: src/basic-syntax/static-and-const.md:37
msgid ""
"```rust,editable\n"
"static BANNER: &str = \"Welcome to RustOS 3.14\";\n"
@@ -3976,37 +4399,60 @@ msgstr ""
"}\n"
"```"
-#: src/basic-syntax/static-and-const.md:41
+#: src/basic-syntax/static-and-const.md:45
msgid ""
"As noted in the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-"
"vs-static.html), these are not inlined upon use and have an actual "
-"associated memory location. This is useful for unsafe and embedded code, "
-"and the variable lives through the entirety of the program execution."
+"associated memory location. This is useful for unsafe and embedded code, "
+"and the variable lives through the entirety of the program execution. When a "
+"globally-scoped value does not have a reason to need object identity, "
+"`const` is generally preferred."
msgstr ""
"[Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-vs-static.html)์"
"์ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด, ์ ์ ๋ณ์๋ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๋ฉฐ, ์ธ๋ผ์ธ ๋์ง ์"
"์ต๋๋ค. ์ ์ ๋ณ์๋ ์์ ํ์ง ์์(unsafe) ๋ฌ์คํธ์ ์๋ฒ ๋๋ ์์คํ
์ฉ ์ฝ๋์"
-"์ ์ ์ฉํฉ๋๋ค. ์ด๋ค์ ์๋ช
์ ํ๋ก๊ทธ๋จ์ด ์ํ๋๋ ์ ์ฒด ์๊ฐ๊ณผ ๋์ผํฉ๋๋ค."
-
-#: src/basic-syntax/static-and-const.md:44
-msgid ""
-"We will look at mutating static data in the [chapter on Unsafe Rust](../"
-"unsafe.md)."
-msgstr ""
-"๊ฐ๋ณ ์ ์ ๋ฐ์ดํฐ์ ๋ํด์๋ [์์ ํ์ง ์์ ๋ฌ์คํธ](../unsafe.md)์์ ์ดํด๋ด
๋"
-"๋ค."
-
-#: src/basic-syntax/static-and-const.md:48
-msgid "Mention that `const` behaves semantically similar to C++'s `constexpr`."
-msgstr "`const`๋ C++์ `constexpr`๊ณผ ๋งค์ฐ ๋น์ทํฉ๋๋ค."
+"์ ์ ์ฉํฉ๋๋ค. ์ด๋ค์ ์๋ช
์ ํ๋ก๊ทธ๋จ์ด ์ํ๋๋ ์ ์ฒด ์๊ฐ๊ณผ ๋์ผํฉ๋๋ค. ์ "
+"์ญ ์ค์ฝํ๋ฅผ ๊ฐ์ง ์ด๋ค ๊ฐ์ด, ๋ฉ๋ชจ๋ฆฌ ์์ ๋จ ํ๋๋ง ์กด์ฌํด์ผ ํ๋ค๋ ์๊ตฌ์กฐ๊ฑด์ด "
+"์๋ค๋ฉด, ์ ์ ๋ณ์ ๋์ `const`๋ฅผ ์ฐ๋ ๊ฒ์ด ์ณ์ต๋๋ค."
#: src/basic-syntax/static-and-const.md:49
msgid ""
+"Because `static` variables are accessible from any thread, they must be "
+"`Sync`. Interior mutability is possible through a [`Mutex`](https://doc.rust-"
+"lang.org/std/sync/struct.Mutex.html), atomic or similar. It is also possible "
+"to have mutable statics, but they require manual synchronisation so any "
+"access to them requires `unsafe` code. We will look at [mutable statics](../"
+"unsafe/mutable-static-variables.md) in the chapter on Unsafe Rust."
+msgstr ""
+"`static`๋ณ์๋ค์ ์ด๋ค ์ค๋ ๋์์๋ ์ ๊ทผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, `Sync`ํธ๋ ์์ ๊ตฌํ"
+"ํด์ผ ํฉ๋๋ค. ์ด ๋ณ์๋ฅผ ์ฝ๊ณ ์ฐ๋ ค๋ฉด [`Mutex`](https://doc.rust-lang.org/std/"
+"sync/struct.Mutex.html)๋ก ๊ฐ์ธ๊ฑฐ๋, atomic ์ฐ์ฐ์ ์จ์ผ ํฉ๋๋ค. `static` ๋ณ์"
+"๋ฅผ mutableํ๊ฒ ์ ์ธํ ์๋ ์์ง๋ง, ์ด ๊ฒฝ์ฐ ๋๊ธฐํ ์์
์ ์๋์ผ๋ก ํด ์ฃผ์ด์ผ "
+"ํฉ๋๋ค. ๊ทธ๋์ ๊ทธ๋ฌํ ๋ณ์๋ฅผ ์ ๊ทผํ๋ ์ฝ๋๋`unsafe`๋ก ๋ช
์์ ์ผ๋ก ํ์๊ฐ ๋์ด"
+"์ผ ํฉ๋๋ค. \"์์ ํ์ง ์์ ๋ฌ์คํธ\"๋ฅผ ๋ฐฐ์ธ ๋ [mutable statics](../unsafe/"
+"mutable-static-variables.md) ๋ถ๋ถ์์ ์ข ๋ ์์ธํ ๋ค๋ฃจ๊ฒ ์ต๋๋ค."
+
+#: src/basic-syntax/static-and-const.md:57
+msgid "Mention that `const` behaves semantically similar to C++'s `constexpr`."
+msgstr "๋ฌ์คํธ์ `const`๋ C++์ `constexpr`๊ณผ ๋งค์ฐ ๋น์ทํฉ๋๋ค."
+
+#: src/basic-syntax/static-and-const.md:58
+msgid ""
"`static`, on the other hand, is much more similar to a `const` or mutable "
"global variable in C++."
-msgstr "๋ฐ๋ฉด์ `static`์ C++์ `const`๋ ๊ฐ๋ณ ์ ์ ๋ณ์์ ํจ์ฌ ๋ ์ ์ฌํฉ๋๋ค."
+msgstr ""
+"๋ฐ๋ฉด์ ๋ฌ์คํธ์ `static`์ C++์ `const`๋ ๊ฐ๋ณ ์ ์ ๋ณ์(mutable global "
+"variable)์ ํจ์ฌ ๋ ์ ์ฌํฉ๋๋ค."
-#: src/basic-syntax/static-and-const.md:50
+#: src/basic-syntax/static-and-const.md:59
+msgid ""
+"`static` provides object identity: an address in memory and state as "
+"required by types with interior mutability such as `Mutex`."
+msgstr ""
+"`static`์ ๊ฐ์ฒด์ ์ ์ฒด์ฑ์ ๋ถ์ฌํฉ๋๋ค. ์ ์ฒด์ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์์์์ ์ฃผ์, ๊ทธ๋ฆฌ"
+"๊ณ ๋ด๋ถ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค."
+
+#: src/basic-syntax/static-and-const.md:60
msgid ""
"It isn't super common that one would need a runtime evaluated constant, but "
"it is helpful and safer than using a static."
@@ -4014,6 +4460,73 @@ msgstr ""
"ํ๋ก๊ทธ๋จ ์ํ์ ๊ทธ ๊ฐ์ด ์ ํด์ง๋ ์์๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ ๋๋ญ
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ ๋ค"
"๊ณ ํด๋, ์ ์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค๋ ๋ ์ ์ฉํ๊ณ ์์ ํฉ๋๋ค."
+#: src/basic-syntax/static-and-const.md:61
+msgid "`thread_local` data can be created with the macro `std::thread_local`."
+msgstr ""
+"`thread_local` ๋ฐ์ดํฐ๋ `std::thread_local` ๋งคํฌ๋ก๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ์ ์์ต"
+"๋๋ค."
+
+#: src/basic-syntax/static-and-const.md:63
+msgid "Properties table:"
+msgstr "์์ฑ ๋น๊ต ํ
์ด๋ธ:"
+
+#: src/basic-syntax/static-and-const.md:65
+msgid "Property"
+msgstr "์์ฑ"
+
+#: src/basic-syntax/static-and-const.md:65
+msgid "Static"
+msgstr "์ ์ (static) ๋ณ์"
+
+#: src/basic-syntax/static-and-const.md:65
+msgid "Constant"
+msgstr "์์(constant)"
+
+#: src/basic-syntax/static-and-const.md:67
+msgid "Has an address in memory"
+msgstr "๋ฉ๋ชจ๋ฆฌ ์์ ์ฃผ์๊ฐ ์๋๊ฐ"
+
+#: src/basic-syntax/static-and-const.md:67
+#: src/basic-syntax/static-and-const.md:68
+#: src/basic-syntax/static-and-const.md:70
+#: src/basic-syntax/static-and-const.md:71
+msgid "Yes"
+msgstr "์"
+
+#: src/basic-syntax/static-and-const.md:67
+msgid "No (inlined)"
+msgstr "์๋์ค(์ธ๋ผ์ธ ๋จ)"
+
+#: src/basic-syntax/static-and-const.md:68
+msgid "Lives for the entire duration of the program"
+msgstr "ํ๋ก๊ทธ๋จ์ด ์ํ๋๋ ๋์ ๊ณ์ ์ด์ ์๋๊ฐ"
+
+#: src/basic-syntax/static-and-const.md:68
+#: src/basic-syntax/static-and-const.md:69
+#: src/basic-syntax/static-and-const.md:71
+msgid "No"
+msgstr "์๋์ค"
+
+#: src/basic-syntax/static-and-const.md:69
+msgid "Can be mutable"
+msgstr "๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ฐ"
+
+#: src/basic-syntax/static-and-const.md:69
+msgid "Yes (unsafe)"
+msgstr "์ (๊ทธ๋ฌ๋ ์์ ํ์ง ์์)"
+
+#: src/basic-syntax/static-and-const.md:70
+msgid "Evaluated at compile time"
+msgstr "์ปดํ์ผ์ ๊ทธ ๊ฐ์ด ๊ฒฐ์ ๋๋๊ฐ"
+
+#: src/basic-syntax/static-and-const.md:70
+msgid "Yes (initialised at compile time)"
+msgstr "์ (์ปดํ์ผ์ ์ด๊ธฐํ ๋จ)"
+
+#: src/basic-syntax/static-and-const.md:71
+msgid "Inlined wherever it is used"
+msgstr "์ฌ์ฉ๋๋ ๊ณณ์ ์ธ๋ผ์ธ ๋๋๊ฐ"
+
#: src/basic-syntax/scopes-shadowing.md:3
msgid ""
"You can shadow variables, both those from outer scopes and variables from "
@@ -4066,11 +4579,11 @@ msgstr ""
"์๋์์ ๊ธฐ์กด ๋ณ์์ ์๋ก์ด ๊ฐ์ ํ ๋นํ๋ ๊ฒ์ด ์๋๋๋ค. ์๋์์ ํ๋ฉด ์๋ก"
"์ด ๋ณ์๊ฐ ์๊ธฐ๋ฉฐ, ์ด์ ๋ณ์์ ์ ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์๋ก ๋ค๋ฅธ ์์น์ ์กด์ฌํฉ๋"
"๋ค. ๊ทธ ๋ ๋ณ์๋ ๋จ์ง ์ด๋ฆ์ด ๊ฐ์ ๋ฟ์ด๋ฉฐ, ์ฝ๋ ์ค ์ด๋์์ ๊ทธ ์ด๋ฆ์ด ์ฌ์ฉ๋์"
-"๋๋์ ๋ฐ๋ผ ์ด๋ค ๋ณ์๋ฅผ ์ง์นญํ๋ ์ง๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค."
+"๋๋์ ๋ฐ๋ผ ์ด๋ค ๋ณ์๋ฅผ ์ง์นญํ๋ ์ง๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค. "
#: src/basic-syntax/scopes-shadowing.md:26
msgid "A shadowing variable can have a different type. "
-msgstr "์๋์ ์ ํ์
์ ๋ฐ๊ฟ ์ ์์ต๋๋ค."
+msgstr "์๋์ ์ ํ์
์ ๋ฐ๊ฟ ์ ์์ต๋๋ค. "
#: src/basic-syntax/scopes-shadowing.md:27
msgid ""
@@ -4138,7 +4651,7 @@ msgid ""
"Full control _and_ safety via compile time enforcement of correct memory "
"management."
msgstr ""
-"์ปดํ์ผ ์ ์ฌ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐ์ ํจ์ผ๋ก์จ ์์ ํ ํต์ ์ ์์ ์ฑ ๋ชจ๋ ์ ๊ณต"
+"์ปดํ์ผ ์ ์ฌ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐ์ ํจ์ผ๋ก์จ ์์ ํ ํต์ ์ ์์ ์ฑ _๋ชจ๋_ ์ ๊ณต."
#: src/memory-management.md:13
msgid "It does this with an explicit ownership concept."
@@ -4154,11 +4667,11 @@ msgstr "์คํ(Stack)๊ณผ ํ(Heap)"
#: src/memory-management/stack-vs-heap.md:3
msgid "Stack: Continuous area of memory for local variables."
-msgstr "์คํ: ์ง์ญ ๋ณ์๋ฅผ ์ํ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ"
+msgstr "์คํ: ๋ก์ปฌ ๋ณ์๋ฅผ ์ํ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ."
#: src/memory-management/stack-vs-heap.md:4
msgid "Values have fixed sizes known at compile time."
-msgstr "์ฌ๊ธฐ ์ ์ฅ๋๋ ๊ฐ์ ์ปดํ์ผ ์ ๊ฒฐ์ ๋๋ ๊ณ ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ต๋๋ค. "
+msgstr "์ฌ๊ธฐ ์ ์ฅ๋๋ ๊ฐ์ ์ปดํ์ผ ์ ๊ฒฐ์ ๋๋ ๊ณ ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ต๋๋ค."
#: src/memory-management/stack-vs-heap.md:5
msgid "Extremely fast: just move a stack pointer."
@@ -4171,13 +4684,11 @@ msgstr "๊ด๋ฆฌ๊ฐ ์ฌ์: ํจ์๊ฐ ํธ์ถ๋๋ฉด ํ ๋น๋๊ณ , ๋ฆฌํดํ๋ฉด ๋ฐ
#: src/memory-management/stack-vs-heap.md:7
msgid "Great memory locality."
-msgstr ""
-"์คํ์ ์๋ ๊ฐ๋ค์ ๋งค์ฐ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ธ์ ์ฑ์ ๊ฐ์ง๋๋ค(_์ญ์ฃผ_: ๊ทธ๋์ ์บ์๋ฅผ "
-"ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ ์ ์์ต๋๋ค)"
+msgstr "์คํ์ ์๋ ๊ฐ๋ค์ ๋งค์ฐ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ธ์ ์ฑ์ ๊ฐ์ง๋๋ค."
#: src/memory-management/stack-vs-heap.md:9
msgid "Heap: Storage of values outside of function calls."
-msgstr "ํ: ํจ์ ํธ์ถ/๋ฆฌํด๊ณผ ์๊ด ์์ด ์ ์ง๋๋ ๊ฐ์ด ์ ์ฅ๋๋ ๊ณณ"
+msgstr "ํ: ํจ์ ํธ์ถ/๋ฆฌํด๊ณผ ์๊ด ์์ด ์ ์ง๋๋ ๊ฐ์ด ์ ์ฅ๋๋ ๊ณณ."
#: src/memory-management/stack-vs-heap.md:10
msgid "Values have dynamic sizes determined at runtime."
@@ -4191,14 +4702,17 @@ msgstr "์คํ ๋ณด๋ค๋ ๋๋ฆผ: ๋ฉ๋ชจ๋ฆฌ ํ ๋น/๋ฐํ์ ํด์ผ ํ ์ผ์ด
msgid "No guarantee of memory locality."
msgstr "๋ฉ๋ชจ๋ฆฌ ์ธ์ ์ฑ์ ๋ณด์ฅํ์ง ์์ต๋๋ค."
+#: src/memory-management/stack.md:1
+msgid "Stack and Heap Example"
+msgstr "์คํ๊ณผ ํ์ ๊ดํ ์์ "
+
#: src/memory-management/stack.md:3
msgid ""
-"Creating a `String` puts fixed-sized data on the stack and dynamically sized "
-"data on the heap:"
+"Creating a `String` puts fixed-sized metadata on the stack and dynamically "
+"sized data, the actual string, on the heap:"
msgstr ""
-"`String` ํ์
์ ๊ณ ์ ํฌ๊ธฐ ๋ฐ์ดํฐ(_์ญ์ฃผ_: ๋ฌธ์์ด์ ๊ธธ์ด, ๋ฌธ์์ด์ด ์ ์ฅ๋ ๋ฒํผ"
-"์ ์ฃผ์ ๋ฑ)๋ ์คํ์ ์ ์ฅํ๊ณ , ๊ฐ๋ณ ํฌ๊ธฐ ๋ฐ์ดํฐ(_์ญ์ฃผ_: ๋ฌธ์์ด ๋ฒํผ)๋ ํ์ "
-"์ ์ฅํฉ๋๋ค:"
+"`String`์ ํ๋ ๋ง๋ค๊ฒ ๋๋ฉด, ์คํ์๋ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฉํ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๊ณ , "
+"ํ์๋ ๊ฐ๋ณ ํฌ๊ธฐ์ ๋ฐ์ดํฐ, ์ฆ, ์ค์ ๋ฌธ์์ด, ์ด ์์ฑ๋ฉ๋๋ค:"
#: src/memory-management/stack.md:6
msgid ""
@@ -4269,8 +4783,8 @@ msgid ""
"We can inspect the memory layout with `unsafe` code. However, you should "
"point out that this is rightfully unsafe!"
msgstr ""
-"`unsafe` ์ฝ๋๋ก ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ์ดํด๋ณผ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ด ์ฝ๋๊ฐ ์์ ํ"
-"์ง ์๋ค๋ ์ ์ ์๋ ค์ฃผ์ธ์!"
+"์๋์ ๊ฐ์ `unsafe` ์ฝ๋๋ก ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ์ดํด๋ณผ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ด ์ฝ"
+"๋๊ฐ ์์ ํ์ง ์๋ค๋ ์ ์ ์๋ ค์ฃผ์ธ์!"
#: src/memory-management/stack.md:34
msgid ""
@@ -4284,7 +4798,7 @@ msgid ""
"to\n"
" // undefined behavior.\n"
" unsafe {\n"
-" let (capacity, ptr, len): (usize, usize, usize) = std::mem::"
+" let (ptr, capacity, len): (usize, usize, usize) = std::mem::"
"transmute(s1);\n"
" println!(\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\");\n"
" }\n"
@@ -4301,11 +4815,12 @@ msgstr ""
"to\n"
" // undefined behavior.\n"
" unsafe {\n"
-" let (capacity, ptr, len): (usize, usize, usize) = std::mem::"
+" let (ptr, capacity, len): (usize, usize, usize) = std::mem::"
"transmute(s1);\n"
" println!(\"ptr = {ptr:#x}, len = {len}, capacity = {capacity}\");\n"
" }\n"
"}\n"
+"\n"
"```"
#: src/memory-management/manual.md:3
@@ -4332,7 +4847,7 @@ msgstr "`malloc`์ผ๋ก ํ ๋นํ๋ ํฌ์ธํฐ๋ง๋ค `free`๋ฅผ ํธ์ถํด์ผ ํฉ
msgid ""
"```c\n"
"void foo(size_t n) {\n"
-" int* int_array = (int*)malloc(n * sizeof(int));\n"
+" int* int_array = malloc(n * sizeof(int));\n"
" //\n"
" // ... lots of code\n"
" //\n"
@@ -4342,7 +4857,7 @@ msgid ""
msgstr ""
"```c\n"
"void foo(size_t n) {\n"
-" int* int_array = (int*)malloc(n * sizeof(int));\n"
+" int* int_array = malloc(n * sizeof(int));\n"
" //\n"
" // ... lots of code\n"
" //\n"
@@ -4353,10 +4868,14 @@ msgstr ""
#: src/memory-management/manual.md:21
msgid ""
"Memory is leaked if the function returns early between `malloc` and `free`: "
-"the pointer is lost and we cannot deallocate the memory."
+"the pointer is lost and we cannot deallocate the memory. Worse, freeing the "
+"pointer twice, or accessing a freed pointer can lead to exploitable security "
+"vulnerabilities."
msgstr ""
"๋ง์ฝ `malloc` ๊ณผ `free` ์ฌ์ด์์ ํจ์๊ฐ ์ผ์ฐ ๋ฐํ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์ถ์ด ์ผ์ด๋ฉ๋"
-"๋ค: ํฌ์ธํฐ๋ฅผ ์์ด๋ฒ๋ฆฌ๊ฒ ๋์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํ ์ ์๊ฒ ๋ฉ๋๋ค."
+"๋ค: ํฌ์ธํฐ๋ฅผ ์์ด๋ฒ๋ฆฌ๊ฒ ๋์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํ ์ ์๊ฒ ๋ฉ๋๋ค. ๊ฐ์ ํฌ์ธํฐ๋ฅผ "
+"๋ ๋ฒ ๋ฐํํ๊ฑฐ๋, ์ด๋ฏธ ๋ฐํ๋ ํฌ์ธํฐ๋ฅผ ์ ๊ทผํ๋ ๊ฒ์ ์ฌ๊ฐํ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ผ์ผ"
+"ํฌ ์ ์์ต๋๋ค."
#: src/memory-management/scope-based.md:3
msgid ""
@@ -4514,9 +5033,9 @@ msgstr ""
"๋ผ ๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์๋ ๊ฒ๋ ์์ต๋๋ค."
#: src/memory-management/rust.md:10
-msgid "It achieves this by modeling _ownership_ explicitly."
+msgid "Rust achieves this by modeling _ownership_ explicitly."
msgstr ""
-"๋ฌ์คํธ๋ _์์ ๊ถ_์ ์ธ์ด ์ฐจ์์์ ๋ช
์์ ์ผ๋ก ๋ชจ๋ธ๋ง ํจ์ผ๋ก์จ ์ด๋ฅผ ์ด๋ฃน๋๋ค."
+"๋ฌ์คํธ๋ \\_์์ ๊ถ_์ ์ธ์ด ์ฐจ์์์ ๋ช
์์ ์ผ๋ก ๋ชจ๋ธ๋ง ํจ์ผ๋ก์จ ์ด๋ฅผ ์ด๋ฃน๋๋ค."
#: src/memory-management/rust.md:14
msgid ""
@@ -4554,16 +5073,16 @@ msgstr "๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ ๋ณ ์ฅ์ "
#: src/memory-management/comparison.md:7 src/memory-management/comparison.md:22
msgid "Manual like C:"
-msgstr "C์ ๊ฐ์ ์๋ ๊ด๋ฆฌ: "
+msgstr "C์ ๊ฐ์ ์๋ ๊ด๋ฆฌ:"
#: src/memory-management/comparison.md:8 src/memory-management/comparison.md:14
#: src/memory-management/comparison.md:17
msgid "No runtime overhead."
-msgstr "๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์์. "
+msgstr "๋ฐํ์ ์ค๋ฒํค๋๊ฐ ์์."
#: src/memory-management/comparison.md:9 src/memory-management/comparison.md:26
msgid "Automatic like Java:"
-msgstr "JAVA์ ๊ฐ์ ์๋ํ ๊ด๋ฆฌ: "
+msgstr "JAVA์ ๊ฐ์ ์๋ํ ๊ด๋ฆฌ:"
#: src/memory-management/comparison.md:10
msgid "Fully automatic."
@@ -4577,15 +5096,15 @@ msgstr "์์ ํ๊ณ ์ ํํจ."
#: src/memory-management/comparison.md:12
#: src/memory-management/comparison.md:29
msgid "Scope-based like C++:"
-msgstr "C++ ์ ๊ฐ์ ๋ฒ์ ๊ธฐ๋ฐ ๊ด๋ฆฌ: "
+msgstr "C++ ์ ๊ฐ์ ๋ฒ์ ๊ธฐ๋ฐ ๊ด๋ฆฌ:"
#: src/memory-management/comparison.md:13
msgid "Partially automatic."
-msgstr "๋ถ๋ถ ์๋ํ"
+msgstr "๋ถ๋ถ ์๋ํ."
#: src/memory-management/comparison.md:15
msgid "Compiler-enforced scope-based like Rust:"
-msgstr "๋ฌ์คํธ์ ๊ฐ์ ์ปดํ์ผ๋ฌ ์ํ ๋ฒ์ ๊ธฐ๋ฐ ๊ด๋ฆฌ: "
+msgstr "๋ฌ์คํธ์ ๊ฐ์ ์ปดํ์ผ๋ฌ ์ํ ๋ฒ์ ๊ธฐ๋ฐ ๊ด๋ฆฌ:"
#: src/memory-management/comparison.md:16
msgid "Enforced by compiler."
@@ -4618,24 +5137,28 @@ msgstr ""
"์๊ณ GC๊ฐ ๋์ํ ๋ ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค๋ ์ )"
#: src/memory-management/comparison.md:30
-msgid "Complex, opt-in by programmer."
+msgid "Complex, opt-in by programmer (on C++)."
msgstr "๋ณต์กํ๋ฉฐ, ๊ฐ๋ฐ์์ ์ ํ์ฌํญ์."
#: src/memory-management/comparison.md:31
-msgid "Potential for use-after-free."
-msgstr "์ฌ์ฉ ํ ํด์ ๋ฌธ์ ๊ฐ๋ฅ์ฑ ์์."
+msgid "Circular references can lead to memory leaks"
+msgstr "์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํจ"
#: src/memory-management/comparison.md:32
+msgid "Potential runtime overhead"
+msgstr "๋ฐํ์ ์ค๋ฒํค๋ ์์ ์ ์์"
+
+#: src/memory-management/comparison.md:33
msgid "Compiler-enforced and scope-based like Rust:"
msgstr "๋ฌ์คํธ์ ๊ฐ์ ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ์ ํ๋ ์ํ ๋ฒ์ ๊ธฐ๋ฐ ๊ด๋ฆฌ:"
-#: src/memory-management/comparison.md:33
-msgid "Some upfront complexity."
-msgstr "์ฝ๊ฐ์ ์ด๊ธฐ ๋ณต์ก์ฑ."
-
#: src/memory-management/comparison.md:34
+msgid "Some upfront complexity."
+msgstr "์ฒ์์ ๋ฐฐ์ธ ๋ ์ด๋ ค์."
+
+#: src/memory-management/comparison.md:35
msgid "Can reject valid programs."
-msgstr "์ฌ๋ฐ๋ฅธ ํ๋ก๊ทธ๋จ์ด์ง๋ง ์ปดํ์ผ๋ฌ๊ฐ ๊ฑฐ๋ถํ ์ ์์."
+msgstr "์ฌ๋ฐ๋ฅธ ํ๋ก๊ทธ๋จ์ด๋๋ผ๋ ์ปดํ์ผ๋ฌ๊ฐ ๊ฑฐ๋ถํ ์ ์์."
#: src/ownership.md:3
msgid ""
@@ -4689,8 +5212,8 @@ msgid "We say that the variable _owns_ the value."
msgstr "์ด๊ฒ์ ๋๊ณ ๋ณ์๊ฐ ๊ฐ์ \"์์ \"ํ๋ค๊ณ ํํํฉ๋๋ค."
#: src/ownership/move-semantics.md:3
-msgid "An assignment will transfer ownership between variables:"
-msgstr "(๋ณ์์) ํ ๋น์ ์์ ๊ถ์ ๋ณ์ ๊ฐ์ ์ด๋์ํต๋๋ค:"
+msgid "An assignment will transfer _ownership_ between variables:"
+msgstr "(๋ณ์์) ํ ๋น์ \\_์์ ๊ถ_์ ๋ณ์ ๊ฐ์ ์ด๋์ํต๋๋ค:"
#: src/ownership/move-semantics.md:5
msgid ""
@@ -4717,26 +5240,20 @@ msgid "The assignment of `s1` to `s2` transfers ownership."
msgstr "`s1`์ `s2`์ ํ ๋นํ์ฌ ์์ ๊ถ์ ์ด์ ์ํต๋๋ค."
#: src/ownership/move-semantics.md:15
-msgid "The data was _moved_ from `s1` and `s1` is no longer accessible."
-msgstr ""
-"๋ฐ์ดํฐ๋ `s1`์์ \\_์ด๋_๋ฉ๋๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋๋จธ๋ `s1`์ ๋ ์ด์ ์ ๊ทผ ํ "
-"์ ์์ต๋๋ค."
-
-#: src/ownership/move-semantics.md:16
-msgid "When `s1` goes out of scope, nothing happens: it has no ownership."
+msgid "When `s1` goes out of scope, nothing happens: it does not own anything."
msgstr ""
"`s1`์ ์ค์ฝํ๊ฐ ์ข
๋ฃ๋๋ฉด ์๋ฌด ์ผ๋ ์์ต๋๋ค: ์๋ํ๋ฉด `s1`์ ์๋ฌด๋ฐ ์์ ๊ถ์ด "
"์๊ธฐ ๋๋ฌธ์
๋๋ค."
-#: src/ownership/move-semantics.md:17
+#: src/ownership/move-semantics.md:16
msgid "When `s2` goes out of scope, the string data is freed."
msgstr "`s2`์ ์ค์ฝํ๊ฐ ์ข
๋ฃ๋๋ฉด ๋ฌธ์์ด ๋ฐ์ดํฐ๋ ํด์ ๋ฉ๋๋ค."
-#: src/ownership/move-semantics.md:18
+#: src/ownership/move-semantics.md:17
msgid "There is always _exactly_ one variable binding which owns a value."
msgstr "๊ฐ(๋ฐ์ดํฐ)์ ์์ ๊ถ์ ๊ฐ๋ ๋ณ์๋ ํญ์ _๋จ_ ํ๋ ์
๋๋ค."
-#: src/ownership/move-semantics.md:22
+#: src/ownership/move-semantics.md:21
msgid ""
"Mention that this is the opposite of the defaults in C++, which copies by "
"value unless you use `std::move` (and the move constructor is defined!)."
@@ -4744,7 +5261,23 @@ msgstr ""
"์ด๋ C++๊ณผ ์ ๋ฐ๋ ์์ ์ค๋ช
ํ์ธ์. C++์์๋ ๋ณต์ฌ๊ฐ ๊ธฐ๋ณธ์ด๊ณ , `std::move` ๋ฅผ "
"์ด์ฉํด์ผ๋ง (๊ทธ๋ฆฌ๊ณ ์ด๋ ์์ฑ์๊ฐ ์ ์๋์ด ์์ด์ผ๋ง!) ์์ ๊ถ ์ด์ ์ด ๋ฉ๋๋ค."
-#: src/ownership/move-semantics.md:24
+#: src/ownership/move-semantics.md:23
+msgid ""
+"It is only the ownership that moves. Whether any machine code is generated "
+"to manipulate the data itself is a matter of optimization, and such copies "
+"are aggressively optimized away."
+msgstr ""
+"์ค์ ๋ก ์ด๋๋๋ ๊ฒ์ ์์ ๊ถ์ผ ๋ฟ์
๋๋ค. ๋จธ์ ์ฝ๋ ๋ ๋ฒจ์์ ๋ฐ์ดํฐ ๋ณต์ฌ๊ฐ ์ผ์ด"
+"๋ ์ง ๋ง ์ง์ ๋ํ ๊ฒ์ ์ปดํ์ผ๋ฌ ๋ด๋ถ์์ ์ผ์ด๋๋ ์ต์ ํ ๋ฌธ์ ์
๋๋ค. ์ด๋ฐ ๋ณต"
+"์ฌ๋ ์ต์ ํ ๊ณผ์ ์์ ์ ๊ฑฐ๊ฐ ๋ฉ๋๋ค."
+
+#: src/ownership/move-semantics.md:25
+msgid ""
+"Simple values (such as integers) can be marked `Copy` (see later slides)."
+msgstr ""
+"์ ์์ ๊ฐ์ ๊ฐ๋จํ ๊ฐ๋ค์ `Copy` (๋ค์ ์ค๋ช
ํฉ๋๋ค)๋ก ๋งํน๋ ์ ์์ต๋๋ค."
+
+#: src/ownership/move-semantics.md:27
msgid "In Rust, clones are explicit (by using `clone`)."
msgstr "๋ฌ์คํธ์์๋ ๋ณต์ฌํ ๋์๋ ๋ช
์์ ์ผ๋ก `clone`์ ์ฌ์ฉํฉ๋๋ค."
@@ -4857,6 +5390,10 @@ msgstr ""
"`- - - - - - - - - - - - - -'\n"
"```"
+#: src/ownership/double-free-modern-cpp.md:1
+msgid "Extra Work in Modern C++"
+msgstr "Modern C++์์ ์ด์คํด์ ๋ฌธ์ "
+
#: src/ownership/double-free-modern-cpp.md:3
msgid "Modern C++ solves this differently:"
msgstr "Modern C++์ ์ด ๋ฌธ์ ๋ฅผ ๋ค๋ฅด๊ฒ ํด๊ฒฐํฉ๋๋ค:"
@@ -5228,15 +5765,17 @@ msgstr "์คํ์ ํ ๋น๋ ๊ฐ์ ๋ฆฌํดํ๋ ๊ฒ์ ๋ํ ์ฐธ๊ณ :"
msgid ""
"Demonstrate that the return from `add` is cheap because the compiler can "
"eliminate the copy operation. Change the above code to print stack addresses "
-"and run it on the [Playground](https://play.rust-lang.org/). In the "
-"\"DEBUG\" optimization level, the addresses should change, while they stay "
-"the same when changing to the \"RELEASE\" setting:"
+"and run it on the [Playground](https://play.rust-lang.org/) or look at the "
+"assembly in [Godbolt](https://rust.godbolt.org/). In the \"DEBUG\" "
+"optimization level, the addresses should change, while they stay the same "
+"when changing to the \"RELEASE\" setting:"
msgstr ""
"`add`์์ ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ์ด ์ธ๋ค๋ ๊ฒ์ ์ค๋ช
ํ์ธ์. ์๋ํ๋ฉด, ์ปดํ"
"์ผ๋ฌ๊ฐ ๋ณต์ฌ ๊ณผ์ ์ ์๋ตํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ ์ฝ๋๋ฅผ ์คํ ์ฃผ์๋ฅผ ์ถ๋ ฅํ๋"
-"๋ก ์์ ํ๊ณ [Playground](https://play.rust-lang.org/)์์ ์ํํด ๋ณด์ธ์. \"๋"
-"๋ฒ๊ทธ\" ์ต์ ํ ๋ ๋ฒจ์์๋ ์ฃผ์๊ฐ ๋ฐ๋์ง๋ง, \"๋ฆด๋ฆฌ์ฆ\" ๋ ๋ฒจ์์๋ ๋ฐ๋์ง ์์ต๋"
-"๋ค:"
+"๋ก ์์ ํ๊ณ [Playground](https://play.rust-lang.org/)์์ ์ํํด ๋ณด์ธ์. ๋"
+"๋ [Godbolt](https://rust.godbolt.org/)์์ ์ด์
๋ธ๋ฆฌ๋ฅผ ํ์ธํด ๋ณด์ธ์. ์ต์ ํ "
+"๋ ๋ฒจ์ด \"DEBUG\" ์ผ ๋์๋ ์ฃผ์๊ฐ ๋ฐ๋์ง๋ง, \"RELEASE\" ๋ ๋ฒจ์์๋ ๋ฐ๋์ง ์"
+"์ต๋๋ค:"
#: src/ownership/borrowing.md:30
msgid ""
@@ -5250,7 +5789,7 @@ msgid ""
" p\n"
"}\n"
"\n"
-"fn main() {\n"
+"pub fn main() {\n"
" let p1 = Point(3, 4);\n"
" let p2 = Point(10, 20);\n"
" let p3 = add(&p1, &p2);\n"
@@ -5269,7 +5808,7 @@ msgstr ""
" p\n"
"}\n"
"\n"
-"fn main() {\n"
+"pub fn main() {\n"
" let p1 = Point(3, 4);\n"
" let p2 = Point(10, 20);\n"
" let p3 = add(&p1, &p2);\n"
@@ -5286,8 +5825,8 @@ msgstr "๋ฌ์คํธ ์ปดํ์ผ๋ฌ๋ ๋ฐํ๊ฐ ์ต์ ํ(RVO)๋ฅผ ์ํํ ์ ์
msgid ""
"In C++, copy elision has to be defined in the language specification because "
"constructors can have side effects. In Rust, this is not an issue at all. If "
-"RVO did not happen, Rust will always performs a simple and efficient "
-"`memcpy` copy."
+"RVO did not happen, Rust will always perform a simple and efficient `memcpy` "
+"copy."
msgstr ""
"C++์์ copy elision์ ์์ฑ์์ ๋ถ์ํจ๊ณผ ๊ฐ๋ฅ์ฑ์ด ์์ด ์ธ์ด๋ ๋ฒจ์ ์ ์๊ฐ ํ์"
"ํ์ง๋ง ๋ฌ์คํธ์์๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ๋ง์ฝ RVO๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ๋ฌ์คํธ"
@@ -5338,7 +5877,6 @@ msgstr ""
"```"
#: src/ownership/shared-unique-borrows.md:25
-#, fuzzy
msgid ""
"The above code does not compile because `a` is borrowed as mutable (through "
"`c`) and as immutable (through `b`) at the same time."
@@ -5347,7 +5885,6 @@ msgstr ""
"๋์์ `b`๋ `a`๋ฅผ ๋ถ๋ณ ๋ณ์๋ก ๋น๋ ธ๊ธฐ ๋๋ฌธ์
๋๋ค."
#: src/ownership/shared-unique-borrows.md:26
-#, fuzzy
msgid ""
"Move the `println!` statement for `b` before the scope that introduces `c` "
"to make the code compile."
@@ -5356,7 +5893,6 @@ msgstr ""
"๋ค."
#: src/ownership/shared-unique-borrows.md:27
-#, fuzzy
msgid ""
"After that change, the compiler realizes that `b` is only ever used before "
"the new mutable borrow of `a` through `c`. This is a feature of the borrow "
@@ -5364,21 +5900,14 @@ msgid ""
msgstr ""
"์ด๋ ๊ฒ ๋ฐ๊พธ๋ฉด, ์ปดํ์ผ๋ฌ๋ `c`๊ฐ `a`๋ฅผ ๊ฐ๋ณ ๋ณ์๋ก ๋น๋ฆฌ๊ธฐ ์ ์๋ง `b`๊ฐ ์ฌ์ฉ๋"
"๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋น๋ฆผ ๊ฒ์ฌ๊ธฐ์ ์ด๋ฌํ ๊ธฐ๋ฅ์ \"non-lexical "
-"lifetime\" ์ด๋ผ๊ณ ํฉ๋๋ค.\n"
-"\n"
-"๋จ์ํ ์ค์ฝํ๋ง ๋ณด๋ฉด `b`์ ์๋ช
์ `main`ํจ์์ ์ ์ฒด๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. "
-"๋๋ฌธ์ `c`์ ๋ธ๋ก ์์์๋ `a`์ ๋ํ ๊ฐ๋ณ ๋น๋ฆผ๊ณผ ๋ถ๋ณ ๋น๋ฆผ์ด ๋์์ ์กด์ฌํ"
-"๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๋ฉฐ, ์ด๋ ์ ์ ์ฝ ์กฐ๊ฑด์ ์๋ฐํ๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค. ๊ทธ"
-"๋ฌ๋ ์ปดํ์ผ๋ฌ๋ `b`๊ฐ `c`๋ธ๋ก์ด ์์๋๊ธฐ ์ ์๋ง ์ฌ์ฉ๋๋ค๋ ์ ์ ์ ๊ทน ํ์ฉํด"
-"์ `b`์ ์๋ช
์ `c`๋ธ๋ก์ ์์ ์ ๊น์ง๋ก ์ค์
๋๋ค. ๊ทธ๋ฌ๋ฉด `b`์ `c`์ ์๋ช
์ "
-"๊ฒน์น์ง ์๊ณ , ๋ฐ๋ผ์ ์ ์ฝ ์กฐ๊ฑด์ ์๋ฐํ์ง ์์ต๋๋ค."
+"lifetime\" ์ด๋ผ๊ณ ํฉ๋๋ค."
#: src/ownership/lifetimes.md:3
msgid "A borrowed value has a _lifetime_:"
msgstr "๋น๋ ค์จ ๊ฐ์ _์๋ช
_์ ๊ฐ์ต๋๋ค:"
#: src/ownership/lifetimes.md:5
-msgid "The lifetime can be elided: `add(p1: &Point, p2: &Point) -> Point`."
+msgid "The lifetime can be implicit: `add(p1: &Point, p2: &Point) -> Point`."
msgstr "์๋ช
์ ์๋ตํ ์ ์์ต๋๋ค: `add(p1: &Point, p2: &Point) -> Point`."
#: src/ownership/lifetimes.md:6
@@ -5408,6 +5937,16 @@ msgstr ""
"์๋ช
ํ๊ธฐ(`'`)์ ์๋ช
์ถ๋ก ์ ์ ์ฝ์กฐ๊ฑด์ด ๋ฉ๋๋ค. ์ปดํ์ผ๋ฌ๋ ์ด ์ ์ฝ์กฐ๊ฑด์ ๋ง์กฑ"
"์ํค๋ ์ ์ํ ์๋ช
์ ์ถ๋ก ํ ์ ์๋์ง ๊ฒ์ฌ๋ฅผ ํฉ๋๋ค."
+#: src/ownership/lifetimes.md:13
+msgid ""
+"Lifetimes for function arguments and return values must be fully specified, "
+"but Rust allows lifetimes to be elided in most cases with [a few simple "
+"rules](https://doc.rust-lang.org/nomicon/lifetime-elision.html)."
+msgstr ""
+"์๋, ํจ์์ ์ธ์์ ๋ฆฌํด๊ฐ์๋ ์๋ช
์ ์ค์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ [๋ช ๊ฐ์ง ์กฐ๊ฑด]"
+"(https://doc.rust-lang.org/nomicon/lifetime-elision.html)์ ๋ง์กฑํ๋ ๋๋ถ๋ถ"
+"์ ๊ฒฝ์ฐ์๋ ์๋ตํ ์ ์์ต๋๋ค."
+
#: src/ownership/lifetimes-function-calls.md:3
msgid ""
"In addition to borrowing its arguments, a function can return a borrowed "
@@ -5464,7 +6003,7 @@ msgstr ""
#: src/ownership/lifetimes-function-calls.md:31
msgid ""
-"Move the declaration of `p2` and `p3` into a a new scope (`{ ... }`), "
+"Move the declaration of `p2` and `p3` into a new scope (`{ ... }`), "
"resulting in the following code:"
msgstr "`p2`์ `p3`๋ฅผ ์๋ก์ด ๋ฒ์(`{...}`)๋ก ์๋ ์ฝ๋์ ๊ฐ์ด ์ด๋ํด ๋ด
๋๋ค:"
@@ -5543,7 +6082,7 @@ msgstr ""
#: src/ownership/lifetimes-function-calls.md:57
msgid ""
-"Which one is it? The compiler needs to to know, so at the call site the "
+"Which one is it? The compiler needs to know, so at the call site the "
"returned reference is not used for longer than a variable from where the "
"reference came from."
msgstr ""
@@ -5652,7 +6191,7 @@ msgstr "์ด๋ฒ ์ฐ์ต๋ฌธ์ ๋ ์๋ ๋๊ฐ์ง์
๋๋ค:"
#: src/exercises/day-1/afternoon.md:5
msgid "A small book library,"
-msgstr "์์ ๋์๊ด"
+msgstr "์์ ๋์๊ด,"
#: src/exercises/day-1/afternoon.md:7
msgid "Iterators and ownership (hard)."
@@ -5672,26 +6211,37 @@ msgid ""
"fn main() {\n"
" let mut vec = vec![10, 20];\n"
" vec.push(30);\n"
-" println!(\"middle value: {}\", vec[vec.len() / 2]);\n"
-" for item in vec.iter() {\n"
+" let midpoint = vec.len() / 2;\n"
+" println!(\"middle value: {}\", vec[midpoint]);\n"
+" for item in &vec {\n"
" println!(\"item: {item}\");\n"
" }\n"
"}\n"
"```"
msgstr ""
+"```rust,editable\n"
+"fn main() {\n"
+" let mut vec = vec![10, 20];\n"
+" vec.push(30);\n"
+" let midpoint = vec.len() / 2;\n"
+" println!(\"middle value: {}\", vec[midpoint]);\n"
+" for item in &vec {\n"
+" println!(\"item: {item}\");\n"
+" }\n"
+"}\n"
+"```"
-#: src/exercises/day-1/book-library.md:17
+#: src/exercises/day-1/book-library.md:18
msgid ""
-"Use this to create a library application. Copy the code below to and update the types to make it compile:"
+"Use this to model a library's book collection. Copy the code below to "
+" and update the types to make it compile:"
msgstr ""
-"๋์๊ด ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํด ์๋ ์ฝ๋๋ฅผ ์ ๋ณต"
-"์ฌํด์ ๊ตฌํํ์๋ฉด ๋ฉ๋๋ค:"
+"์๋ ์ฝ๋๋ ๋์๊ด์ ์๋ ๋์ ์ปฌ๋์
์ ๋ชจ๋ธ๋ง ํฉ๋๋ค. ์๋ ์ฝ๋๋ฅผ ์ ๋ณต์ฌํ ํ, ์ปดํ์ผ ๋๋๋ก ์์ ํด ๋ด
์๋ค:"
-#: src/exercises/day-1/book-library.md:20
+#: src/exercises/day-1/book-library.md:21
msgid ""
"```rust,should_panic\n"
-"\n"
"struct Library {\n"
" books: Vec,\n"
"}\n"
@@ -5711,36 +6261,36 @@ msgid ""
" }\n"
"}\n"
"\n"
-"// This makes it possible to print Book values with {}.\n"
-"impl std::fmt::Display for Book {\n"
-" fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n"
-" write!(f, \"{} ({})\", self.title, self.year)\n"
-" }\n"
-"}\n"
-"\n"
+"// Implement the methods below. Update the `self` parameter to\n"
+"// indicate the method's required level of ownership over the object:\n"
+"//\n"
+"// - `&self` for shared read-only access,\n"
+"// - `&mut self` for unique and mutable access,\n"
+"// - `self` for unique access by value.\n"
"impl Library {\n"
" fn new() -> Library {\n"
-" unimplemented!()\n"
+" todo!(\"Initialize and return a `Library` value\")\n"
" }\n"
"\n"
" //fn len(self) -> usize {\n"
-" // unimplemented!()\n"
+" // todo!(\"Return the length of `self.books`\")\n"
" //}\n"
"\n"
" //fn is_empty(self) -> bool {\n"
-" // unimplemented!()\n"
+" // todo!(\"Return `true` if `self.books` is empty\")\n"
" //}\n"
"\n"
" //fn add_book(self, book: Book) {\n"
-" // unimplemented!()\n"
+" // todo!(\"Add a new book to `self.books`\")\n"
" //}\n"
"\n"
" //fn print_books(self) {\n"
-" // unimplemented!()\n"
+" // todo!(\"Iterate over `self.books` and each book's title and "
+"year\")\n"
" //}\n"
"\n"
" //fn oldest_book(self) -> Option<&Book> {\n"
-" // unimplemented!()\n"
+" // todo!(\"Return a reference to the oldest book (if any)\")\n"
" //}\n"
"}\n"
"\n"
@@ -5751,31 +6301,113 @@ msgid ""
"fn main() {\n"
" let library = Library::new();\n"
"\n"
-" //println!(\"Our library is empty: {}\", library.is_empty());\n"
-"\n"
-" let favorite_book = Book::new(\"Lord of the Rings\", 1954);\n"
-" println!(\"Our favorite book {favorite_book} should go in the "
-"library\");\n"
-" //library.add_book(favorite_book);\n"
+" //println!(\"The library is empty: library.is_empty() -> {}\", library."
+"is_empty());\n"
+" //\n"
+" //library.add_book(Book::new(\"Lord of the Rings\", 1954));\n"
" //library.add_book(Book::new(\"Alice's Adventures in Wonderland\", "
"1865));\n"
" //\n"
+" //println!(\"The library is no longer empty: library.is_empty() -> {}\", "
+"library.is_empty());\n"
+" //\n"
+" //\n"
" //library.print_books();\n"
" //\n"
" //match library.oldest_book() {\n"
-" // Some(book) => println!(\"My oldest book is {book}\"),\n"
-" // None => println!(\"My library is empty!\"),\n"
+" // Some(book) => println!(\"The oldest book is {}\", book.title),\n"
+" // None => println!(\"The library is empty!\"),\n"
" //}\n"
" //\n"
-" //println!(\"Our library has {} books\", library.len());\n"
-" for book in library.books {\n"
-" println!(\"{book}\");\n"
-" }\n"
+" //println!(\"The library has {} books\", library.len());\n"
+" //library.print_books();\n"
"}\n"
"```"
msgstr ""
+"```rust,should_panic\n"
+"struct Library {\n"
+" books: Vec,\n"
+"}\n"
+"\n"
+"struct Book {\n"
+" title: String,\n"
+" year: u16,\n"
+"}\n"
+"\n"
+"impl Book {\n"
+" // This is a constructor, used below.\n"
+" fn new(title: &str, year: u16) -> Book {\n"
+" Book {\n"
+" title: String::from(title),\n"
+" year,\n"
+" }\n"
+" }\n"
+"}\n"
+"\n"
+"// Implement the methods below. Update the `self` parameter to\n"
+"// indicate the method's required level of ownership over the object:\n"
+"//\n"
+"// - `&self` for shared read-only access,\n"
+"// - `&mut self` for unique and mutable access,\n"
+"// - `self` for unique access by value.\n"
+"impl Library {\n"
+" fn new() -> Library {\n"
+" todo!(\"Initialize and return a `Library` value\")\n"
+" }\n"
+"\n"
+" //fn len(self) -> usize {\n"
+" // todo!(\"Return the length of `self.books`\")\n"
+" //}\n"
+"\n"
+" //fn is_empty(self) -> bool {\n"
+" // todo!(\"Return `true` if `self.books` is empty\")\n"
+" //}\n"
+"\n"
+" //fn add_book(self, book: Book) {\n"
+" // todo!(\"Add a new book to `self.books`\")\n"
+" //}\n"
+"\n"
+" //fn print_books(self) {\n"
+" // todo!(\"Iterate over `self.books` and each book's title and "
+"year\")\n"
+" //}\n"
+"\n"
+" //fn oldest_book(self) -> Option<&Book> {\n"
+" // todo!(\"Return a reference to the oldest book (if any)\")\n"
+" //}\n"
+"}\n"
+"\n"
+"// This shows the desired behavior. Uncomment the code below and\n"
+"// implement the missing methods. You will need to update the\n"
+"// method signatures, including the \"self\" parameter! You may\n"
+"// also need to update the variable bindings within main.\n"
+"fn main() {\n"
+" let library = Library::new();\n"
+"\n"
+" //println!(\"The library is empty: library.is_empty() -> {}\", library."
+"is_empty());\n"
+" //\n"
+" //library.add_book(Book::new(\"Lord of the Rings\", 1954));\n"
+" //library.add_book(Book::new(\"Alice's Adventures in Wonderland\", "
+"1865));\n"
+" //\n"
+" //println!(\"The library is no longer empty: library.is_empty() -> {}\", "
+"library.is_empty());\n"
+" //\n"
+" //\n"
+" //library.print_books();\n"
+" //\n"
+" //match library.oldest_book() {\n"
+" // Some(book) => println!(\"The oldest book is {}\", book.title),\n"
+" // None => println!(\"The library is empty!\"),\n"
+" //}\n"
+" //\n"
+" //println!(\"The library has {} books\", library.len());\n"
+" //library.print_books();\n"
+"}\n"
+"```"
-#: src/exercises/day-1/book-library.md:104
+#: src/exercises/day-1/book-library.md:102
msgid "[Solution](solutions-afternoon.md#designing-a-library)"
msgstr "[ํด๋ต](solutions-afternoon.md#designing-a-library)"
@@ -5814,6 +6446,12 @@ msgid ""
"}\n"
"```"
msgstr ""
+"```rust\n"
+"pub trait Iterator {\n"
+" type Item;\n"
+" fn next(&mut self) -> Option;\n"
+"}\n"
+"```"
#: src/exercises/day-1/iterators-and-ownership.md:20
msgid "You use this trait like this:"
@@ -5833,6 +6471,17 @@ msgid ""
"}\n"
"```"
msgstr ""
+"```rust,editable\n"
+"fn main() {\n"
+" let v: Vec = vec![10, 20, 30];\n"
+" let mut iter = v.iter();\n"
+"\n"
+" println!(\"v[0]: {:?}\", iter.next());\n"
+" println!(\"v[1]: {:?}\", iter.next());\n"
+" println!(\"v[2]: {:?}\", iter.next());\n"
+" println!(\"No more items: {:?}\", iter.next());\n"
+"}\n"
+"```"
#: src/exercises/day-1/iterators-and-ownership.md:34
msgid "What is the type returned by the iterator? Test your answer here:"
@@ -5888,6 +6537,14 @@ msgid ""
"}\n"
"```"
msgstr ""
+"```rust\n"
+"pub trait IntoIterator {\n"
+" type Item;\n"
+" type IntoIter: Iterator- ;\n"
+"\n"
+" fn into_iter(self) -> Self::IntoIter;\n"
+"}\n"
+"```"
#: src/exercises/day-1/iterators-and-ownership.md:62
msgid ""
@@ -5897,7 +6554,7 @@ msgstr "`IntoIterator`์ ๋ชจ๋ ๊ตฌํ์ ๋ฐ๋์ ๋ค์์ ๋ ํ์
์ ์
#: src/exercises/day-1/iterators-and-ownership.md:65
msgid "`Item`: the type we iterate over, such as `i8`,"
-msgstr "`Item`: `i8`๊ณผ ๊ฐ์ด ๋ฐ๋ณต๋๋ ๊ฐ์ ํ์
"
+msgstr "`Item`: `i8`๊ณผ ๊ฐ์ด ๋ฐ๋ณต๋๋ ๊ฐ์ ํ์
,"
#: src/exercises/day-1/iterators-and-ownership.md:66
msgid "`IntoIter`: the `Iterator` type returned by the `into_iter` method."
@@ -5910,7 +6567,7 @@ msgid ""
msgstr ""
"`IntoIter`์๋ `Item`์ด ์ฐ๊ฒฐ๋์ด ์์์ ์ฃผ๋ชฉํ์ธ์. `IntoIter` ๋ฐ๋ณต์๋ "
"`Item` ํ์
์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํฉ๋๋ค. ์ฆ, ๋ฐ๋ณต์๋ `Option
- `์ ๋ฆฌํดํฉ"
-"๋๋ค."
+"๋๋ค"
#: src/exercises/day-1/iterators-and-ownership.md:71
msgid "Like before, what is the type returned by the iterator?"
@@ -5929,6 +6586,16 @@ msgid ""
"}\n"
"```"
msgstr ""
+"```rust,editable,compile_fail\n"
+"fn main() {\n"
+" let v: Vec = vec![String::from(\"foo\"), String::"
+"from(\"bar\")];\n"
+" let mut iter = v.into_iter();\n"
+"\n"
+" let v0: Option<..> = iter.next();\n"
+" println!(\"v0: {v0:?}\");\n"
+"}\n"
+"```"
#: src/exercises/day-1/iterators-and-ownership.md:83
msgid "`for` Loops"
@@ -5961,6 +6628,20 @@ msgid ""
"}\n"
"```"
msgstr ""
+"```rust,editable\n"
+"fn main() {\n"
+" let v: Vec = vec![String::from(\"foo\"), String::"
+"from(\"bar\")];\n"
+"\n"
+" for word in &v {\n"
+" println!(\"word: {word}\");\n"
+" }\n"
+"\n"
+" for word in v {\n"
+" println!(\"word: {word}\");\n"
+" }\n"
+"}\n"
+"```"
#: src/exercises/day-1/iterators-and-ownership.md:103
msgid "What is the type of `word` in each loop?"
@@ -5970,15 +6651,15 @@ msgstr "๋งค ๋ฃจํ์์ `word`์ ํ์
์ ๋ฌด์์
๋๊น?"
msgid ""
"Experiment with the code above and then consult the documentation for [`impl "
"IntoIterator for &Vec`](https://doc.rust-lang.org/std/vec/struct.Vec."
-"html#impl-IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E) and [`impl "
-"IntoIterator for Vec`](https://doc.rust-lang.org/std/vec/struct.Vec."
-"html#impl-IntoIterator-for-Vec%3CT%2C%20A%3E) to check your answers."
+"html#impl-IntoIterator-for-%26'a+Vec%3CT,+A%3E) and [`impl IntoIterator for "
+"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-"
+"for-Vec%3CT,+A%3E) to check your answers."
msgstr ""
-"์ ์ฝ๋์์ ์คํ ํด ๋ณธ ํ ๋ค์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํด์ ๋ต๋ณ์ ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค: "
+"์ ์ฝ๋์์ ์คํ ํด ๋ณธ ํ, ๋ค์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํด์ ๋ต๋ณ์ ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค:"
"[`impl IntoIterator for &Vec`](https://doc.rust-lang.org/std/vec/struct."
-"Vec.html#impl-IntoIterator-for-%26%27a%20Vec%3CT%2C%20A%3E), [`impl "
-"IntoIterator for Vec`](https://doc.rust-lang.org/std/vec/struct.Vec."
-"html#impl-IntoIterator-for-Vec%3CT%2C%20A%3E)"
+"Vec.html#impl-IntoIterator-for-%26'a+Vec%3CT,+A%3E), [`impl IntoIterator for "
+"Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html#impl-IntoIterator-"
+"for-Vec%3CT%2C%20A%3E)"
#: src/welcome-day-2.md:1
msgid "Welcome to Day 2"
@@ -6069,43 +6750,49 @@ msgstr ""
"}\n"
"```"
-#: src/structs.md:32
+#: src/structs.md:31 src/enums.md:34 src/enums/sizes.md:28 src/methods.md:30
+#: src/methods/example.md:46 src/pattern-matching.md:25
+#: src/pattern-matching/match-guards.md:22 src/control-flow/blocks.md:43
+msgid "Key Points:"
+msgstr "ํค ํฌ์ธํธ:"
+
+#: src/structs.md:33
msgid "Structs work like in C or C++."
msgstr "๊ตฌ์กฐ์ฒด๋ C/C++ ์ ์ ์ฌํฉ๋๋ค."
-#: src/structs.md:33
+#: src/structs.md:34
msgid "Like in C++, and unlike in C, no typedef is needed to define a type."
msgstr ""
"C++ ์ ๊ฐ์ง๋ง C์๋ ๋ฌ๋ฆฌ ํ์
์ ์ ์ํ๊ธฐ ์ํด 'typedef'๊ฐ ํ์ํ์ง ์์ต๋๋ค."
-#: src/structs.md:34
+#: src/structs.md:35
msgid "Unlike in C++, there is no inheritance between structs."
msgstr "C++ ์ ๋ฌ๋ฆฌ ๊ตฌ์กฐ์ฒด ๊ฐ ์์์ ์์ต๋๋ค."
-#: src/structs.md:35
+#: src/structs.md:36
msgid ""
"Methods are defined in an `impl` block, which we will see in following "
"slides."
msgstr ""
"๋ฉ์๋๋ `impl`๋ธ๋ก์ ์ ์ ํฉ๋๋ค. ๋ค์ ์ฌ๋ผ์ด๋์์ ํ์ธ ํ ์ ์์ต๋๋ค."
-#: src/structs.md:36
+#: src/structs.md:37
msgid ""
"This may be a good time to let people know there are different types of "
"structs. "
msgstr ""
-"์ฌ๋๋ค์๊ฒ ๋ค๋ฅธ ์ข
๋ฅ์ ๊ตฌ์กฐ์ฒด๊ฐ ์์์ ์๊ฒ ํ๊ธฐ์ ์ข์ ์๊ฐ์ผ ๊ฒ์
๋๋ค."
+"์ฌ๋๋ค์๊ฒ ๋ค๋ฅธ ์ข
๋ฅ์ ๊ตฌ์กฐ์ฒด๊ฐ ์์์ ์๊ฒ ํ๊ธฐ์ ์ข์ ์๊ฐ์ผ ๊ฒ์
๋๋ค. "
-#: src/structs.md:37
+#: src/structs.md:38
msgid ""
"Zero-sized structs `e.g., struct Foo;` might be used when implementing a "
"trait on some type but donโt have any data that you want to store in the "
"value itself. "
msgstr ""
"0 ํฌ๊ธฐ ๊ตฌ์กฐ์ฒด(์: `struct Foo;`)๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ง๋ง ํน์ ํ์
์ ํธ"
-"๋ ์์ ๊ตฌํํ ๋ ์ ์ฉํฉ๋๋ค."
+"๋ ์์ ๊ตฌํํ ๋ ์ ์ฉํฉ๋๋ค. "
-#: src/structs.md:38
+#: src/structs.md:39
msgid ""
"The next slide will introduce Tuple structs, used when the field names are "
"not important."
@@ -6113,7 +6800,7 @@ msgstr ""
"๋ค์ ์ฌ๋ผ์ด๋์์๋ ํ๋ ์ด๋ฆ์ด ๋ ์ค์ํ ๋ ์ฌ์ฉํ ์ ์๋ ํํ ๊ตฌ์กฐ์ฒด๋ฅผ ์"
"๊ฐํฉ๋๋ค."
-#: src/structs.md:39
+#: src/structs.md:40
msgid ""
"The syntax `..peter` allows us to copy the majority of the fields from the "
"old struct without having to explicitly type it all out. It must always be "
@@ -6197,19 +6884,19 @@ msgid ""
"Newtypes are a great way to encode additional information about the value in "
"a primitive type, for example:"
msgstr ""
-"๋ดํ์
์ ๋ค์๊ณผ ๊ฐ์ ์์ํ์
๊ฐ์ ํน๋ณํ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค."
+"๋ดํ์
์ ๊ธฐ๋ณธ ํ์
์ ๋ถ๊ฐ์ ์ธ ์๋ฏธ๋ฅผ ๋ํ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด:"
#: src/structs/tuple-structs.md:38
msgid "The number is measured in some units: `Newtons` in the example above."
-msgstr "๋จ์ ํ์๋ฅผ ์ํ ์ซ์: ์ ์์ ์์๋ ๋ดํด ๋จ์ ํ๊ธฐ๋ฅผ ์ํด ์ฌ์ฉํฉ๋๋ค."
+msgstr "์ซ์๊ฐ์ ๋จ์๋ฅผ ํ์ํ ์ ์์: ์์์ `Newtons`์ด ๊ทธ ์์
๋๋ค."
#: src/structs/tuple-structs.md:39
msgid ""
"The value passed some validation when it was created, so you no longer have "
"to validate it again at every use: 'PhoneNumber(String)`or`OddNumber(u32)\\`."
msgstr ""
-"๊ฐ์ด ์์ฑ๋ ๋ ์ด๋ฏธ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํต๊ณผ ํ์ผ๋ฏ๋ก ์ถ๊ฐ์ ์ธ ๊ฒ์ฌ๊ฐ ํ์์๋ ๊ฒฝ"
-"์ฐ: `PhoneNumber(String)`๋๋ `OddNumber(u32)`"
+"๊ฐ์ด ์์ฑ๋ ๋ ์ด๋ฏธ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํต๊ณผ ํ์ผ๋ฏ๋ก ์ถ๊ฐ์ ์ธ ๊ฒ์ฌ๊ฐ ํ์์์ต๋"
+"๋ค: `PhoneNumber(String)`๋๋ `OddNumber(u32)`."
#: src/structs/tuple-structs.md:40
msgid ""
@@ -6222,13 +6909,21 @@ msgid ""
"Rust generally doesnโt like inexplicit things, like automatic unwrapping or "
"for instance using booleans as integers."
msgstr ""
-"๋ฌ์คํธ๋ ๋์ฒด๋ก ๋ถ๋ช
ํ์ง ์์ ๊ฒ์ ์ซ์ดํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์๋์ผ๋ก unwrapํ๊ฑฐ"
-"๋ ๋ถ๋ฆฌ์ธ ๊ฐ์ ์ ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ๋ค์ด ๊ทธ๋ ์ต๋๋ค."
+"๋ฌ์คํธ๋ ๋ถ๋ช
ํ์ง ์์ ๊ฒ์ ์ซ์ดํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์๋์ผ๋ก unwrapํ๊ฑฐ๋ ๋ถ๋ฆฌ"
+"์ธ ๊ฐ์ ์ ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ๋ค์ด ๊ทธ๋ ์ต๋๋ค."
#: src/structs/tuple-structs.md:42
-msgid "Operator overloading is discussed on Day 3 (generics). "
+msgid "Operator overloading is discussed on Day 3 (generics)."
msgstr "์ฐ์ฐ์ ์ฌ์ ์๋ 3์ผ์ฐจ ์ ๋ค๋ฆญ ๋ถ๋ถ์์ ๋ค๋ฃน๋๋ค."
+#: src/structs/tuple-structs.md:43
+msgid ""
+"The example is a subtle reference to the [Mars Climate Orbiter](https://en."
+"wikipedia.org/wiki/Mars_Climate_Orbiter) failure."
+msgstr ""
+"์ด๋ [ํ์ฑ ๊ธฐํ ๊ถค๋์ (Mars Climate Orbiter)](https://en.wikipedia.org/wiki/"
+"Mars_Climate_Orbiter)์ ์คํจ ์์ธ์ผ๋ก ์ง๋ชฉ๋ ๋๋ํ ์
๋ ฅ ์ค๋ฅ๋ฅผ ๋ณด์ฌ์ค๋๋ค."
+
#: src/structs/field-shorthand.md:3
msgid ""
"If you already have variables with the right names, then you can create the "
@@ -6282,7 +6977,7 @@ msgid ""
"The `new` function could be written using `Self` as a type, as it is "
"interchangeable with the struct type name"
msgstr ""
-"`new`ํจ์๋ฅผ ๋ค์์ฒ๋ผ ๊ตฌ์กฐ์ฒด ์ด๋ฆ ๋์ `Self`๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํด๋ ๋ฉ๋๋ค."
+"`new`ํจ์๋ฅผ ๋ค์์ฒ๋ผ ๊ตฌ์กฐ์ฒด ์ด๋ฆ ๋์ `Self`๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํด๋ ๋ฉ๋๋ค"
#: src/structs/field-shorthand.md:29
msgid ""
@@ -6338,11 +7033,11 @@ msgid ""
"}\n"
"fn create_default() {\n"
" let tmp = Person {\n"
-" ..Default::default()\n"
+" ..Person::default()\n"
" };\n"
" let tmp = Person {\n"
" name: \"Sam\".to_string(),\n"
-" ..Default::default()\n"
+" ..Person::default()\n"
" };\n"
"}\n"
"```"
@@ -6363,11 +7058,11 @@ msgstr ""
"}\n"
"fn create_default() {\n"
" let tmp = Person {\n"
-" ..Default::default()\n"
+" ..Person::default()\n"
" };\n"
" let tmp = Person {\n"
" name: \"Sam\".to_string(),\n"
-" ..Default::default()\n"
+" ..Person::default()\n"
" };\n"
"}\n"
"```"
@@ -6399,6 +7094,7 @@ msgstr "`enum` ํค์๋๋ ๋ช๊ฐ์ง ์ ํ(variant)์ผ๋ก ํํ๋๋ ํ์
msgid ""
"```rust,editable\n"
"fn generate_random_number() -> i32 {\n"
+" // Implementation based on https://xkcd.com/221/\n"
" 4 // Chosen by fair dice roll. Guaranteed to be random.\n"
"}\n"
"\n"
@@ -6422,49 +7118,68 @@ msgid ""
"}\n"
"```"
msgstr ""
-
-#: src/enums.md:33 src/enums/sizes.md:29 src/methods.md:30
-#: src/methods/example.md:46 src/pattern-matching.md:25
-#: src/pattern-matching/match-guards.md:22 src/control-flow/blocks.md:42
-msgid "Key Points:"
-msgstr "ํค ํฌ์ธํธ:"
-
-#: src/enums.md:35
-msgid "Enumerations allow you to collect a set of values under one type"
-msgstr "์ด๊ฑฐํ์ ๊ฐ๋ค์ ์งํฉ์ ํ๋์ ํ์
์ผ๋ก ํํํ ์ ์๊ฒ ํฉ๋๋ค."
+"```rust,editable\n"
+"fn generate_random_number() -> i32 {\n"
+" // Implementation based on https://xkcd.com/221/\n"
+" 4 // Chosen by fair dice roll. Guaranteed to be random.\n"
+"}\n"
+"\n"
+"#[derive(Debug)]\n"
+"enum CoinFlip {\n"
+" Heads,\n"
+" Tails,\n"
+"}\n"
+"\n"
+"fn flip_coin() -> CoinFlip {\n"
+" let random_number = generate_random_number();\n"
+" if random_number % 2 == 0 {\n"
+" return CoinFlip::Heads;\n"
+" } else {\n"
+" return CoinFlip::Tails;\n"
+" }\n"
+"}\n"
+"\n"
+"fn main() {\n"
+" println!(\"You got: {:?}\", flip_coin());\n"
+"}\n"
+"```"
#: src/enums.md:36
-msgid ""
-"This page offers an enum type `CoinFlip` with two variants `Heads` and "
-"`Tail`. You might note the namespace when using variants."
-msgstr ""
-"์์ `CoinFlip` ์ด๊ฑฐํ ํ์
์ `Heads`์ `Tail` ๋๊ฐ์ง variant๋ฅผ ๊ฐ์ง๋๋ค. ์ด"
-"๊ฑฐํ ํ์
์ variant๋ ๋ค์์คํ์ด์ค๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํฉ๋๋ค."
+msgid "Enumerations allow you to collect a set of values under one type"
+msgstr "์ด๊ฑฐํ์ ๊ฐ๋ค์ ์งํฉ์ ํ๋์ ํ์
์ผ๋ก ํํํ ์ ์๊ฒ ํฉ๋๋ค"
#: src/enums.md:37
-msgid "This might be a good time to compare Structs and Enums:"
-msgstr "๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ๋น๊ตํด ๋ณผ๊น์?"
+msgid ""
+"This page offers an enum type `CoinFlip` with two variants `Heads` and "
+"`Tails`. You might note the namespace when using variants."
+msgstr ""
+"์์ `CoinFlip` ์ด๊ฑฐํ ํ์
์ `Heads`์ `Tail` ๋ ๊ฐ์ง variant๋ฅผ ๊ฐ์ง๋๋ค. ์ด"
+"๊ฑฐํ ํ์
์ variant๋ ๋ค์์คํ์ด์ค๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํฉ๋๋ค."
#: src/enums.md:38
+msgid "This might be a good time to compare Structs and Enums:"
+msgstr "๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค:"
+
+#: src/enums.md:39
msgid ""
"In both, you can have a simple version without fields (unit struct) or one "
"with different types of fields (variant payloads). "
msgstr ""
"๊ตฌ์กฐ์ฒด๋ ์ด๊ฑฐํ ๋ชจ๋, ํ๋๊ฐ ํ๋๋ ์๋ ๋จ์ํ ํํ๋ ๊ฐ๋ฅ ํ๊ณ , ์ฌ๋ฌ ํ์
"
-"์ ํ๋๋ฅผ ๊ฐ์ง ์๋ ์์ต๋๋ค."
+"์ ํ๋๋ฅผ ๊ฐ์ง ์๋ ์์ต๋๋ค. "
-#: src/enums.md:39
+#: src/enums.md:40
msgid "In both, associated functions are defined within an `impl` block."
msgstr "๋ ๋ค ์ฐ๊ดํจ์๋ฅผ `impl`๋ธ๋ก์ผ๋ก ์ ์ ํ ์ ์์ต๋๋ค."
-#: src/enums.md:40
+#: src/enums.md:41
msgid ""
"You could even implement the different variants of an enum with separate "
"structs but then they wouldnโt be the same type as they would if they were "
"all defined in an enum. "
msgstr ""
"์ด๊ฑฐํ ํ์
์ ๊ฐ variant๋ฅผ ๋ณ๋์ ๊ตฌ์กฐ์ฒด๋ก ์ ์ํ ์๋ ์์ง๋ง, ๊ทธ๋ฌ๋ฉด ์ด๊ฑฐํ"
-"์ ์ฌ์ฉํ์ ๋์ฒ๋ผ ํ๋์ ํ์
์ผ๋ก ์ทจ๊ธํ ์ ์์ต๋๋ค."
+"์ ์ฌ์ฉํ์ ๋์ฒ๋ผ ํ๋์ ํ์
์ผ๋ก ์ทจ๊ธํ ์ ์์ต๋๋ค. "
#: src/enums/variant-payloads.md:3
msgid ""
@@ -6562,7 +7277,7 @@ msgid ""
msgstr ""
"๊ฐ์ฅ ์์์ ๋ถํฐ ์ด๋ค ํจํด์ด ์ฃผ์ด์ง ๊ฐ๊ณผ ๋งค์นญํ๋์ง ๊ฒ์ฌํ ๋ค์, ๋งค์นญ๋ ๊ฒ์ด "
"๋ฐ๊ฒฌ๋๋ฉด ํ์ดํ๋ฅผ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์ํํฉ๋๋ค. ํ ๋ฒ ๋งค์นญ์ด ๋๊ณ ์ฝ๋๊ฐ ์ํ์ด ๋"
-"๋ฉด, ๋์ด์์ ๋งค์นญ์ ์์ต๋๋ค."
+"๋ฉด, ๋์ด์์ ๋งค์นญ์ ์์ต๋๋ค. "
#: src/enums/variant-payloads.md:39
msgid ""
@@ -6570,7 +7285,7 @@ msgid ""
"the Rust compiler provides by confirming when all cases are handled. "
msgstr ""
"๋งค์นญ ํจํด๋ค์ด ๋ถ์ถฉ๋ถ ํ๋ค๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ์ค๋ช
ํ์ธ์. ๋ฌ์คํธ ์ปดํ์ผ๋ฌ"
-"๋ ๋ชจ๋ ๊ฐ๋ฅํ ์ผ์ด์ค๋ค์ด ํธ๋ค๋ง ๋๋์ง ์ฒดํฌํ๋ค๋ ์ ์ ์๊ธฐ์ํค์ธ์."
+"๋ ๋ชจ๋ ๊ฐ๋ฅํ ์ผ์ด์ค๋ค์ด ํธ๋ค๋ง ๋๋์ง ์ฒดํฌํ๋ค๋ ์ ์ ์๊ธฐ์ํค์ธ์. "
#: src/enums/variant-payloads.md:40
msgid "`match` inspects a hidden discriminant field in the `enum`."
@@ -6582,7 +7297,7 @@ msgstr ""
msgid ""
"It is possible to retrieve the discriminant by calling `std::mem::"
"discriminant()`"
-msgstr "`std::mem::discriminant()`๋ฅผ ์ด์ฉํ์ฌ ์๋ณ์๋ฅผ ์ป์ ์๋ ์์ต๋๋ค."
+msgstr "`std::mem::discriminant()`๋ฅผ ์ด์ฉํ์ฌ ์๋ณ์๋ฅผ ์ป์ ์๋ ์์ต๋๋ค"
#: src/enums/variant-payloads.md:42
msgid ""
@@ -6614,13 +7329,12 @@ msgstr ""
#: src/enums/sizes.md:5
msgid ""
"```rust,editable\n"
+"use std::any::type_name;\n"
"use std::mem::{align_of, size_of};\n"
"\n"
-"macro_rules! dbg_size {\n"
-" ($t:ty) => {\n"
-" println!(\"{}: size {} bytes, align: {} bytes\",\n"
-" stringify!($t), size_of::<$t>(), align_of::<$t>());\n"
-" };\n"
+"fn dbg_size() {\n"
+" println!(\"{}: size {} bytes, align: {} bytes\",\n"
+" type_name::(), size_of::(), align_of::());\n"
"}\n"
"\n"
"enum Foo {\n"
@@ -6629,18 +7343,17 @@ msgid ""
"}\n"
"\n"
"fn main() {\n"
-" dbg_size!(Foo);\n"
+" dbg_size::();\n"
"}\n"
"```"
msgstr ""
"```rust,editable\n"
+"use std::any::type_name;\n"
"use std::mem::{align_of, size_of};\n"
"\n"
-"macro_rules! dbg_size {\n"
-" ($t:ty) => {\n"
-" println!(\"{}: size {} bytes, align: {} bytes\",\n"
-" stringify!($t), size_of::<$t>(), align_of::<$t>());\n"
-" };\n"
+"fn dbg_size() {\n"
+" println!(\"{}: size {} bytes, align: {} bytes\",\n"
+" type_name::(), size_of::(), align_of::());\n"
"}\n"
"\n"
"enum Foo {\n"
@@ -6649,11 +7362,11 @@ msgstr ""
"}\n"
"\n"
"fn main() {\n"
-" dbg_size!(Foo);\n"
+" dbg_size::();\n"
"}\n"
"```"
-#: src/enums/sizes.md:25
+#: src/enums/sizes.md:24
msgid ""
"See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout."
"html)."
@@ -6661,8 +7374,7 @@ msgstr ""
"์์ธํ ์ฌํญ์ [๊ณต์๋ฌธ์](https://doc.rust-lang.org/reference/type-layout."
"html)๋ฅผ ํ์ธํ์ธ์."
-#: src/enums/sizes.md:31
-#, fuzzy
+#: src/enums/sizes.md:30
msgid ""
"Internally Rust is using a field (discriminant) to keep track of the enum "
"variant."
@@ -6670,14 +7382,12 @@ msgstr ""
"๋ฌ์คํธ๋ ์ด๊ฑฐํ variant๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์๋ณ์(discriminant) ํ๋"
"๋ฅผ ์ฌ์ฉํฉ๋๋ค."
-#: src/enums/sizes.md:33
-#, fuzzy
+#: src/enums/sizes.md:32
msgid ""
"You can control the discriminant if needed (e.g., for compatibility with C):"
-msgstr "C์์ ์ฐ๋๊ณผ ๊ฐ์ ์ด์ ๋ก ์๋ณ์๋ฅผ ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค:"
+msgstr "C์์ ์ฐ๋์ ์ํด ์๋ณ์ ๊ฐ์ ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค:"
-#: src/enums/sizes.md:35
-#, fuzzy
+#: src/enums/sizes.md:34
msgid ""
"```rust,editable\n"
"#[repr(u32)]\n"
@@ -6709,8 +7419,7 @@ msgstr ""
"}\n"
"```"
-#: src/enums/sizes.md:50
-#, fuzzy
+#: src/enums/sizes.md:49
msgid ""
"Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 "
"bytes."
@@ -6718,62 +7427,62 @@ msgstr ""
"`repr` ์์ฑ์ด ์๋ค๋ฉด 10001์ด 2 ๋ฐ์ดํธ๋ก ํํ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์๋ณ์์ ํ์
ํฌ"
"๊ธฐ๋ 2 ๋ฐ์ดํธ๊ฐ ๋ฉ๋๋ค."
-#: src/enums/sizes.md:54
-#, fuzzy
+#: src/enums/sizes.md:53
msgid "Try out other types such as"
-msgstr "๋ค๋ฅธ ํ์
๋ค๋ ํ์ธํด๋ณด์ธ์."
+msgstr "๋ค๋ฅธ ํ์
๋ค๋ ํ์ธํด๋ณด์ธ์"
+
+#: src/enums/sizes.md:55
+msgid "`dbg_size!(bool)`: size 1 bytes, align: 1 bytes,"
+msgstr "`dbg_size!(bool)`: ํฌ๊ธฐ 1 ๋ฐ์ดํธ, ์ ๋ ฌ: 1 ๋ฐ์ดํธ,"
#: src/enums/sizes.md:56
-#, fuzzy
-msgid "`dbg_size!(bool)`: size 1 bytes, align: 1 bytes,"
-msgstr "`dbg_size!(bool)`: size 1 bytes, align: 1 bytes"
-
-#: src/enums/sizes.md:57
-#, fuzzy
msgid ""
"`dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche optimization, "
"see below),"
msgstr ""
-"`dbg_size!(Option)`: size 1 bytes, align: 1 bytes (๋์น ์ต์ ํ, ์๋ ์ค"
-"๋ช
์ฐธ์กฐ)"
+"`dbg_size!(Option)`: ํฌ๊ธฐ 1 ๋ฐ์ดํธ, ์ ๋ ฌ: 1 ๋ฐ์ดํธ (๋์น ์ต์ ํ, ์๋ "
+"์ค๋ช
์ฐธ์กฐ)"
+
+#: src/enums/sizes.md:57
+msgid "`dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (on a 64-bit machine),"
+msgstr "`dbg_size!(&i32)`: ํฌ๊ธฐ 8 ๋ฐ์ดํธ, ์ ๋ ฌ: 8 ๋ฐ์ดํธ (64๋นํธ ๋จธ์ ์ธ ๊ฒฝ์ฐ)"
#: src/enums/sizes.md:58
-#, fuzzy
-msgid "`dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (on a 64-bit machine),"
-msgstr "`dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (64๋นํธ ๋จธ์ ์ธ ๊ฒฝ์ฐ)"
-
-#: src/enums/sizes.md:59
-#, fuzzy
msgid ""
"`dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer "
"optimization, see below)."
msgstr ""
-"`dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (๋ํฌ์ธํฐ ์ต์ ํ, ์"
+"`dbg_size!(Option<&i32>)`: ํฌ๊ธฐ 8 ๋ฐ์ดํธ, ์ ๋ ฌ: 8 ๋ฐ์ดํธ (๋ํฌ์ธํฐ ์ต์ ํ, ์"
"๋ ์ค๋ช
์ฐธ์กฐ)"
-#: src/enums/sizes.md:61
-#, fuzzy
+#: src/enums/sizes.md:60
msgid ""
-"Niche optimization: Rust will merge use unused bit patterns for the enum "
+"Niche optimization: Rust will merge unused bit patterns for the enum "
"discriminant."
msgstr ""
"๋์น ์ต์ ํ: ๋ฌ์คํธ๋ ์ด๊ฑฐํ ์๋ณ์๋ฅผ ์ฌ์ฉ๋์ง ์์ ๋นํธ ํจํด๊ณผ ๋ณํฉํฉ๋๋ค."
-#: src/enums/sizes.md:64
+#: src/enums/sizes.md:63
msgid ""
"Null pointer optimization: For [some types](https://doc.rust-lang.org/std/"
"option/#representation), Rust guarantees that `size_of::()` equals "
"`size_of::