From 4ac1cdca766638e07f5acef13735d2397eaa11f0 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 17 Jun 2024 05:55:21 -0400 Subject: [PATCH] uk: refresh translations (#2148) uk: refresh translations ``` MDBOOK_OUTPUT='{"xgettext": {"pot-file": "messages.pot", "granularity": 0}}' mdbook build -d po msgmerge --update po/uk.po po/messages.pot ``` Signed-off-by: Andriy Redko --- po/uk.po | 14845 +++++++++++++++++++++++++++++------------------------ 1 file changed, 8139 insertions(+), 6706 deletions(-) diff --git a/po/uk.po b/po/uk.po index 727a779a..6c6a5d54 100644 --- a/po/uk.po +++ b/po/uk.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: Comprehensive Rust 🦀\n" -"POT-Creation-Date: 2024-01-24T13:24:49+01:00\n" +"POT-Creation-Date: 2024-06-15T12:00:43-04:00\n" "PO-Revision-Date: 2023-10-18 20:05+0300\n" "Last-Translator: Oleksandr Leoshko \n" "Language-Team: \n" @@ -20,15 +20,15 @@ msgstr "Ласкаво просимо в Comprehensive Rust 🦀" msgid "Running the Course" msgstr "Проведення курсу" -#: src/SUMMARY.md src/running-the-course/course-structure.md +#: src/SUMMARY.md src/running-the-course/course-structure.md:1 msgid "Course Structure" msgstr "Структура курсу" -#: src/SUMMARY.md src/running-the-course/keyboard-shortcuts.md +#: src/SUMMARY.md src/running-the-course/keyboard-shortcuts.md:1 msgid "Keyboard Shortcuts" msgstr "Гарячі клавіші" -#: src/SUMMARY.md src/running-the-course/translations.md +#: src/SUMMARY.md src/running-the-course/translations.md:1 msgid "Translations" msgstr "Переклади" @@ -52,23 +52,23 @@ msgstr "Локальний запуск Cargo" msgid "Day 1: Morning" msgstr "День 1: Ранок" -#: src/SUMMARY.md +#: src/SUMMARY.md src/concurrency/welcome-async.md msgid "Welcome" msgstr "Ласкаво просимо" -#: src/SUMMARY.md src/hello-world.md src/hello-world/hello-world.md +#: src/SUMMARY.md src/hello-world.md src/types-and-values/hello-world.md:5 msgid "Hello, World" msgstr "Hello World!" -#: src/SUMMARY.md src/hello-world/what-is-rust.md +#: src/SUMMARY.md src/hello-world/what-is-rust.md:5 msgid "What is Rust?" msgstr "Що таке Rust?" -#: src/SUMMARY.md src/hello-world/benefits.md +#: src/SUMMARY.md src/hello-world/benefits.md:5 msgid "Benefits of Rust" msgstr "Переваги Rust" -#: src/SUMMARY.md src/hello-world/playground.md +#: src/SUMMARY.md src/hello-world/playground.md:5 msgid "Playground" msgstr "Ігровий майданчик" @@ -76,40 +76,36 @@ msgstr "Ігровий майданчик" msgid "Types and Values" msgstr "Типи та значення" -#: src/SUMMARY.md src/types-and-values/variables.md +#: src/SUMMARY.md src/types-and-values/variables.md:5 msgid "Variables" msgstr "Змінні" -#: src/SUMMARY.md src/types-and-values/values.md +#: src/SUMMARY.md src/types-and-values/values.md:5 msgid "Values" msgstr "Значення" -#: src/SUMMARY.md src/types-and-values/arithmetic.md +#: src/SUMMARY.md src/types-and-values/arithmetic.md:5 msgid "Arithmetic" msgstr "Арифметика" -#: src/SUMMARY.md src/types-and-values/strings.md -msgid "Strings" -msgstr "Рядки" - -#: src/SUMMARY.md src/types-and-values/inference.md +#: src/SUMMARY.md src/types-and-values/inference.md:5 msgid "Type Inference" msgstr "Виведення типів" -#: src/SUMMARY.md src/types-and-values/exercise.md +#: src/SUMMARY.md src/types-and-values/exercise.md:5 msgid "Exercise: Fibonacci" msgstr "Вправа: Фібоначчі" -#: src/SUMMARY.md src/types-and-values/solution.md -#: src/control-flow-basics/solution.md src/tuples-and-arrays/solution.md -#: src/references/solution.md src/user-defined-types/solution.md -#: src/pattern-matching/solution.md src/methods-and-traits/solution.md -#: src/generics/solution.md src/std-types/solution.md -#: src/std-traits/solution.md src/memory-management/solution.md -#: src/smart-pointers/solution.md src/borrowing/solution.md -#: src/slices-and-lifetimes/solution.md src/iterators/solution.md -#: src/modules/solution.md src/testing/solution.md -#: src/error-handling/solution.md src/unsafe-rust/solution.md +#: src/SUMMARY.md src/types-and-values/solution.md:1 +#: src/control-flow-basics/solution.md:1 src/tuples-and-arrays/solution.md:1 +#: src/references/solution.md:1 src/user-defined-types/solution.md:1 +#: src/pattern-matching/solution.md:1 src/methods-and-traits/solution.md:1 +#: src/generics/solution.md:1 src/std-types/solution.md:1 +#: src/std-traits/solution.md:1 src/memory-management/solution.md:1 +#: src/smart-pointers/solution.md:1 src/borrowing/solution.md:1 +#: src/lifetimes/solution.md:1 src/iterators/solution.md:1 +#: src/modules/solution.md:1 src/testing/solution.md:1 +#: src/error-handling/solution.md:1 src/unsafe-rust/solution.md:1 msgid "Solution" msgstr "Рішення" @@ -117,31 +113,48 @@ msgstr "Рішення" msgid "Control Flow Basics" msgstr "Основи потоку керування" -#: src/SUMMARY.md src/control-flow-basics/conditionals.md -msgid "Conditionals" -msgstr "Умовні слова" +#: src/SUMMARY.md +#, fuzzy +msgid "`if` Expressions" +msgstr "Вирази `if`" -#: src/SUMMARY.md src/control-flow-basics/loops.md +#: src/SUMMARY.md src/control-flow-basics/loops.md:5 msgid "Loops" msgstr "Цикли" -#: src/SUMMARY.md src/control-flow-basics/break-continue.md +#: src/SUMMARY.md src/control-flow-basics/loops/for.md:1 +msgid "`for`" +msgstr "`for`" + +#: src/SUMMARY.md src/control-flow-basics/loops/loop.md:1 +msgid "`loop`" +msgstr "`loop`" + +#: src/SUMMARY.md src/control-flow-basics/break-continue.md:5 msgid "`break` and `continue`" msgstr "`break` та `continue`" -#: src/SUMMARY.md src/control-flow-basics/blocks-and-scopes.md +#: src/SUMMARY.md src/control-flow-basics/break-continue/labels.md:1 +msgid "Labels" +msgstr "" + +#: src/SUMMARY.md src/control-flow-basics/blocks-and-scopes.md:5 msgid "Blocks and Scopes" msgstr "Блоки та області застосування" -#: src/SUMMARY.md src/control-flow-basics/functions.md +#: src/SUMMARY.md src/control-flow-basics/blocks-and-scopes/scopes.md:1 +msgid "Scopes and Shadowing" +msgstr "Області видимості та затінення" + +#: src/SUMMARY.md src/control-flow-basics/functions.md:5 msgid "Functions" msgstr "Функції" -#: src/SUMMARY.md src/control-flow-basics/macros.md +#: src/SUMMARY.md src/control-flow-basics/macros.md:5 msgid "Macros" msgstr "Макроси" -#: src/SUMMARY.md src/control-flow-basics/exercise.md +#: src/SUMMARY.md src/control-flow-basics/exercise.md:5 msgid "Exercise: Collatz Sequence" msgstr "Вправа: Послідовність Коллатца" @@ -150,24 +163,27 @@ msgid "Day 1: Afternoon" msgstr "День 1: Полудень" #: src/SUMMARY.md src/tuples-and-arrays.md -#: src/tuples-and-arrays/tuples-and-arrays.md msgid "Tuples and Arrays" msgstr "Кортежі та масиви" -#: src/SUMMARY.md src/tuples-and-arrays/iteration.md +#: src/SUMMARY.md src/tuples-and-arrays/arrays.md:5 +msgid "Arrays" +msgstr "Масиви" + +#: src/SUMMARY.md src/tuples-and-arrays/tuples.md:5 +msgid "Tuples" +msgstr "Кортежі" + +#: src/SUMMARY.md src/tuples-and-arrays/iteration.md:5 msgid "Array Iteration" msgstr "Ітерація масиву" -#: src/SUMMARY.md src/tuples-and-arrays/match.md src/pattern-matching.md -msgid "Pattern Matching" -msgstr "Зіставлення зразків" - -#: src/SUMMARY.md src/tuples-and-arrays/destructuring.md -#: src/pattern-matching/destructuring.md -msgid "Destructuring" +#: src/SUMMARY.md src/tuples-and-arrays/destructuring.md:5 +#, fuzzy +msgid "Patterns and Destructuring" msgstr "Деструктурування" -#: src/SUMMARY.md src/tuples-and-arrays/exercise.md +#: src/SUMMARY.md src/tuples-and-arrays/exercise.md:5 msgid "Exercise: Nested Arrays" msgstr "Вправа: Вкладені масиви" @@ -175,15 +191,23 @@ msgstr "Вправа: Вкладені масиви" msgid "References" msgstr "Посилання" -#: src/SUMMARY.md src/references/shared.md +#: src/SUMMARY.md src/references/shared.md:5 msgid "Shared References" msgstr "Спільні посилання" -#: src/SUMMARY.md src/references/exclusive.md +#: src/SUMMARY.md src/references/exclusive.md:5 msgid "Exclusive References" msgstr "Ексклюзивні посилання" -#: src/SUMMARY.md src/references/exercise.md +#: src/SUMMARY.md +msgid "Slices: `&[T]`" +msgstr "Зрізи: `&[T]`" + +#: src/SUMMARY.md src/references/strings.md:9 +msgid "Strings" +msgstr "Рядки" + +#: src/SUMMARY.md src/references/exercise.md:5 msgid "Exercise: Geometry" msgstr "Вправа: Геометрія" @@ -191,28 +215,33 @@ msgstr "Вправа: Геометрія" msgid "User-Defined Types" msgstr "Типи, які визначаються користувачем" -#: src/SUMMARY.md src/user-defined-types/named-structs.md +#: src/SUMMARY.md src/user-defined-types/named-structs.md:5 msgid "Named Structs" msgstr "Іменовані структури" -#: src/SUMMARY.md src/user-defined-types/tuple-structs.md +#: src/SUMMARY.md src/user-defined-types/tuple-structs.md:9 msgid "Tuple Structs" msgstr "Кортежні структури" -#: src/SUMMARY.md src/user-defined-types/enums.md -#: src/pattern-matching/destructuring.md +#: src/SUMMARY.md src/user-defined-types/enums.md:5 +#: src/pattern-matching/destructuring-enums.md:5 msgid "Enums" msgstr "Перелічувані типи" -#: src/SUMMARY.md src/user-defined-types/static-and-const.md -msgid "Static and Const" -msgstr "Static та Const" +#: src/SUMMARY.md +msgid "Static" +msgstr "Статична" -#: src/SUMMARY.md src/user-defined-types/aliases.md +#: src/SUMMARY.md +#, fuzzy +msgid "Const" +msgstr "Постійна" + +#: src/SUMMARY.md src/user-defined-types/aliases.md:5 msgid "Type Aliases" msgstr "Псевдоніми типу" -#: src/SUMMARY.md src/user-defined-types/exercise.md +#: src/SUMMARY.md src/user-defined-types/exercise.md:5 msgid "Exercise: Elevator Events" msgstr "Вправа: події в ліфті" @@ -220,11 +249,28 @@ msgstr "Вправа: події в ліфті" msgid "Day 2: Morning" msgstr "День 2: Ранок" -#: src/SUMMARY.md src/pattern-matching/let-control-flow.md +#: src/SUMMARY.md src/pattern-matching.md +msgid "Pattern Matching" +msgstr "Зіставлення зразків" + +#: src/SUMMARY.md src/pattern-matching/match.md:5 +msgid "Matching Values" +msgstr "" + +#: src/SUMMARY.md +msgid "Destructuring Structs" +msgstr "Деструктурування структур" + +#: src/SUMMARY.md +#, fuzzy +msgid "Destructuring Enums" +msgstr "Деструктурування" + +#: src/SUMMARY.md src/pattern-matching/let-control-flow.md:5 msgid "Let Control Flow" msgstr "Потік контролю Let" -#: src/SUMMARY.md src/pattern-matching/exercise.md +#: src/SUMMARY.md src/pattern-matching/exercise.md:5 msgid "Exercise: Expression Evaluation" msgstr "Вправа: обчислення виразу" @@ -232,63 +278,84 @@ msgstr "Вправа: обчислення виразу" msgid "Methods and Traits" msgstr "Методи та Трейти" -#: src/SUMMARY.md src/methods-and-traits/methods.md +#: src/SUMMARY.md src/methods-and-traits/methods.md:5 msgid "Methods" msgstr "Методи" -#: src/SUMMARY.md src/methods-and-traits/traits.md +#: src/SUMMARY.md src/methods-and-traits/traits.md:5 msgid "Traits" msgstr "Трейти" -#: src/SUMMARY.md src/methods-and-traits/deriving.md +#: src/SUMMARY.md src/methods-and-traits/traits/implementing.md:1 +#, fuzzy +msgid "Implementing Traits" +msgstr "Реалізація небезпечних трейтів" + +#: src/SUMMARY.md src/methods-and-traits/traits/supertraits.md:1 +#, fuzzy +msgid "Supertraits" +msgstr "Більше трейтів" + +#: src/SUMMARY.md src/methods-and-traits/traits/associated-types.md:1 +#, fuzzy +msgid "Associated Types" +msgstr "Спільні типи" + +#: src/SUMMARY.md src/methods-and-traits/deriving.md:5 msgid "Deriving" msgstr "Виведення" -#: src/SUMMARY.md src/methods-and-traits/trait-objects.md -msgid "Trait Objects" -msgstr "Об'єкти Трейтів" - -#: src/SUMMARY.md src/methods-and-traits/exercise.md +#: src/SUMMARY.md msgid "Exercise: Generic Logger" msgstr "Вправа: Загальний логгер" -#: src/SUMMARY.md src/generics.md -msgid "Generics" -msgstr "Узагальнені типи" - -#: src/SUMMARY.md src/generics/generic-functions.md -msgid "Generic Functions" -msgstr "Узагальнені функції" - -#: src/SUMMARY.md src/generics/generic-data.md -msgid "Generic Data Types" -msgstr "Узагальнені типи даних" - -#: src/SUMMARY.md src/generics/trait-bounds.md -msgid "Trait Bounds" -msgstr "Обмеження трейту" - -#: src/SUMMARY.md src/generics/impl-trait.md -msgid "`impl Trait`" -msgstr "`impl Trait`" - -#: src/SUMMARY.md src/generics/exercise.md -msgid "Exercise: Generic `min`" -msgstr "Вправа: узагальнена `min`" - #: src/SUMMARY.md msgid "Day 2: Afternoon" msgstr "День 2: Полудень" +#: src/SUMMARY.md src/generics.md +msgid "Generics" +msgstr "Узагальнені типи" + +#: src/SUMMARY.md src/generics/generic-functions.md:5 +msgid "Generic Functions" +msgstr "Узагальнені функції" + +#: src/SUMMARY.md src/generics/generic-data.md:5 +msgid "Generic Data Types" +msgstr "Узагальнені типи даних" + +#: src/SUMMARY.md src/generics/generic-traits.md:5 +#, fuzzy +msgid "Generic Traits" +msgstr "Узагальнені типи" + +#: src/SUMMARY.md src/generics/trait-bounds.md:5 +msgid "Trait Bounds" +msgstr "Обмеження трейту" + +#: src/SUMMARY.md src/generics/impl-trait.md:5 +msgid "`impl Trait`" +msgstr "`impl Trait`" + +#: src/SUMMARY.md src/generics/dyn-trait.md:5 +#, fuzzy +msgid "`dyn Trait`" +msgstr "`impl Trait`" + +#: src/SUMMARY.md src/generics/exercise.md:5 +msgid "Exercise: Generic `min`" +msgstr "Вправа: узагальнена `min`" + #: src/SUMMARY.md src/std-types.md msgid "Standard Library Types" msgstr "Типи стандартної бібліотеки" -#: src/SUMMARY.md src/std-types/std.md +#: src/SUMMARY.md src/std-types/std.md:5 msgid "Standard Library" msgstr "Стандартна бібліотека" -#: src/SUMMARY.md src/std-types/docs.md +#: src/SUMMARY.md src/std-types/docs.md:5 msgid "Documentation" msgstr "Документація" @@ -296,23 +363,24 @@ msgstr "Документація" msgid "`Option`" msgstr "`Option`" -#: src/SUMMARY.md +#: src/SUMMARY.md src/error-handling/result.md:5 msgid "`Result`" msgstr "`Result`" -#: src/SUMMARY.md src/android/interoperability/cpp/type-mapping.md +#: src/SUMMARY.md src/android/aidl/types/primitives.md:14 +#: src/android/interoperability/cpp/type-mapping.md:5 msgid "`String`" msgstr "`String`" -#: src/SUMMARY.md src/std-types/vec.md +#: src/SUMMARY.md src/std-types/vec.md:5 msgid "`Vec`" msgstr "`Vec`" -#: src/SUMMARY.md src/std-types/hashmap.md src/bare-metal/no_std.md +#: src/SUMMARY.md src/std-types/hashmap.md:5 src/bare-metal/no_std.md msgid "`HashMap`" msgstr "`HashMap`" -#: src/SUMMARY.md src/std-types/exercise.md +#: src/SUMMARY.md src/std-types/exercise.md:5 msgid "Exercise: Counter" msgstr "Вправа: Лічильник" @@ -320,23 +388,24 @@ msgstr "Вправа: Лічильник" msgid "Standard Library Traits" msgstr "Трейти стандартної бібліотеки" -#: src/SUMMARY.md src/std-traits/comparisons.md src/async.md +#: src/SUMMARY.md src/std-traits/comparisons.md:5 +#: src/concurrency/welcome-async.md msgid "Comparisons" msgstr "Порівняння" -#: src/SUMMARY.md src/std-traits/operators.md +#: src/SUMMARY.md src/std-traits/operators.md:5 msgid "Operators" msgstr "Оператори" -#: src/SUMMARY.md src/std-traits/from-and-into.md +#: src/SUMMARY.md src/std-traits/from-and-into.md:5 msgid "`From` and `Into`" msgstr "`From` та `Into`" -#: src/SUMMARY.md src/std-traits/casting.md +#: src/SUMMARY.md src/std-traits/casting.md:5 msgid "Casting" msgstr "Приведення" -#: src/SUMMARY.md src/std-traits/read-and-write.md +#: src/SUMMARY.md src/std-traits/read-and-write.md:5 msgid "`Read` and `Write`" msgstr "`Read` та `Write`" @@ -344,11 +413,11 @@ msgstr "`Read` та `Write`" msgid "`Default`, struct update syntax" msgstr "`Default`, синтаксис оновлення структури" -#: src/SUMMARY.md src/std-traits/closures.md +#: src/SUMMARY.md src/std-traits/closures.md:5 msgid "Closures" msgstr "Закриття" -#: src/SUMMARY.md src/std-traits/exercise.md +#: src/SUMMARY.md src/std-traits/exercise.md:5 msgid "Exercise: ROT13" msgstr "Вправа: ROT13" @@ -360,19 +429,19 @@ msgstr "День 3: Ранок" msgid "Memory Management" msgstr "Управління пам'яттю" -#: src/SUMMARY.md src/memory-management/review.md +#: src/SUMMARY.md src/memory-management/review.md:5 msgid "Review of Program Memory" msgstr "Огляд пам'яті програми" -#: src/SUMMARY.md src/memory-management/approaches.md +#: src/SUMMARY.md src/memory-management/approaches.md:5 msgid "Approaches to Memory Management" msgstr "Підходи до управління пам'яттю" -#: src/SUMMARY.md src/memory-management/ownership.md +#: src/SUMMARY.md src/memory-management/ownership.md:5 msgid "Ownership" msgstr "Володіння" -#: src/SUMMARY.md src/memory-management/move.md +#: src/SUMMARY.md src/memory-management/move.md:5 msgid "Move Semantics" msgstr "Семантика переміщення" @@ -380,7 +449,7 @@ msgstr "Семантика переміщення" msgid "`Clone`" msgstr "`Clone`" -#: src/SUMMARY.md src/memory-management/copy-types.md +#: src/SUMMARY.md src/memory-management/copy-types.md:5 msgid "Copy Types" msgstr "Типи які копіюються" @@ -388,7 +457,7 @@ msgstr "Типи які копіюються" msgid "`Drop`" msgstr "`Drop`" -#: src/SUMMARY.md src/memory-management/exercise.md +#: src/SUMMARY.md src/memory-management/exercise.md:5 msgid "Exercise: Builder Type" msgstr "Вправа: Тип будівельника" @@ -396,16 +465,21 @@ msgstr "Вправа: Тип будівельника" msgid "Smart Pointers" msgstr "Розумні вказівники" -#: src/SUMMARY.md src/smart-pointers/box.md -#: src/android/interoperability/cpp/type-mapping.md +#: src/SUMMARY.md src/smart-pointers/box.md:5 +#: src/android/interoperability/cpp/type-mapping.md:9 msgid "`Box`" msgstr "`Box`" -#: src/SUMMARY.md src/smart-pointers/rc.md +#: src/SUMMARY.md src/smart-pointers/rc.md:5 msgid "`Rc`" msgstr "`Rc`" -#: src/SUMMARY.md src/smart-pointers/exercise.md +#: src/SUMMARY.md src/smart-pointers/trait-objects.md:5 +#, fuzzy +msgid "Owned Trait Objects" +msgstr "Об'єкти Трейтів" + +#: src/SUMMARY.md src/smart-pointers/exercise.md:5 msgid "Exercise: Binary Tree" msgstr "Вправа: Бінарне дерево" @@ -417,35 +491,32 @@ msgstr "День 3: Полудень" msgid "Borrowing" msgstr "Запозичення" -#: src/SUMMARY.md src/borrowing/shared.md +#: src/SUMMARY.md src/borrowing/shared.md:5 msgid "Borrowing a Value" msgstr "Запозичення значення" -#: src/SUMMARY.md src/borrowing/borrowck.md +#: src/SUMMARY.md src/borrowing/borrowck.md:5 msgid "Borrow Checking" msgstr "Перевірка запозичення" -#: src/SUMMARY.md src/borrowing/interior-mutability.md +#: src/SUMMARY.md src/borrowing/examples.md:5 +msgid "Borrow Errors" +msgstr "" + +#: src/SUMMARY.md src/borrowing/interior-mutability.md:5 msgid "Interior Mutability" msgstr "Внутрішня мутабельність" -#: src/SUMMARY.md src/borrowing/exercise.md +#: src/SUMMARY.md src/borrowing/exercise.md:5 msgid "Exercise: Health Statistics" msgstr "Вправа: Статистика здоров’я" -#: src/SUMMARY.md src/slices-and-lifetimes.md -msgid "Slices and Lifetimes" -msgstr "Зрізи та тривалість життя" +#: src/SUMMARY.md src/lifetimes.md +#, fuzzy +msgid "Lifetimes" +msgstr "Тривалість життя структур" -#: src/SUMMARY.md -msgid "Slices: `&[T]`" -msgstr "Зрізи: `&[T]`" - -#: src/SUMMARY.md src/slices-and-lifetimes/str.md -msgid "String References" -msgstr "Рядкові посилання" - -#: src/SUMMARY.md src/slices-and-lifetimes/lifetime-annotations.md +#: src/SUMMARY.md src/lifetimes/lifetime-annotations.md:5 msgid "Lifetime Annotations" msgstr "Анотації тривалісті життя" @@ -457,7 +528,7 @@ msgstr "Упущення тривалісті життя" msgid "Struct Lifetimes" msgstr "Тривалість життя структур" -#: src/SUMMARY.md src/slices-and-lifetimes/exercise.md +#: src/SUMMARY.md src/lifetimes/exercise.md:5 msgid "Exercise: Protobuf Parsing" msgstr "Вправа: Розбір Protobuf" @@ -469,11 +540,11 @@ msgstr "День 4: Ранок" msgid "Iterators" msgstr "Ітератори" -#: src/SUMMARY.md src/iterators/iterator.md src/bare-metal/no_std.md +#: src/SUMMARY.md src/iterators/iterator.md:5 src/bare-metal/no_std.md msgid "`Iterator`" msgstr "`Ітератор`" -#: src/SUMMARY.md src/iterators/intoiterator.md +#: src/SUMMARY.md src/iterators/intoiterator.md:5 msgid "`IntoIterator`" msgstr "`IntoIterator`" @@ -481,19 +552,19 @@ msgstr "`IntoIterator`" msgid "`FromIterator`" msgstr "`FromIterator`" -#: src/SUMMARY.md src/iterators/exercise.md +#: src/SUMMARY.md src/iterators/exercise.md:5 msgid "Exercise: Iterator Method Chaining" msgstr "Вправа: ланцюжок методів ітератора" -#: src/SUMMARY.md src/modules.md src/modules/modules.md +#: src/SUMMARY.md src/modules.md src/modules/modules.md:5 msgid "Modules" msgstr "Модулі" -#: src/SUMMARY.md src/modules/filesystem.md +#: src/SUMMARY.md src/modules/filesystem.md:5 msgid "Filesystem Hierarchy" msgstr "Ієрархія файлової системи" -#: src/SUMMARY.md src/modules/visibility.md +#: src/SUMMARY.md src/modules/visibility.md:5 msgid "Visibility" msgstr "Видимість" @@ -501,7 +572,7 @@ msgstr "Видимість" msgid "`use`, `super`, `self`" msgstr "`use`, `super`, `self`" -#: src/SUMMARY.md src/modules/exercise.md +#: src/SUMMARY.md src/modules/exercise.md:5 msgid "Exercise: Modules for a GUI Library" msgstr "Вправа: Модулі для бібліотеки графічного інтерфейсу користувача" @@ -513,27 +584,15 @@ msgstr "Тестування" msgid "Test Modules" msgstr "Тестові модулі" -#: src/SUMMARY.md src/testing/other.md +#: src/SUMMARY.md src/testing/other.md:5 msgid "Other Types of Tests" msgstr "Інші типи тестів" -#: src/SUMMARY.md src/testing/useful-crates.md -msgid "Useful Crates" -msgstr "Корисні крейти" - -#: src/SUMMARY.md src/testing/googletest.md -msgid "GoogleTest" -msgstr "GoogleTest" - -#: src/SUMMARY.md src/testing/mocking.md -msgid "Mocking" -msgstr "Mocking" - -#: src/SUMMARY.md src/testing/lints.md +#: src/SUMMARY.md src/testing/lints.md:5 msgid "Compiler Lints and Clippy" msgstr "Лінти компілятора та Clippy" -#: src/SUMMARY.md src/testing/exercise.md +#: src/SUMMARY.md src/testing/exercise.md:5 msgid "Exercise: Luhn Algorithm" msgstr "Вправа: Алгоритм Луна" @@ -545,15 +604,15 @@ msgstr "День 4: Полудень" msgid "Error Handling" msgstr "Обробка помилок" -#: src/SUMMARY.md src/error-handling/panics.md +#: src/SUMMARY.md src/error-handling/panics.md:5 msgid "Panics" msgstr "Паніки" -#: src/SUMMARY.md src/error-handling/try.md +#: src/SUMMARY.md src/error-handling/try.md:5 msgid "Try Operator" msgstr "Оператор спроб" -#: src/SUMMARY.md src/error-handling/try-conversions.md +#: src/SUMMARY.md src/error-handling/try-conversions.md:5 msgid "Try Conversions" msgstr "Перетворення спроб" @@ -561,7 +620,7 @@ msgstr "Перетворення спроб" msgid "`Error` Trait" msgstr "`Error` трейт" -#: src/SUMMARY.md src/error-handling/thiserror-and-anyhow.md +#: src/SUMMARY.md src/error-handling/thiserror-and-anyhow.md:5 msgid "`thiserror` and `anyhow`" msgstr "`thiserror` та `anyhow`" @@ -569,7 +628,7 @@ msgstr "`thiserror` та `anyhow`" msgid "Exercise: Rewriting with `Result`" msgstr "Вправа: Переписування с `Result`" -#: src/SUMMARY.md src/unsafe-rust.md src/unsafe-rust/unsafe.md +#: src/SUMMARY.md src/unsafe-rust.md src/unsafe-rust/unsafe.md:5 msgid "Unsafe Rust" msgstr "Небезпечний Rust" @@ -577,19 +636,19 @@ msgstr "Небезпечний Rust" msgid "Unsafe" msgstr "Unsafe" -#: src/SUMMARY.md src/unsafe-rust/dereferencing.md +#: src/SUMMARY.md src/unsafe-rust/dereferencing.md:5 msgid "Dereferencing Raw Pointers" msgstr "Розіменування \"сирих\" вказівників" -#: src/SUMMARY.md src/unsafe-rust/mutable-static.md +#: src/SUMMARY.md src/unsafe-rust/mutable-static.md:5 msgid "Mutable Static Variables" msgstr "Несталі статичні змінні" -#: src/SUMMARY.md src/unsafe-rust/unions.md +#: src/SUMMARY.md src/unsafe-rust/unions.md:5 msgid "Unions" msgstr "Об'єднання" -#: src/SUMMARY.md src/unsafe-rust/unsafe-functions.md +#: src/SUMMARY.md src/unsafe-rust/unsafe-functions.md:5 msgid "Unsafe Functions" msgstr "Небезпечні функції" @@ -625,19 +684,29 @@ msgstr "Бібліотека" msgid "AIDL" msgstr "AIDL" +#: src/SUMMARY.md src/android/aidl/birthday-service.md:1 +#, fuzzy +msgid "Birthday Service Tutorial" +msgstr "/** Інтерфейс сервісу Birthday. */" + #: src/SUMMARY.md msgid "Interface" msgstr "Інтерфейс" #: src/SUMMARY.md -msgid "Implementation" -msgstr "Реалізація" +msgid "Service API" +msgstr "" + +#: src/SUMMARY.md +#, fuzzy +msgid "Service" +msgstr "Сервер" #: src/SUMMARY.md msgid "Server" msgstr "Сервер" -#: src/SUMMARY.md src/android/aidl/deploy.md +#: src/SUMMARY.md src/android/aidl/example-service/deploy.md:1 msgid "Deploy" msgstr "Розгортка" @@ -645,11 +714,52 @@ msgstr "Розгортка" msgid "Client" msgstr "Кліент" -#: src/SUMMARY.md src/android/aidl/changing.md +#: src/SUMMARY.md src/android/aidl/example-service/changing-definition.md:1 msgid "Changing API" msgstr "Зміна API" -#: src/SUMMARY.md src/android/logging.md src/bare-metal/aps/logging.md +#: src/SUMMARY.md +#, fuzzy +msgid "Updating Implementations" +msgstr "Реалізація" + +#: src/SUMMARY.md +#, fuzzy +msgid "AIDL Types" +msgstr "Типи" + +#: src/SUMMARY.md src/android/aidl/types/primitives.md:1 +msgid "Primitive Types" +msgstr "" + +#: src/SUMMARY.md src/android/aidl/types/arrays.md:1 +#, fuzzy +msgid "Array Types" +msgstr "Масиви" + +#: src/SUMMARY.md src/android/aidl/types/objects.md:1 +#, fuzzy +msgid "Sending Objects" +msgstr "Об'єкти Трейтів" + +#: src/SUMMARY.md src/android/aidl/types/parcelables.md:1 +#, fuzzy +msgid "Parcelables" +msgstr "Змінні" + +#: src/SUMMARY.md src/android/aidl/types/file-descriptor.md:1 +msgid "Sending Files" +msgstr "" + +#: src/SUMMARY.md src/android/testing/googletest.md:5 +msgid "GoogleTest" +msgstr "GoogleTest" + +#: src/SUMMARY.md src/android/testing/mocking.md:5 +msgid "Mocking" +msgstr "Mocking" + +#: src/SUMMARY.md src/android/logging.md src/bare-metal/aps/logging.md:1 msgid "Logging" msgstr "Журналювання" @@ -669,11 +779,11 @@ msgstr "Виклик С за допомогою Bindgen" msgid "Calling Rust from C" msgstr "Виклик Rust з C" -#: src/SUMMARY.md src/android/interoperability/cpp.md +#: src/SUMMARY.md src/android/interoperability/cpp.md:1 msgid "With C++" msgstr "З С++" -#: src/SUMMARY.md src/android/interoperability/cpp/bridge.md +#: src/SUMMARY.md src/android/interoperability/cpp/bridge.md:1 msgid "The Bridge Module" msgstr "Модуль Bridge" @@ -681,7 +791,7 @@ msgstr "Модуль Bridge" msgid "Rust Bridge" msgstr "Rust Bridge" -#: src/SUMMARY.md src/android/interoperability/cpp/generated-cpp.md +#: src/SUMMARY.md src/android/interoperability/cpp/generated-cpp.md:1 msgid "Generated C++" msgstr "Згенерований C++" @@ -689,23 +799,23 @@ msgstr "Згенерований C++" msgid "C++ Bridge" msgstr "C++ Bridge" -#: src/SUMMARY.md src/android/interoperability/cpp/shared-types.md +#: src/SUMMARY.md src/android/interoperability/cpp/shared-types.md:1 msgid "Shared Types" msgstr "Спільні типи" -#: src/SUMMARY.md src/android/interoperability/cpp/shared-enums.md +#: src/SUMMARY.md src/android/interoperability/cpp/shared-enums.md:1 msgid "Shared Enums" msgstr "Спільні переліки" -#: src/SUMMARY.md src/android/interoperability/cpp/rust-result.md +#: src/SUMMARY.md src/android/interoperability/cpp/rust-result.md:1 msgid "Rust Error Handling" msgstr "Обробка помилок в Rust" -#: src/SUMMARY.md src/android/interoperability/cpp/cpp-exception.md +#: src/SUMMARY.md src/android/interoperability/cpp/cpp-exception.md:1 msgid "C++ Error Handling" msgstr "Обробка помилок в C++" -#: src/SUMMARY.md src/android/interoperability/cpp/type-mapping.md +#: src/SUMMARY.md src/android/interoperability/cpp/type-mapping.md:1 msgid "Additional Types" msgstr "Додаткові типи" @@ -727,7 +837,7 @@ msgstr "З Java" #: src/SUMMARY.md src/exercises/android/morning.md #: src/exercises/bare-metal/morning.md src/exercises/bare-metal/afternoon.md -#: src/exercises/concurrency/morning.md src/exercises/concurrency/afternoon.md +#: src/concurrency/sync-exercises.md src/concurrency/async-exercises.md msgid "Exercises" msgstr "Вправи" @@ -747,27 +857,27 @@ msgstr "Політика" msgid "Unsafe Code" msgstr "Небезпечний код" -#: src/SUMMARY.md src/chromium/build-rules/depending.md +#: src/SUMMARY.md src/chromium/build-rules/depending.md:1 msgid "Depending on Rust Code from Chromium C++" msgstr "Залежнісь Chromium C++ від коду Rust" -#: src/SUMMARY.md src/chromium/build-rules/vscode.md +#: src/SUMMARY.md src/chromium/build-rules/vscode.md:1 msgid "Visual Studio Code" msgstr "Visual Studio Code" -#: src/SUMMARY.md src/exercises/chromium/third-party.md +#: src/SUMMARY.md src/exercises/chromium/third-party.md:1 msgid "Exercise" msgstr "Вправи" -#: src/SUMMARY.md src/chromium/testing/rust-gtest-interop.md +#: src/SUMMARY.md src/chromium/testing/rust-gtest-interop.md:1 msgid "`rust_gtest_interop` Library" msgstr "Бібліотека `rust_gtest_interop`" -#: src/SUMMARY.md src/chromium/testing/build-gn.md +#: src/SUMMARY.md src/chromium/testing/build-gn.md:1 msgid "GN Rules for Rust Tests" msgstr "Правила GN для тестів Rust" -#: src/SUMMARY.md src/chromium/testing/chromium-import-macro.md +#: src/SUMMARY.md src/chromium/testing/chromium-import-macro.md:1 msgid "`chromium::import!` Macro" msgstr "" @@ -775,15 +885,16 @@ msgstr "" msgid "Interoperability with C++" msgstr "Взаємодія з C" -#: src/SUMMARY.md src/chromium/interoperability-with-cpp/example-bindings.md +#: src/SUMMARY.md src/chromium/interoperability-with-cpp/example-bindings.md:1 msgid "Example Bindings" msgstr "Приклади прив'язок" -#: src/SUMMARY.md src/chromium/interoperability-with-cpp/limitations-of-cxx.md +#: src/SUMMARY.md +#: src/chromium/interoperability-with-cpp/limitations-of-cxx.md:1 msgid "Limitations of CXX" msgstr "Обмеження CXX" -#: src/SUMMARY.md src/chromium/interoperability-with-cpp/error-handling.md +#: src/SUMMARY.md src/chromium/interoperability-with-cpp/error-handling.md:1 msgid "CXX Error Handling" msgstr "Обробка помилок в CXX" @@ -808,35 +919,37 @@ msgid "Configuring Cargo.toml" msgstr "Налаштування Cargo.toml" #: src/SUMMARY.md -#: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md +#: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md:1 msgid "Configuring `gnrt_config.toml`" msgstr "Налаштування `gnrt_config.toml`" -#: src/SUMMARY.md src/chromium/adding-third-party-crates/downloading-crates.md +#: src/SUMMARY.md +#: src/chromium/adding-third-party-crates/downloading-crates.md:1 msgid "Downloading Crates" msgstr "Завантаження крейтів" #: src/SUMMARY.md -#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md +#: src/chromium/adding-third-party-crates/generating-gn-build-rules.md:1 msgid "Generating `gn` Build Rules" msgstr "Створення правил побудови `gn`" -#: src/SUMMARY.md src/chromium/adding-third-party-crates/resolving-problems.md +#: src/SUMMARY.md +#: src/chromium/adding-third-party-crates/resolving-problems.md:1 msgid "Resolving Problems" msgstr "Вирішення проблем" #: src/SUMMARY.md -#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md +#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md:1 msgid "Build Scripts Which Generate Code" msgstr "Скрипти збірки, які генерують код" #: src/SUMMARY.md -#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-take-arbitrary-actions.md +#: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-take-arbitrary-actions.md:1 msgid "Build Scripts Which Build C++ or Take Arbitrary Actions" msgstr "Скрипти збірки, які будують C++ або виконують довільні дії" #: src/SUMMARY.md -#: src/chromium/adding-third-party-crates/depending-on-a-crate.md +#: src/chromium/adding-third-party-crates/depending-on-a-crate.md:1 msgid "Depending on a Crate" msgstr "Залежнісь від крейта" @@ -848,7 +961,8 @@ msgstr "Перевірки та аудити" msgid "Checking into Chromium Source Code" msgstr "Реєстрація в Chromium Source Code" -#: src/SUMMARY.md src/chromium/adding-third-party-crates/keeping-up-to-date.md +#: src/SUMMARY.md +#: src/chromium/adding-third-party-crates/keeping-up-to-date.md:1 msgid "Keeping Crates Up to Date" msgstr "Підтримання крейтів в актуальному стані" @@ -872,7 +986,7 @@ msgstr "`no_std`" msgid "A Minimal Example" msgstr "Мінімальний приклад" -#: src/SUMMARY.md src/bare-metal/no_std.md src/bare-metal/alloc.md +#: src/SUMMARY.md src/bare-metal/no_std.md src/bare-metal/alloc.md:1 msgid "`alloc`" msgstr "`alloc`" @@ -880,7 +994,7 @@ msgstr "`alloc`" msgid "Microcontrollers" msgstr "Мікроконтролери" -#: src/SUMMARY.md src/bare-metal/microcontrollers/mmio.md +#: src/SUMMARY.md src/bare-metal/microcontrollers/mmio.md:1 msgid "Raw MMIO" msgstr "Сирий ввід вивід з відображеної пам'яті (MMIO)" @@ -900,15 +1014,15 @@ msgstr "Крейти підтримки плат" msgid "The Type State Pattern" msgstr "Шаблон стану типу" -#: src/SUMMARY.md src/bare-metal/microcontrollers/embedded-hal.md +#: src/SUMMARY.md src/bare-metal/microcontrollers/embedded-hal.md:1 msgid "`embedded-hal`" msgstr "`embedded-hal`" -#: src/SUMMARY.md src/bare-metal/microcontrollers/probe-rs.md +#: src/SUMMARY.md src/bare-metal/microcontrollers/probe-rs.md:1 msgid "`probe-rs` and `cargo-embed`" msgstr "`probe-rs` та `cargo-embed`" -#: src/SUMMARY.md src/bare-metal/microcontrollers/debugging.md +#: src/SUMMARY.md src/bare-metal/microcontrollers/debugging.md:1 msgid "Debugging" msgstr "Налагодження" @@ -916,12 +1030,13 @@ msgstr "Налагодження" msgid "Other Projects" msgstr "Інші проєкти" -#: src/SUMMARY.md src/exercises/bare-metal/compass.md -#: src/exercises/bare-metal/solutions-morning.md +#: src/SUMMARY.md src/exercises/bare-metal/compass.md:1 +#: src/exercises/bare-metal/solutions-morning.md:3 msgid "Compass" msgstr "Компас" -#: src/SUMMARY.md +#: src/SUMMARY.md src/concurrency/sync-exercises/solutions.md:5 +#: src/concurrency/async-exercises/solutions.md:5 msgid "Solutions" msgstr "Рішення" @@ -933,7 +1048,7 @@ msgstr "Залізо: Полудень" msgid "Application Processors" msgstr "Прикладні процесори" -#: src/SUMMARY.md src/bare-metal/aps/entry-point.md +#: src/SUMMARY.md src/bare-metal/aps/entry-point.md:1 msgid "Getting Ready to Rust" msgstr "Підготовка до Rust" @@ -957,7 +1072,7 @@ msgstr "Більше трейтів" msgid "A Better UART Driver" msgstr "Кращий драйвер UART" -#: src/SUMMARY.md src/bare-metal/aps/better-uart/bitflags.md +#: src/SUMMARY.md src/bare-metal/aps/better-uart/bitflags.md:1 msgid "Bitflags" msgstr "Бітові прапорці (крейт bitflags)" @@ -965,7 +1080,7 @@ msgstr "Бітові прапорці (крейт bitflags)" msgid "Multiple Registers" msgstr "Кілька регістрів" -#: src/SUMMARY.md src/bare-metal/aps/better-uart/driver.md +#: src/SUMMARY.md src/bare-metal/aps/better-uart/driver.md:1 msgid "Driver" msgstr "Драйвер" @@ -973,27 +1088,32 @@ msgstr "Драйвер" msgid "Using It" msgstr "Використання" -#: src/SUMMARY.md src/bare-metal/aps/exceptions.md +#: src/SUMMARY.md src/error-handling/result.md:54 +#: src/bare-metal/aps/exceptions.md:1 msgid "Exceptions" msgstr "Виключення" -#: src/SUMMARY.md src/bare-metal/useful-crates/zerocopy.md +#: src/SUMMARY.md +msgid "Useful Crates" +msgstr "Корисні крейти" + +#: src/SUMMARY.md src/bare-metal/useful-crates/zerocopy.md:1 msgid "`zerocopy`" msgstr "`zerocopy`" -#: src/SUMMARY.md src/bare-metal/useful-crates/aarch64-paging.md +#: src/SUMMARY.md src/bare-metal/useful-crates/aarch64-paging.md:1 msgid "`aarch64-paging`" msgstr "`aarch64-paging`" -#: src/SUMMARY.md src/bare-metal/useful-crates/buddy_system_allocator.md +#: src/SUMMARY.md src/bare-metal/useful-crates/buddy_system_allocator.md:1 msgid "`buddy_system_allocator`" msgstr "`buddy_system_allocator`" -#: src/SUMMARY.md src/bare-metal/useful-crates/tinyvec.md +#: src/SUMMARY.md src/bare-metal/useful-crates/tinyvec.md:1 msgid "`tinyvec`" msgstr "`tinyvec`" -#: src/SUMMARY.md src/bare-metal/useful-crates/spin.md +#: src/SUMMARY.md src/bare-metal/useful-crates/spin.md:1 msgid "`spin`" msgstr "`spin`" @@ -1013,7 +1133,12 @@ msgstr "Одночасність виконання: Ранок" msgid "Threads" msgstr "Потоки" -#: src/SUMMARY.md src/concurrency/scoped-threads.md +#: src/SUMMARY.md src/concurrency/threads/plain.md:5 +#, fuzzy +msgid "Plain Threads" +msgstr "Потоки" + +#: src/SUMMARY.md src/concurrency/threads/scoped.md:5 msgid "Scoped Threads" msgstr "Потоки з областю видимості" @@ -1021,11 +1146,16 @@ msgstr "Потоки з областю видимості" msgid "Channels" msgstr "Канали" -#: src/SUMMARY.md src/concurrency/channels/unbounded.md +#: src/SUMMARY.md src/concurrency/channels/senders-receivers.md:5 +#, fuzzy +msgid "Senders and Receivers" +msgstr "Отримувач методу" + +#: src/SUMMARY.md src/concurrency/channels/unbounded.md:5 msgid "Unbounded Channels" msgstr "Незав'язані канали" -#: src/SUMMARY.md src/concurrency/channels/bounded.md +#: src/SUMMARY.md src/concurrency/channels/bounded.md:5 msgid "Bounded Channels" msgstr "Зав'язані канали" @@ -1033,42 +1163,47 @@ msgstr "Зав'язані канали" msgid "`Send` and `Sync`" msgstr "`Send` та `Sync`" -#: src/SUMMARY.md src/concurrency/send-sync/send.md +#: src/SUMMARY.md src/concurrency/send-sync/marker-traits.md:5 +#, fuzzy +msgid "Marker Traits" +msgstr "Більше трейтів" + +#: src/SUMMARY.md src/concurrency/send-sync/send.md:5 msgid "`Send`" msgstr "`Send`" -#: src/SUMMARY.md src/concurrency/send-sync/sync.md +#: src/SUMMARY.md src/concurrency/send-sync/sync.md:5 msgid "`Sync`" msgstr "`Sync`" -#: src/SUMMARY.md src/concurrency/send-sync/examples.md +#: src/SUMMARY.md src/concurrency/send-sync/examples.md:5 msgid "Examples" msgstr "Приклади" -#: src/SUMMARY.md src/concurrency/shared_state.md +#: src/SUMMARY.md src/concurrency/shared-state.md msgid "Shared State" msgstr "Спільний стан" -#: src/SUMMARY.md src/concurrency/shared_state/arc.md +#: src/SUMMARY.md src/concurrency/shared-state/arc.md:5 msgid "`Arc`" msgstr "`Arc`" -#: src/SUMMARY.md src/concurrency/shared_state/mutex.md +#: src/SUMMARY.md src/concurrency/shared-state/mutex.md:5 msgid "`Mutex`" msgstr "`Mutex`" -#: src/SUMMARY.md src/memory-management/review.md -#: src/error-handling/try-conversions.md -#: src/concurrency/shared_state/example.md +#: src/SUMMARY.md src/memory-management/review.md:20 +#: src/error-handling/try-conversions.md:27 +#: src/concurrency/shared-state/example.md:5 msgid "Example" msgstr "Приклад" -#: src/SUMMARY.md src/exercises/concurrency/dining-philosophers.md -#: src/exercises/concurrency/solutions-morning.md +#: src/SUMMARY.md src/concurrency/sync-exercises/dining-philosophers.md:5 +#: src/concurrency/sync-exercises/solutions.md:7 msgid "Dining Philosophers" msgstr "Вечеря філософів" -#: src/SUMMARY.md src/exercises/concurrency/link-checker.md +#: src/SUMMARY.md src/concurrency/sync-exercises/link-checker.md:5 msgid "Multi-threaded Link Checker" msgstr "Перевірка багатопоточних посилань" @@ -1076,48 +1211,50 @@ msgstr "Перевірка багатопоточних посилань" msgid "Concurrency: Afternoon" msgstr "Одночасність виконання: Полудень" -#: src/SUMMARY.md +#: src/SUMMARY.md src/concurrency/async.md msgid "Async Basics" msgstr "Основи асинхронізації" -#: src/SUMMARY.md src/async/async-await.md +#: src/SUMMARY.md src/concurrency/async/async-await.md:5 msgid "`async`/`await`" msgstr "`async`/`await`" -#: src/SUMMARY.md src/async/futures.md +#: src/SUMMARY.md src/concurrency/async/futures.md:5 msgid "Futures" msgstr "Futures" -#: src/SUMMARY.md src/async/runtimes.md +#: src/SUMMARY.md src/concurrency/async/runtimes.md:5 msgid "Runtimes" msgstr "Середовища виконання" -#: src/SUMMARY.md src/async/runtimes/tokio.md +#: src/SUMMARY.md src/concurrency/async/runtimes/tokio.md:1 msgid "Tokio" msgstr "Токіо" -#: src/SUMMARY.md src/exercises/concurrency/link-checker.md src/async/tasks.md -#: src/exercises/concurrency/chat-app.md +#: src/SUMMARY.md src/concurrency/sync-exercises/link-checker.md:123 +#: src/concurrency/async/tasks.md:5 +#: src/concurrency/async-exercises/chat-app.md:147 msgid "Tasks" msgstr "Завдання" -#: src/SUMMARY.md src/async/channels.md +#: src/SUMMARY.md src/concurrency/async-control-flow.md +#, fuzzy +msgid "Channels and Control Flow" +msgstr "Новітній потік контролю" + +#: src/SUMMARY.md src/concurrency/async-control-flow/channels.md:5 msgid "Async Channels" msgstr "Асинхронні канали" -#: src/SUMMARY.md -msgid "Control Flow" -msgstr "Потік контролю" - -#: src/SUMMARY.md src/async/control-flow/join.md +#: src/SUMMARY.md src/concurrency/async-control-flow/join.md:5 msgid "Join" msgstr "Join" -#: src/SUMMARY.md src/async/control-flow/select.md +#: src/SUMMARY.md src/concurrency/async-control-flow/select.md:5 msgid "Select" msgstr "Select" -#: src/SUMMARY.md +#: src/SUMMARY.md src/concurrency/async-pitfalls.md msgid "Pitfalls" msgstr "Підводні камені" @@ -1125,20 +1262,20 @@ msgstr "Підводні камені" msgid "Blocking the Executor" msgstr "Блокування Виконавця" -#: src/SUMMARY.md src/async/pitfalls/pin.md +#: src/SUMMARY.md src/concurrency/async-pitfalls/pin.md:5 msgid "`Pin`" msgstr "`Pin`" -#: src/SUMMARY.md src/async/pitfalls/async-traits.md +#: src/SUMMARY.md src/concurrency/async-pitfalls/async-traits.md:5 msgid "Async Traits" msgstr "Асинхронні трейти" -#: src/SUMMARY.md src/async/pitfalls/cancellation.md +#: src/SUMMARY.md src/concurrency/async-pitfalls/cancellation.md:5 msgid "Cancellation" msgstr "Скасування" -#: src/SUMMARY.md src/exercises/concurrency/chat-app.md -#: src/exercises/concurrency/solutions-afternoon.md +#: src/SUMMARY.md src/concurrency/async-exercises/chat-app.md:5 +#: src/concurrency/async-exercises/solutions.md:106 msgid "Broadcast Chat Application" msgstr "Програма широкомовного чату" @@ -1150,6 +1287,7 @@ msgstr "Заключні слова" msgid "Thanks!" msgstr "Дякую!" +#. Please keep { #glossary } untranslated. #: src/SUMMARY.md src/glossary.md msgid "Glossary" msgstr "Глосарій" @@ -1202,6 +1340,10 @@ msgstr "" "comprehensive-rust/>. Якщо ви читаєте десь в іншому місці, перевіряйте там " "на оновлення." +#: src/index.md +msgid "The course is also available [as a PDF](comprehensive-rust.pdf)." +msgstr "" + #: src/index.md msgid "" "The goal of the course is to teach you Rust. We assume you don't know " @@ -1329,7 +1471,7 @@ msgstr "" "які викладач повинен висвітлити, а також відповіді на типові питання, що " "виникають під час проходження курсу." -#: src/running-the-course.md src/running-the-course/course-structure.md +#: src/running-the-course.md src/running-the-course/course-structure.md:3 msgid "This page is for the course instructor." msgstr "Ця сторінка призначена для викладача курсу." @@ -1459,11 +1601,11 @@ msgstr "" "[надіслати нам свої відгуки](https://github.com/google/comprehensive-rust/" "discussions/100)!" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:5 msgid "Rust Fundamentals" msgstr "Основи Rust" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:7 msgid "" "The first four days make up [Rust Fundamentals](../welcome-day-1.md). The " "days are fast paced and we cover a lot of ground!" @@ -1471,145 +1613,15 @@ msgstr "" "Перші чотири дні складають [Основи Rust](../welcome-day-1.md). Дні " "протікають швидко, і ми багато робимо!" -#: src/running-the-course/course-structure.md -msgid "Course schedule:" -msgstr "Структура курсу" +#: src/running-the-course/course-structure.md:10 +msgid "{{%course outline Fundamentals}}" +msgstr "Основи Rust" -#: src/running-the-course/course-structure.md -msgid "Day 1 Morning (3 hours, including breaks)" -msgstr "День 1 Ранок (3 години, включаючи перерви)" - -#: src/running-the-course/course-structure.md -msgid "[Welcome](../welcome-day-1.md) (5 minutes)" -msgstr "[Ласкаво просимо](../welcome-day-1.md) (5 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[Hello, World](../hello-world.md) (20 minutes)" -msgstr "[Hello, World] (../hello-world.md) (20 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[Types and Values](../types-and-values.md) (1 hour and 5 minutes)" -msgstr "[Типи та значення] (../types-and-values.md) (1 година 5 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[Control Flow Basics](../control-flow-basics.md) (1 hour)" -msgstr "[Основи потоку управління](../control-flow-basics.md) (1 година)" - -#: src/running-the-course/course-structure.md -msgid "Day 1 Afternoon (2 hours and 55 minutes, including breaks)" -msgstr "День 1 Полудень (2 години 55 хвилин, включаючи перерви)" - -#: src/running-the-course/course-structure.md -msgid "[Tuples and Arrays](../tuples-and-arrays.md) (1 hour)" -msgstr "[Кортежі та масиви](../tuples-and-arrays.md) (1 година)" - -#: src/running-the-course/course-structure.md -msgid "[References](../references.md) (50 minutes)" -msgstr "[Посилання](../references.md) (50 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[User-Defined Types](../user-defined-types.md) (50 minutes)" -msgstr "[Типи, визначені користувачем](../user-defined-types.md) (50 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "Day 2 Morning (3 hours and 5 minutes, including breaks)" -msgstr "День 2 Ранок (3 години 5 хвилин, включаючи перерви)" - -#: src/running-the-course/course-structure.md -msgid "[Welcome](../welcome-day-2.md) (3 minutes)" -msgstr "[Ласкаво просимо](../welcome-day-2.md) (3 хвилини)" - -#: src/running-the-course/course-structure.md -msgid "[Pattern Matching](../pattern-matching.md) (50 minutes)" -msgstr "[Зіставлення шаблонів](../pattern-matching.md) (50 хвилин)." - -#: src/running-the-course/course-structure.md -msgid "[Methods and Traits](../methods-and-traits.md) (55 minutes)" -msgstr "[Методи та трейти] (../methods-and-traits.md) (55 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[Generics](../generics.md) (45 minutes)" -msgstr "[Узагальнення](../generics.md) (45 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "Day 2 Afternoon (3 hours, including breaks)" -msgstr "День 2 Полудень (3 години, включаючи перерви)" - -#: src/running-the-course/course-structure.md -msgid "[Standard Library Types](../std-types.md) (1 hour and 10 minutes)" -msgstr "[Типи стандартної бібліотеки](../std-types.md) (1 година 10 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[Standard Library Traits](../std-traits.md) (1 hour and 40 minutes)" -msgstr "[Трейти стандартної бібліотек](../std-traits.md) (1 година 40 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "Day 3 Morning (2 hours and 15 minutes, including breaks)" -msgstr "День 3 Ранок (2 години 15 хвилин, включаючи перерви)" - -#: src/running-the-course/course-structure.md -msgid "[Welcome](../welcome-day-3.md) (3 minutes)" -msgstr "[Ласкаво просимо](../welcome-day-3.md) (3 хвилини)" - -#: src/running-the-course/course-structure.md -msgid "[Memory Management](../memory-management.md) (1 hour and 10 minutes)" -msgstr "[Управління пам'яттю](../memory-management.md) (1 година 10 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[Smart Pointers](../smart-pointers.md) (45 minutes)" -msgstr "[Розумні вказівники](../smart-pointers.md) (45 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "Day 3 Afternoon (2 hours and 20 minutes, including breaks)" -msgstr "День 3 Полудень (2 години 20 хвилин, включаючи перерви)" - -#: src/running-the-course/course-structure.md -msgid "[Borrowing](../borrowing.md) (1 hour)" -msgstr "[Запозичення](../borrowing.md) (1 година)" - -#: src/running-the-course/course-structure.md -msgid "" -"[Slices and Lifetimes](../slices-and-lifetimes.md) (1 hour and 10 minutes)" -msgstr "" -"[Зрізи та тривалість життя] (../slices-and-lifetimes.md) (1 година 10 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "Day 4 Morning (3 hours and 5 minutes, including breaks)" -msgstr "День 4 Ранок (3 години 5 хвилин, включаючи перерви)" - -#: src/running-the-course/course-structure.md -msgid "[Welcome](../welcome-day-4.md) (3 minutes)" -msgstr "[Ласкаво просимо](../welcome-day-4.md) (3 хвилини)" - -#: src/running-the-course/course-structure.md -msgid "[Iterators](../iterators.md) (45 minutes)" -msgstr "[Ітератори](../iterators.md) (45 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[Modules](../modules.md) (40 minutes)" -msgstr "[Модулі](../modules.md) (40 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[Testing](../testing.md) (1 hour and 5 minutes)" -msgstr "[Тестування](../testing.md) (1 година 5 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "Day 4 Afternoon (2 hours, including breaks)" -msgstr "День 4 Полудень (2 години, включаючи перерви)" - -#: src/running-the-course/course-structure.md -msgid "[Error Handling](../error-handling.md) (45 minutes)" -msgstr "[Обробка помилок](../error-handling.md) (45 хвилин)" - -#: src/running-the-course/course-structure.md -msgid "[Unsafe Rust](../unsafe-rust.md) (1 hour and 5 minutes)" -msgstr "[Небезпечний Rust](../unsafe-rust.md) (1 година 5 хвилин)" - -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:12 msgid "Deep Dives" msgstr "Глибоке занурення" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:14 msgid "" "In addition to the 4-day class on Rust Fundamentals, we cover some more " "specialized topics:" @@ -1617,11 +1629,11 @@ msgstr "" "На додаток до 4-денного курсу з основ Rust, ми розглянемо ще кілька " "спеціалізованих тем:" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:17 msgid "Rust in Android" msgstr "Rust в Android" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:19 msgid "" "The [Rust in Android](../android.md) deep dive is a half-day course on using " "Rust for Android platform development. This includes interoperability with " @@ -1630,7 +1642,7 @@ msgstr "" "[Rust в Android](../android.md) --- це напівденний курс з використання Rust " "для розробки на Android платформі. Сюди входить взаємодія з C, C++ та Java." -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:23 msgid "" "You will need an [AOSP checkout](https://source.android.com/docs/setup/" "download/downloading). Make a checkout of the [course repository](https://" @@ -1644,7 +1656,7 @@ msgstr "" "`src/android/` в кореневий каталог вашого AOSP. Це гарантує, що система " "збирання Android побачить файли `Android.bp` в `src/android/`." -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:28 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 " @@ -1655,11 +1667,11 @@ msgstr "" "android/build_all.sh`. Прочитайте скрипт, щоб побачити команди, які він " "запускає, і переконайтеся, що вони працюють, коли ви запускаєте їх вручну." -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:35 msgid "Rust in Chromium" msgstr "Rust в Chromium" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:37 msgid "" "The [Rust in Chromium](../chromium.md) deep dive is a half-day course on " "using Rust as part of the Chromium browser. It includes using Rust in " @@ -1671,7 +1683,7 @@ msgstr "" "Rust у системі збирання `gn` Chromium, залучення сторонніх бібліотек " "(\"крейтів\") і взаємодію з C++." -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:42 msgid "" "You will need to be able to build Chromium --- a debug, component build is " "[recommended](../chromium/setup.md) for speed but any build will work. " @@ -1682,11 +1694,11 @@ msgstr "" "але будь-яка збірка буде працювати. Переконайтеся, що ви можете запустити " "веб-переглядач Chromium, який ви побудували." -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:46 msgid "Bare-Metal Rust" msgstr "Rust на голому залізі" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:48 msgid "" "The [Bare-Metal Rust](../bare-metal.md) deep dive is a full day class on " "using Rust for bare-metal (embedded) development. Both microcontrollers and " @@ -1696,7 +1708,7 @@ msgstr "" "використання Rust для низькорівневої (embedded) розробки. Розглядаються як " "мікроконтролери, так і прикладні процесори." -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:52 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 " @@ -1708,11 +1720,11 @@ msgstr "" "встановити кілька пакетів, як описано на [сторінці привітання](../bare-metal." "md)." -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:57 msgid "Concurrency in Rust" msgstr "Конкурентність в Rust" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:59 msgid "" "The [Concurrency in Rust](../concurrency.md) deep dive is a full day class " "on classical as well as `async`/`await` concurrency." @@ -1720,7 +1732,7 @@ msgstr "" "[Конкурентність в Rust](../concurrency.md) це цілий день занять з класичної, " "а також `async`/`await` конкурентності." -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:62 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 " @@ -1730,11 +1742,16 @@ msgstr "" "готові до роботи. Потім ви сможете скопіювати приклади в `src/main.rs`, щоб " "поекспериментувати з ними:" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:73 +#, fuzzy +msgid "{{%course outline Concurrency}}" +msgstr "Основи Rust" + +#: src/running-the-course/course-structure.md:75 msgid "Format" msgstr "Формат" -#: src/running-the-course/course-structure.md +#: src/running-the-course/course-structure.md:77 msgid "" "The course is meant to be very interactive and we recommend letting the " "questions drive the exploration of Rust!" @@ -1742,49 +1759,37 @@ msgstr "" "Курс задуманий дуже інтерактивним, і ми рекомендуємо, щоб питання сприяли " "вивченню Rust!" -#: src/running-the-course/keyboard-shortcuts.md +#: src/running-the-course/keyboard-shortcuts.md:3 msgid "There are several useful keyboard shortcuts in mdBook:" msgstr "У mdBook є кілька корисних поєднань клавіш:" -#: src/running-the-course/keyboard-shortcuts.md -msgid "Arrow-Left" -msgstr "Стрілка вліво" - -#: src/running-the-course/keyboard-shortcuts.md -msgid ": Navigate to the previous page." +#: src/running-the-course/keyboard-shortcuts.md:5 +#, fuzzy +msgid "Arrow-Left: Navigate to the previous page." msgstr ": Перехід на попередню сторінку." -#: src/running-the-course/keyboard-shortcuts.md -msgid "Arrow-Right" -msgstr "Стрілка вправо" - -#: src/running-the-course/keyboard-shortcuts.md -msgid ": Navigate to the next page." +#: src/running-the-course/keyboard-shortcuts.md:6 +#, fuzzy +msgid "Arrow-Right: Navigate to the next page." msgstr ": Перехід до наступної сторінки." -#: src/running-the-course/keyboard-shortcuts.md src/cargo/code-samples.md -msgid "Ctrl + Enter" -msgstr "Ctrl + Enter" - -#: src/running-the-course/keyboard-shortcuts.md -msgid ": Execute the code sample that has focus." +#: src/running-the-course/keyboard-shortcuts.md:7 +#, fuzzy +msgid "Ctrl + Enter: Execute the code sample that has focus." msgstr ": Виконати приклад коду, який знаходиться у фокусі." -#: src/running-the-course/keyboard-shortcuts.md -msgid "s" -msgstr "s" - -#: src/running-the-course/keyboard-shortcuts.md -msgid ": Activate the search bar." +#: src/running-the-course/keyboard-shortcuts.md:8 +#, fuzzy +msgid "s: Activate the search bar." msgstr ": Активувати панель пошуку." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:3 msgid "" "The course has been translated into other languages by a set of wonderful " "volunteers:" msgstr "Курс був перекладений іншими мовами групою чудових волонтерів:" -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:6 msgid "" "[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) " "by [@rastringer](https://github.com/rastringer), [@hugojacob](https://github." @@ -1796,7 +1801,7 @@ msgstr "" "github.com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes), " "та [@henrif75](https://github.com/henrif75)." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:8 msgid "" "[Chinese (Simplified)](https://google.github.io/comprehensive-rust/zh-CN/) " "by [@suetfei](https://github.com/suetfei), [@wnghl](https://github.com/" @@ -1812,7 +1817,7 @@ msgstr "" "github.com/superwhd), [@SketchK](https://github.com/SketchK), and [@nodmp]" "(https://github.com/nodmp)." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:10 msgid "" "[Chinese (Traditional)](https://google.github.io/comprehensive-rust/zh-TW/) " "by [@hueich](https://github.com/hueich), [@victorhsieh](https://github.com/" @@ -1826,17 +1831,19 @@ msgstr "" "github.com/kuanhungchen), and [@johnathan79717](https://github.com/" "johnathan79717)." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:12 +#, 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)." +"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), " +"[@jooyunghan](https://github.com/jooyunghan), and [@namhyung](https://github." +"com/namhyung)." msgstr "" "[Корейска](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 +#: src/running-the-course/translations.md:13 msgid "" "[Spanish](https://google.github.io/comprehensive-rust/es/) by [@deavid]" "(https://github.com/deavid)." @@ -1844,18 +1851,18 @@ msgstr "" "[Іспанська](https://google.github.io/comprehensive-rust/es) від [@deavid]" "(https://github.com/deavid)." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:15 msgid "" "Use the language picker in the top-right corner to switch between languages." msgstr "" "Використовуйте кнопку вибору мови у верхньому правому куті для перемикання " "між мовами." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:17 msgid "Incomplete Translations" msgstr "Незавершені переклади" -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:19 msgid "" "There is a large number of in-progress translations. We link to the most " "recently updated translations:" @@ -1863,7 +1870,7 @@ msgstr "" "Існує велика кількість незавершених перекладів. Ми посилаємося на останні " "оновлені переклади:" -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:22 msgid "" "[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" "(https://github.com/raselmandol)." @@ -1871,15 +1878,17 @@ msgstr "" "[Бенгальська](https://google.github.io/comprehensive-rust/bn) від " "[@raselmandol](https://github.com/raselmandol)." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:23 +#, fuzzy msgid "" "[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS]" -"(https://github.com/KookaS) and [@vcaen](https://github.com/vcaen)." +"(https://github.com/KookaS), [@vcaen](https://github.com/vcaen) and " +"[@AdrienBaudemont](https://github.com/AdrienBaudemont)." msgstr "" "[Французька](https://google.github.io/comprehensive-rust/fr/) від [@KookaS]" "(https://github.com/KookaS) і [@vcaen](https://github.com/vcaen)." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:24 msgid "" "[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn]" "(https://github.com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)." @@ -1887,7 +1896,7 @@ msgstr "" "[Німецька](https://google.github.io/comprehensive-rust/de/) від [@Throvn]" "(https://github.com/Throvn) і [@ronaldfw](https://github.com/ronaldfw)." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:25 msgid "" "[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN]" "(https://github.com/CoinEZ) and [@momotaro1105](https://github.com/" @@ -1897,7 +1906,17 @@ msgstr "" "(https://github.com/CoinEZ) і [@momotaro1105](https://github.com/" "momotaro1105)." -#: src/running-the-course/translations.md +#: src/running-the-course/translations.md:26 +#, fuzzy +msgid "" +"[Italian](https://google.github.io/comprehensive-rust/it/) by " +"[@henrythebuilder](https://github.com/henrythebuilder) and [@detro](https://" +"github.com/detro)." +msgstr "" +"[Німецька](https://google.github.io/comprehensive-rust/de/) від [@Throvn]" +"(https://github.com/Throvn) і [@ronaldfw](https://github.com/ronaldfw)." + +#: src/running-the-course/translations.md:28 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 " @@ -1973,16 +1992,16 @@ msgstr "" "це може призвести до встановлення застарілої версії Rust і неочікуваної " "поведінки. Використовуйте таку команду: " -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:1 msgid "The Rust Ecosystem" msgstr "Екосистема Rust" -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:3 msgid "" "The Rust ecosystem consists of a number of tools, of which the main ones are:" msgstr "Екосистема Rust складається з ряду інструментів, основними з яких є:" -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:5 msgid "" "`rustc`: the Rust compiler which turns `.rs` files into binaries and other " "intermediate formats." @@ -1990,7 +2009,7 @@ msgstr "" "`rustc`: компілятор Rust, який перетворює файли `.rs` на бінарні файли та " "інші проміжні формати." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:8 msgid "" "`cargo`: the Rust dependency manager and build tool. Cargo knows how to " "download dependencies, usually hosted on , and it will " @@ -2003,7 +2022,7 @@ msgstr "" "інструментом запуску тестів, який використовується для виконання модульних " "тестів." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:13 msgid "" "`rustup`: the Rust toolchain installer and updater. This tool is used to " "install and update `rustc` and `cargo` when new versions of Rust are " @@ -2017,15 +2036,14 @@ msgstr "" "документацію стандартної бібліотеки. Ви можете встановити кілька версій Rust " "одночасно і `rustup` дозволить вам перемикатися між ними за необхідності." -#: src/cargo/rust-ecosystem.md src/hello-world/hello-world.md -#: src/tuples-and-arrays/tuples-and-arrays.md src/references/exclusive.md -#: src/pattern-matching/destructuring.md src/memory-management/move.md -#: src/error-handling/try.md src/android/setup.md src/concurrency/threads.md -#: src/async/async-await.md +#: src/cargo/rust-ecosystem.md:21 src/types-and-values/hello-world.md:29 +#: src/references/exclusive.md:23 src/memory-management/move.md:156 +#: src/error-handling/try.md:56 src/android/setup.md +#: src/concurrency/async/async-await.md:29 msgid "Key points:" msgstr "Ключові моменти:" -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:23 msgid "" "Rust has a rapid release schedule with a new release coming out every six " "weeks. New releases maintain backwards compatibility with old releases --- " @@ -2035,12 +2053,12 @@ msgstr "" "Нові версії підтримують зворотну сумісність із старими версіями --- на " "додаток вони надають нові функціональні можливості." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:27 msgid "" "There are three release channels: \"stable\", \"beta\", and \"nightly\"." msgstr "Існує три канали релізів: \"stable\", \"beta\" та \"nightly\"." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:29 msgid "" "New features are being tested on \"nightly\", \"beta\" is what becomes " "\"stable\" every six weeks." @@ -2048,7 +2066,7 @@ msgstr "" "Нові функції тестуються на \"nightly\", \"beta\" це те, що стає \"stable\" " "кожні шість тижнів." -#: src/cargo/rust-ecosystem.md +#: 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." @@ -2056,7 +2074,7 @@ msgstr "" "Залежності також можна вирішити за допомогою альтернативних [реєстрів]" "(https://doc.rust-lang.org/cargo/reference/registries.html), git, папок тощо." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:35 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." @@ -2064,13 +2082,13 @@ msgstr "" "Rust також має \\[редакції\\]: поточна редакція це Rust 2021. Попередніми " "редакціями були Rust 2015 та Rust 2018." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:38 msgid "" "The editions are allowed to make backwards incompatible changes to the " "language." msgstr "Редакціям дозволено вносити зворотно-несумісні зміни до мови." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:41 msgid "" "To prevent breaking code, editions are opt-in: you select the edition for " "your crate via the `Cargo.toml` file." @@ -2078,7 +2096,7 @@ msgstr "" "Щоб уникнути збоїв коду, редакцію для свого пакета можна явно вказати у " "файлі `Cargo.toml`." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:44 msgid "" "To avoid splitting the ecosystem, Rust compilers can mix code written for " "different editions." @@ -2086,7 +2104,7 @@ msgstr "" "Щоб уникнути поділу екосистеми, компілятор Rust може змішувати код, " "написаний для різних редакцій." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:47 msgid "" "Mention that it is quite rare to ever use the compiler directly not through " "`cargo` (most users never do)." @@ -2094,7 +2112,7 @@ msgstr "" "Варто нагадати, що використання компілятора безпосередньо, а не через " "`cargo`, є рідкісним явищем (більшість користувачів ніколи цього не роблять)." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:50 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 " @@ -2104,22 +2122,22 @@ msgstr "" "інструментом. Він має багато додаткових функцій, включаючи, але не " "обмежуючись:" -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:53 msgid "Project/package structure" msgstr "Структуру проекту/пакета" -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:54 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 +#: src/cargo/rust-ecosystem.md:55 msgid "Dev Dependencies and Runtime Dependency management/caching" msgstr "" "Управління/кешування залежностями для розробки (dev) та часу виконання " "(runtime)" -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:56 msgid "" "[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts." "html)" @@ -2127,7 +2145,7 @@ msgstr "" "[сценарії побудови](https://doc.rust-lang.org/cargo/reference/build-scripts." "html)" -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:57 msgid "" "[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install." "html)" @@ -2135,7 +2153,7 @@ msgstr "" "[глобальна установка](https://doc.rust-lang.org/cargo/commands/cargo-install." "html)" -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:58 msgid "" "It is also extensible with sub command plugins as well (such as [cargo " "clippy](https://github.com/rust-lang/rust-clippy))." @@ -2143,17 +2161,17 @@ msgstr "" "Він також розширюється за допомогою плагінів підкоманд (таких як [cargo " "clippy](https://github.com/rust-lang/rust-clippy))." -#: src/cargo/rust-ecosystem.md +#: src/cargo/rust-ecosystem.md:60 msgid "" "Read more from the [official Cargo Book](https://doc.rust-lang.org/cargo/)" msgstr "" "Докладніше читайте в [офіційній Cargo Book](https://doc.rust-lang.org/cargo/)" -#: src/cargo/code-samples.md +#: src/cargo/code-samples.md:1 msgid "Code Samples in This Training" msgstr "Приклади коду в цьому курсі" -#: src/cargo/code-samples.md +#: src/cargo/code-samples.md:3 msgid "" "For this training, we will mostly explore the Rust language through examples " "which can be executed through your browser. This makes the setup much easier " @@ -2163,7 +2181,7 @@ msgstr "" "бути виконані у вашому браузері. Це значно спрощує налаштування та " "забезпечує однаковий досвід для всіх." -#: src/cargo/code-samples.md +#: src/cargo/code-samples.md:7 msgid "" "Installing Cargo is still encouraged: it will make it easier for you to do " "the exercises. On the last day, we will do a larger exercise which shows you " @@ -2173,24 +2191,23 @@ msgstr "" "вправ. В останній день ми виконаємо більш масштабну вправу, яка покаже вам " "як працювати із залежностями, і для цього вам знадобиться Cargo." -#: src/cargo/code-samples.md +#: src/cargo/code-samples.md:11 msgid "The code blocks in this course are fully interactive:" msgstr "Блоки коду в цьому курсі є повністю інтерактивними:" -#: src/cargo/code-samples.md src/cargo/running-locally.md +#: src/cargo/code-samples.md:15 src/cargo/running-locally.md:46 msgid "\"Edit me!\"" msgstr "\"Відредагуте мене!\"" -#: src/cargo/code-samples.md -msgid "You can use " -msgstr "Ви можете використовувати " - -#: src/cargo/code-samples.md -msgid " to execute the code when focus is in the text box." +#: src/cargo/code-samples.md:19 +#, fuzzy +msgid "" +"You can use Ctrl + Enter to execute the code when focus is in the " +"text box." msgstr "" " для виконання коду, коли фокус введення знаходиться в текстовому полі." -#: src/cargo/code-samples.md +#: src/cargo/code-samples.md:24 msgid "" "Most code samples are editable like shown above. A few code samples are not " "editable for various reasons:" @@ -2198,7 +2215,7 @@ msgstr "" "Більшість прикладів коду доступні для редагування, як показано вище. Кілька " "прикладів коду недоступні для редагування з різних причин:" -#: src/cargo/code-samples.md +#: src/cargo/code-samples.md:27 msgid "" "The embedded playgrounds cannot execute unit tests. Copy-paste the code and " "open it in the real Playground to demonstrate unit tests." @@ -2207,7 +2224,7 @@ msgstr "" "Скопіюйте код і відкрийте його в Rust Playground, щоб продемонструвати " "модульні тести." -#: src/cargo/code-samples.md +#: src/cargo/code-samples.md:30 msgid "" "The embedded playgrounds lose their state the moment you navigate away from " "the page! This is the reason that the students should solve the exercises " @@ -2217,11 +2234,11 @@ msgstr "" "ви йдете зі сторінки! Саме з цієї причини учні повинні виконувати вправи, " "використовуючи локальну установку Rust або Rust Playground." -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:1 msgid "Running Code Locally with Cargo" msgstr "Запуск коду локально за допомогою Cargo" -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:3 msgid "" "If you want to experiment with the code on your own system, then you will " "need to first install Rust. Do this by following the [instructions in the " @@ -2235,7 +2252,7 @@ msgstr "" "вашій системі з'являться інструменти `rustc` та `cargo`. На момент написання " "статті останній стабільний випуск Rust має такі версії:" -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:16 msgid "" "You can use any later version too since Rust maintains backwards " "compatibility." @@ -2243,7 +2260,7 @@ msgstr "" "Ви також можете використовувати будь-яку пізнішу версію, оскільки Rust " "підтримує зворотну сумісність." -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:18 msgid "" "With this in place, follow these steps to build a Rust binary from one of " "the examples in this training:" @@ -2251,27 +2268,27 @@ msgstr "" "Після цього виконайте такі кроки, щоб зібрати виконуваний файл на основі " "одного з прикладів у цьому курсі:" -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:21 msgid "Click the \"Copy to clipboard\" button on the example you want to copy." msgstr "" "Натисніть кнопку \"Copy to clipboard\" на прикладі коду, який потрібно " "скопіювати." -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:23 msgid "" "Use `cargo new exercise` to create a new `exercise/` directory for your code:" msgstr "" "Використовуйте `cargo new exercise`, щоб створити нову директорію `exercise/" "` для вашого коду:" -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:30 msgid "" "Navigate into `exercise/` and use `cargo run` to build and run your binary:" msgstr "" "Перейдіть в директорію `exercise/` і виконайте `cargo run` для побудови та " "запуску виконуваного файлу:" -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:41 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" @@ -2280,13 +2297,13 @@ msgstr "" "використовуючи приклад коду з попередньої сторінки, зробіть `src/main.rs` " "схожим на" -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:50 msgid "Use `cargo run` to build and run your updated binary:" msgstr "" "Використовуйте `cargo run` для побудови та запуску оновленого виконуваного " "файлу:" -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:60 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/" @@ -2299,7 +2316,7 @@ msgstr "" "Використовуйте `cargo build --release` для створення оптимізованої фінальної " "збірки в `target/release/`." -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:65 msgid "" "You can add dependencies for your project by editing `Cargo.toml`. When you " "run `cargo` commands, it will automatically download and compile missing " @@ -2309,7 +2326,7 @@ msgstr "" "toml`. Коли ви запустите команду `cargo`, вона автоматично завантажить і " "скомпілює відсутні залежності для вас." -#: src/cargo/running-locally.md +#: src/cargo/running-locally.md:73 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 " @@ -2319,6 +2336,11 @@ msgstr "" "редактор. Це полегшить їм життя, тому що у них буде відповідне середовище " "розробки." +#: src/welcome-day-1.md +msgid "" +"minutes: 5 course: Fundamentals session: Day 1 Morning target_minutes: 180" +msgstr "" + #: src/welcome-day-1.md msgid "Welcome to Day 1" msgstr "Ласкаво просимо до Дня 1" @@ -2355,35 +2377,17 @@ msgid "Pattern matching: destructuring enums, structs, and arrays." msgstr "Зіставлення шаблонів: деструктуризація переліків, структур і масивів." #: src/welcome-day-1.md src/welcome-day-2.md src/welcome-day-3.md -#: src/welcome-day-4.md +#: src/welcome-day-4.md src/concurrency/welcome.md +#: src/concurrency/welcome-async.md msgid "Schedule" msgstr "Розклад" #: src/welcome-day-1.md src/welcome-day-1-afternoon.md src/welcome-day-2.md #: src/welcome-day-2-afternoon.md src/welcome-day-3.md #: src/welcome-day-3-afternoon.md src/welcome-day-4.md -#: src/welcome-day-4-afternoon.md -msgid "In this session:" -msgstr "" - -#: src/welcome-day-1.md -msgid "[Welcome](./welcome-day-1.md) (5 minutes)" -msgstr "" - -#: src/welcome-day-1.md -msgid "[Hello, World](./hello-world.md) (20 minutes)" -msgstr "" - -#: src/welcome-day-1.md -msgid "[Types and Values](./types-and-values.md) (1 hour and 5 minutes)" -msgstr "" - -#: src/welcome-day-1.md -msgid "[Control Flow Basics](./control-flow-basics.md) (1 hour)" -msgstr "" - -#: src/welcome-day-1.md src/welcome-day-2-afternoon.md -msgid "Including 10 minute breaks, this session should take about 3 hours" +#: src/welcome-day-4-afternoon.md src/concurrency/welcome.md +#: src/concurrency/welcome-async.md +msgid "{{%session outline}}" msgstr "" #: src/welcome-day-1.md @@ -2460,33 +2464,32 @@ msgstr "" #: src/tuples-and-arrays.md src/references.md src/user-defined-types.md #: src/pattern-matching.md src/methods-and-traits.md src/generics.md #: src/std-types.md src/std-traits.md src/memory-management.md -#: src/smart-pointers.md src/borrowing.md src/slices-and-lifetimes.md -#: src/iterators.md src/modules.md src/testing.md src/error-handling.md -#: src/unsafe-rust.md -msgid "In this segment:" +#: src/smart-pointers.md src/borrowing.md src/lifetimes.md src/iterators.md +#: src/modules.md src/testing.md src/error-handling.md src/unsafe-rust.md +#: src/concurrency/threads.md src/concurrency/channels.md +#: src/concurrency/send-sync.md src/concurrency/shared-state.md +#: src/concurrency/sync-exercises.md src/concurrency/async.md +#: src/concurrency/async-control-flow.md src/concurrency/async-pitfalls.md +#: src/concurrency/async-exercises.md +msgid "{{%segment outline}}" msgstr "" -#: src/hello-world.md -msgid "[What is Rust?](./hello-world/what-is-rust.md) (10 minutes)" +#: src/hello-world/what-is-rust.md:2 src/references/shared.md:2 +#: src/references/exclusive.md:2 src/references/slices.md:2 +#: src/references/strings.md:2 src/user-defined-types/named-structs.md:2 +#: src/user-defined-types/tuple-structs.md:2 src/pattern-matching/match.md:2 +#: src/pattern-matching/let-control-flow.md:2 src/generics/generic-data.md:2 +#: src/generics/exercise.md:2 src/std-types/option.md:2 +#: src/std-traits/closures.md:2 src/memory-management/approaches.md:2 +#: src/smart-pointers/trait-objects.md:2 src/borrowing/shared.md:2 +#: src/borrowing/borrowck.md:2 src/borrowing/interior-mutability.md:2 +#: src/lifetimes/lifetime-annotations.md:2 src/unsafe-rust/dereferencing.md:2 +#: src/concurrency/async/runtimes.md:2 +#: src/concurrency/async-pitfalls/blocking-executor.md:2 +msgid "minutes: 10" msgstr "" -#: src/hello-world.md -msgid "[Hello, World](./hello-world/hello-world.md) (5 minutes)" -msgstr "" - -#: src/hello-world.md -msgid "[Benefits of Rust](./hello-world/benefits.md) (3 minutes)" -msgstr "" - -#: src/hello-world.md -msgid "[Playground](./hello-world/playground.md) (2 minutes)" -msgstr "" - -#: src/hello-world.md -msgid "This segment should take about 20 minutes" -msgstr "" - -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:7 msgid "" "Rust is a new programming language which had its [1.0 release in 2015]" "(https://blog.rust-lang.org/2015/05/15/Rust-1.0.html):" @@ -2494,16 +2497,16 @@ msgstr "" "Rust — це нова мова програмування, яка мала [1.0 випуск у 2015 році](https://" "blog.rust-lang.org/2015/05/15/Rust-1.0.html):" -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:9 msgid "Rust is a statically compiled language in a similar role as C++" msgstr "" "Rust — це статично скомпільована мова, яка виконує таку саму роль, як C++" -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:10 msgid "`rustc` uses LLVM as its backend." msgstr "`rustc` використовує LLVM як бекенд." -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:11 msgid "" "Rust supports many [platforms and architectures](https://doc.rust-lang.org/" "nightly/rustc/platform-support.html):" @@ -2511,161 +2514,77 @@ msgstr "" "Rust підтримує багато [платформ і архітектур](https://doc.rust-lang.org/" "nightly/rustc/platform-support.html):" -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:13 msgid "x86, ARM, WebAssembly, ..." msgstr "x86, ARM, WebAssembly, ..." -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:14 msgid "Linux, Mac, Windows, ..." msgstr "Linux, Mac, Windows, ..." -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:15 msgid "Rust is used for a wide range of devices:" msgstr "Rust використовується для широкого спектру пристроїв:" -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:16 msgid "firmware and boot loaders," msgstr "прошивки та завантажувачі," -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:17 msgid "smart displays," msgstr "розумні дисплеї," -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:18 msgid "mobile phones," msgstr "мобільні телефони," -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:19 msgid "desktops," msgstr "робочі станції," -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:20 msgid "servers." msgstr "сервери." -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:24 msgid "Rust fits in the same area as C++:" msgstr "Rust вписується в ту ж саму область, що й C++:" -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:26 msgid "High flexibility." msgstr "Висока гнучкість." -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:27 msgid "High level of control." msgstr "Високий рівень контролю." -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:28 msgid "" "Can be scaled down to very constrained devices such as microcontrollers." msgstr "" "Може бути зменьшений до дуже обмежених пристроїв, таких як мікроконтролери." -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:29 msgid "Has no runtime or garbage collection." msgstr "Не має часу виконання або збирання сміття." -#: src/hello-world/what-is-rust.md +#: src/hello-world/what-is-rust.md:30 msgid "Focuses on reliability and safety without sacrificing performance." msgstr "Зосереджений на надійності та безпеці без шкоди для продуктивності." -#: src/hello-world/hello-world.md -msgid "" -"Let us jump into the simplest possible Rust program, a classic Hello World " -"program:" +#: src/hello-world/benefits.md:2 src/types-and-values/arithmetic.md:2 +#: src/types-and-values/inference.md:2 src/control-flow-basics/functions.md:2 +#: src/tuples-and-arrays/iteration.md:2 src/methods-and-traits/deriving.md:2 +#: src/std-types/std.md:2 src/borrowing/examples.md:2 src/modules/modules.md:2 +#: src/testing/lints.md:2 src/error-handling/panics.md:2 +msgid "minutes: 3" msgstr "" -"Перейдемо до найпростішої програми Rust, класичної програми Hello World:" -#: src/hello-world/hello-world.md -msgid "\"Hello 🌍!\"" -msgstr "\"Привіт 🌍!\"" - -#: src/hello-world/hello-world.md -msgid "What you see:" -msgstr "Що ви бачите:" - -#: src/hello-world/hello-world.md -msgid "Functions are introduced with `fn`." -msgstr "Функції вводяться за допомогою `fn`." - -#: src/hello-world/hello-world.md -msgid "Blocks are delimited by curly braces like in C and C++." -msgstr "Блоки розділені фігурними дужками, як у C і C++." - -#: src/hello-world/hello-world.md -msgid "The `main` function is the entry point of the program." -msgstr "Функція `main` є точкою входу в програму." - -#: src/hello-world/hello-world.md -msgid "Rust has hygienic macros, `println!` is an example of this." -msgstr "Rust має гігієнічні макроси, `println!` є прикладом цього." - -#: src/hello-world/hello-world.md -msgid "Rust strings are UTF-8 encoded and can contain any Unicode character." -msgstr "" -"Рядки в Rust мають кодування UTF-8 і можуть містити будь-які символи Unicode." - -#: src/hello-world/hello-world.md -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 " -"familiar." -msgstr "" -"Цей слайд спрямований на те, щоб студенти звикли працювати з кодом Rust. " -"Вони побачать масу цього протягом наступних чотирьох днів, тож ми починаємо " -"з чогось малого та знайомого." - -#: src/hello-world/hello-world.md -msgid "" -"Rust is very much like other languages in the C/C++/Java tradition. It is " -"imperative and it doesn't try to reinvent things unless absolutely necessary." -msgstr "" -"Rust дуже схожий на інші традиціїні мови як C/C++/Java. Це навмисно, і він " -"не намагається винайти щось заново, якщо це не є абсолютно необхідним." - -#: src/hello-world/hello-world.md -msgid "Rust is modern with full support for things like Unicode." -msgstr "Rust сучасний із повною підтримкою таких речей, як Unicode." - -#: src/hello-world/hello-world.md -msgid "" -"Rust uses macros for situations where you want to have a variable number of " -"arguments (no function [overloading](../control-flow-basics/functions.md))." -msgstr "" -"Rust використовує макроси для ситуацій, коли потрібно мати змінну кількість " -"аргументів (немає [перевантаження](basic-syntax/functions-interlude.md) " -"функцій)." - -#: src/hello-world/hello-world.md -msgid "" -"Macros being 'hygienic' means they don't accidentally capture identifiers " -"from the scope they are used in. Rust macros are actually only [partially " -"hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene." -"html)." -msgstr "" -"Макроси є «гігієнічними» що означає, що вони випадково не захоплюють " -"ідентифікатори з області, у якій вони використовуються. Макроси Rust " -"насправді лише [частково гігієнічні](https://veykril.github.io/tlborm/decl-" -"macros/minutiae/hygiene .html)." - -#: src/hello-world/hello-world.md -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 "" -"Rust є мультипарадигмою. Наприклад, він має потужні [функції об’єктно-" -"орієнтованого програмування](https://doc.rust-lang.org/book/ch17-00-oop." -"html), і, хоча це не функціональна мова, він включає діапазон " -"[функціональних понять](https://doc.rust-lang.org/book/ch13-00-functional-" -"features.html)." - -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:7 msgid "Some unique selling points of Rust:" msgstr "Деякі унікальні переваги Rust:" -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:9 msgid "" "_Compile time memory safety_ - whole classes of memory bugs are prevented at " "compile time" @@ -2673,35 +2592,35 @@ msgstr "" "_Безпека пам'яті під час компіляції_ - цілі класи помилок пам'яті " "запобігаються на етапі компіляції" -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:11 msgid "No uninitialized variables." msgstr "Немає неініціалізованих змінних." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:12 msgid "No double-frees." msgstr "Ніяких подвійних звільнень." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:13 msgid "No use-after-free." msgstr "Немає використання після звільнення." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:14 msgid "No `NULL` pointers." msgstr "Немає вказівників `NULL`." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:15 msgid "No forgotten locked mutexes." msgstr "Немає забутих заблокованих м'ютексів." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:16 msgid "No data races between threads." msgstr "Немає перегонів даних між потоками." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:17 msgid "No iterator invalidation." msgstr "Немає недійсності ітератора." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:19 msgid "" "_No undefined runtime behavior_ - what a Rust statement does is never left " "unspecified" @@ -2709,16 +2628,16 @@ msgstr "" "_Ніякої невизначеної поведінки під час виконання_ - те, що робить оператор " "Rust, ніколи не залишається невизначеним" -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:21 msgid "Array access is bounds checked." msgstr "Доступ до масиву перевірено на межі." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:22 msgid "Integer overflow is defined (panic or wrap-around)." msgstr "" "Поведінка цілочисельного переповнення визначена (паніка або обертання)." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:24 msgid "" "_Modern language features_ - as expressive and ergonomic as higher-level " "languages" @@ -2726,39 +2645,39 @@ msgstr "" "_Можливості сучасної мови_ - така ж виразна та ергономічна, як і мови вищих " "рівнів" -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:26 msgid "Enums and pattern matching." msgstr "Переліки та зіставлення шаблонів." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:27 msgid "Generics." msgstr "Узагальнені типи." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:28 msgid "No overhead FFI." msgstr "FFI без накладних витрат." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:29 msgid "Zero-cost abstractions." msgstr "Абстракції без витрат." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:30 msgid "Great compiler errors." msgstr "Чудово деталізовані помилки компілятора." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:31 msgid "Built-in dependency manager." msgstr "Вбудований менеджер залежностей." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:32 msgid "Built-in support for testing." msgstr "Вбудована підтримка тестування." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:33 msgid "Excellent Language Server Protocol support." msgstr "Чудова підтримка протоколу мовного сервера (LSP)." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:37 msgid "" "Do not spend much time here. All of these points will be covered in more " "depth later." @@ -2766,7 +2685,7 @@ msgstr "" "Не витрачайте тут багато часу. Всі ці пункти будуть розглянуті більш " "детально пізніше." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:40 msgid "" "Make sure to ask the class which languages they have experience with. " "Depending on the answer you can highlight different features of Rust:" @@ -2774,7 +2693,7 @@ msgstr "" "Обов’язково запитайте клас, з якими мовами вони мають досвід. Залежно від " "відповіді ви можете виділити різні особливості Rust:" -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:43 msgid "" "Experience with C or C++: Rust eliminates a whole class of _runtime errors_ " "via the borrow checker. You get performance like in C and C++, but you don't " @@ -2787,12 +2706,13 @@ msgstr "" "сучасну мову з такими конструкціями, як зіставлення шаблонів і вбудоване " "керування залежностями." -#: src/hello-world/benefits.md +#: src/hello-world/benefits.md:48 +#, fuzzy msgid "" "Experience with Java, Go, Python, JavaScript...: You get the same memory " "safety as in those languages, plus a similar high-level language feeling. In " "addition you get fast and predictable performance like C and C++ (no garbage " -"collector) as well as access to low-level hardware (should you need it)" +"collector) as well as access to low-level hardware (should you need it)." msgstr "" "Досвід роботи з Java, Go, Python, JavaScript...: Ви отримуєте таку саму " "безпеку пам’яті, що й у цих мовах, а також подібне відчуття мови високого " @@ -2800,7 +2720,15 @@ msgstr "" "C++ (без збиральника сміття), а також доступ низького рівня до апаратного " "забезпечення (якщо воно вам знадобиться)" -#: src/hello-world/playground.md +#: src/hello-world/playground.md:2 src/control-flow-basics/macros.md:2 +#: src/user-defined-types/aliases.md:2 src/memory-management/clone.md:2 +#: src/concurrency/channels/unbounded.md:2 +#: src/concurrency/send-sync/marker-traits.md:2 +#: src/concurrency/send-sync/send.md:2 src/concurrency/send-sync/sync.md:2 +msgid "minutes: 2" +msgstr "" + +#: src/hello-world/playground.md:7 msgid "" "The [Rust Playground](https://play.rust-lang.org/) provides an easy way to " "run short Rust programs, and is the basis for the examples and exercises in " @@ -2812,7 +2740,7 @@ msgstr "" "курсі. Спробуйте запустити програму \"hello-world\", з якої він " "починається. Вона має декілька зручних можливостей:" -#: src/hello-world/playground.md +#: src/hello-world/playground.md:12 msgid "" "Under \"Tools\", use the `rustfmt` option to format your code in the " "\"standard\" way." @@ -2820,7 +2748,7 @@ msgstr "" "У розділі \"Інструменти\" скористайтеся опцією `rustfmt` для форматування " "вашого коду у \"стандартний\" спосіб." -#: src/hello-world/playground.md +#: src/hello-world/playground.md:15 msgid "" "Rust has two main \"profiles\" for generating code: Debug (extra runtime " "checks, less optimization) and Release (fewer runtime checks, lots of " @@ -2831,7 +2759,7 @@ msgstr "" "перевірок під час виконання, багато оптимізацій). Вони доступні у розділі " "\"Налагодження\" у верхній частині вікна." -#: src/hello-world/playground.md +#: src/hello-world/playground.md:19 msgid "" "If you're interested, use \"ASM\" under \"...\" to see the generated " "assembly code." @@ -2839,7 +2767,7 @@ msgstr "" "Якщо вам цікаво, скористайтеся командою \"ASM\" в \"...\", щоб переглянути " "згенерований асемблерний код." -#: src/hello-world/playground.md +#: src/hello-world/playground.md:24 msgid "" "As students head into the break, encourage them to open up the playground " "and experiment a little. Encourage them to keep the tab open and try things " @@ -2852,35 +2780,130 @@ msgstr "" "щось протягом решти курсу. Це особливо корисно для досвідчених студентів, " "які хочуть дізнатися більше про оптимізацію Rust або згенеровану збірку." -#: src/types-and-values.md -msgid "[Variables](./types-and-values/variables.md) (5 minutes)" +#: src/types-and-values/hello-world.md:2 src/types-and-values/variables.md:2 +#: src/types-and-values/values.md:2 src/control-flow-basics/loops.md:2 +#: src/control-flow-basics/blocks-and-scopes.md:2 +#: src/tuples-and-arrays/arrays.md:2 src/tuples-and-arrays/tuples.md:2 +#: src/tuples-and-arrays/destructuring.md:2 src/user-defined-types/enums.md:2 +#: src/user-defined-types/static.md:2 src/generics/generic-functions.md:2 +#: src/generics/impl-trait.md:2 src/generics/dyn-trait.md:2 +#: src/std-types/docs.md:2 src/std-types/result.md:2 src/std-types/string.md:2 +#: src/std-types/vec.md:2 src/std-types/hashmap.md:2 +#: src/std-traits/comparisons.md:2 src/std-traits/operators.md:2 +#: src/std-traits/from-and-into.md:2 src/std-traits/casting.md:2 +#: src/std-traits/read-and-write.md:2 src/std-traits/default.md:2 +#: src/memory-management/review.md:2 src/memory-management/ownership.md:2 +#: src/memory-management/move.md:2 src/memory-management/copy-types.md:2 +#: src/smart-pointers/rc.md:2 src/lifetimes/lifetime-elision.md:2 +#: src/lifetimes/struct-lifetimes.md:2 src/iterators/iterator.md:2 +#: src/iterators/intoiterator.md:2 src/iterators/fromiterator.md:2 +#: src/modules/filesystem.md:2 src/modules/visibility.md:2 +#: src/testing/unit-tests.md:2 src/testing/other.md:2 +#: src/error-handling/result.md:2 src/error-handling/try.md:2 +#: src/error-handling/try-conversions.md:2 src/error-handling/error.md:2 +#: src/error-handling/thiserror-and-anyhow.md:2 src/unsafe-rust/unsafe.md:2 +#: src/unsafe-rust/mutable-static.md:2 src/unsafe-rust/unions.md:2 +#: src/unsafe-rust/unsafe-functions.md:2 src/unsafe-rust/unsafe-traits.md:2 +#: src/android/testing/googletest.md:2 src/android/testing/mocking.md:2 +#: src/concurrency/shared-state/arc.md:2 +#: src/concurrency/async-control-flow/select.md:2 +#: src/concurrency/async-pitfalls/async-traits.md:2 +msgid "minutes: 5" msgstr "" -#: src/types-and-values.md -msgid "[Values](./types-and-values/values.md) (10 minutes)" +#: src/types-and-values/hello-world.md:7 +msgid "" +"Let us jump into the simplest possible Rust program, a classic Hello World " +"program:" msgstr "" +"Перейдемо до найпростішої програми Rust, класичної програми Hello World:" -#: src/types-and-values.md -msgid "[Arithmetic](./types-and-values/arithmetic.md) (5 minutes)" +#: src/types-and-values/hello-world.md:12 +msgid "\"Hello 🌍!\"" +msgstr "\"Привіт 🌍!\"" + +#: src/types-and-values/hello-world.md:16 +msgid "What you see:" +msgstr "Що ви бачите:" + +#: src/types-and-values/hello-world.md:18 +msgid "Functions are introduced with `fn`." +msgstr "Функції вводяться за допомогою `fn`." + +#: src/types-and-values/hello-world.md:19 +msgid "Blocks are delimited by curly braces like in C and C++." +msgstr "Блоки розділені фігурними дужками, як у C і C++." + +#: src/types-and-values/hello-world.md:20 +msgid "The `main` function is the entry point of the program." +msgstr "Функція `main` є точкою входу в програму." + +#: src/types-and-values/hello-world.md:21 +msgid "Rust has hygienic macros, `println!` is an example of this." +msgstr "Rust має гігієнічні макроси, `println!` є прикладом цього." + +#: src/types-and-values/hello-world.md:22 +msgid "Rust strings are UTF-8 encoded and can contain any Unicode character." msgstr "" +"Рядки в Rust мають кодування UTF-8 і можуть містити будь-які символи Unicode." -#: src/types-and-values.md -msgid "[Strings](./types-and-values/strings.md) (10 minutes)" +#: src/types-and-values/hello-world.md:26 +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 " +"familiar." msgstr "" +"Цей слайд спрямований на те, щоб студенти звикли працювати з кодом Rust. " +"Вони побачать масу цього протягом наступних чотирьох днів, тож ми починаємо " +"з чогось малого та знайомого." -#: src/types-and-values.md -msgid "[Type Inference](./types-and-values/inference.md) (5 minutes)" +#: src/types-and-values/hello-world.md:31 +msgid "" +"Rust is very much like other languages in the C/C++/Java tradition. It is " +"imperative and it doesn't try to reinvent things unless absolutely necessary." msgstr "" +"Rust дуже схожий на інші традиціїні мови як C/C++/Java. Це навмисно, і він " +"не намагається винайти щось заново, якщо це не є абсолютно необхідним." -#: src/types-and-values.md -msgid "[Exercise: Fibonacci](./types-and-values/exercise.md) (30 minutes)" +#: src/types-and-values/hello-world.md:34 +msgid "Rust is modern with full support for things like Unicode." +msgstr "Rust сучасний із повною підтримкою таких речей, як Unicode." + +#: src/types-and-values/hello-world.md:36 +msgid "" +"Rust uses macros for situations where you want to have a variable number of " +"arguments (no function [overloading](../control-flow-basics/functions.md))." msgstr "" +"Rust використовує макроси для ситуацій, коли потрібно мати змінну кількість " +"аргументів (немає [перевантаження](basic-syntax/functions-interlude.md) " +"функцій)." -#: src/types-and-values.md src/testing.md src/unsafe-rust.md -msgid "This segment should take about 1 hour and 5 minutes" +#: src/types-and-values/hello-world.md:39 +msgid "" +"Macros being 'hygienic' means they don't accidentally capture identifiers " +"from the scope they are used in. Rust macros are actually only [partially " +"hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene." +"html)." msgstr "" +"Макроси є «гігієнічними» що означає, що вони випадково не захоплюють " +"ідентифікатори з області, у якій вони використовуються. Макроси Rust " +"насправді лише [частково гігієнічні](https://veykril.github.io/tlborm/decl-" +"macros/minutiae/hygiene .html)." -#: src/types-and-values/variables.md +#: src/types-and-values/hello-world.md:43 +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 "" +"Rust є мультипарадигмою. Наприклад, він має потужні [функції об’єктно-" +"орієнтованого програмування](https://doc.rust-lang.org/book/ch17-00-oop." +"html), і, хоча це не функціональна мова, він включає діапазон " +"[функціональних понять](https://doc.rust-lang.org/book/ch13-00-functional-" +"features.html)." + +#: src/types-and-values/variables.md:7 msgid "" "Rust provides type safety via static typing. Variable bindings are made with " "`let`:" @@ -2888,13 +2911,12 @@ msgstr "" "Rust забезпечує безпеку типів за допомогою статичної типізації. Прив'язки " "змінних створюються за допомогою `let`:" -#: src/types-and-values/variables.md src/control-flow-basics/loops.md -#: src/control-flow-basics/break-continue.md -#: src/control-flow-basics/blocks-and-scopes.md +#: src/types-and-values/variables.md:13 src/control-flow-basics/loops/for.md:9 +#: src/control-flow-basics/blocks-and-scopes.md:21 msgid "\"x: {x}\"" msgstr "\"x: {x}\"" -#: src/types-and-values/variables.md +#: src/types-and-values/variables.md:14 msgid "" "// x = 20;\n" " // println!(\"x: {x}\");\n" @@ -2902,7 +2924,7 @@ msgstr "" "// x = 20;\n" " // println!(\"x: {x}\");\n" -#: src/types-and-values/variables.md +#: src/types-and-values/variables.md:21 msgid "" "Uncomment the `x = 20` to demonstrate that variables are immutable by " "default. Add the `mut` keyword to allow changes." @@ -2910,7 +2932,7 @@ msgstr "" "Відкоментуйте `x = 20`, щоб продемонструвати, що змінні за замовчуванням є " "незмінними. Додайте ключове слово `mut`, щоб дозволити зміну." -#: src/types-and-values/variables.md +#: src/types-and-values/variables.md:24 msgid "" "The `i32` here is the type of the variable. This must be known at compile " "time, but type inference (covered later) allows the programmer to omit it in " @@ -2920,7 +2942,7 @@ msgstr "" "виведення типів (розглядається пізніше) дозволяє програмісту у багатьох " "випадках не вказувати його." -#: src/types-and-values/values.md +#: src/types-and-values/values.md:7 msgid "" "Here are some basic built-in types, and the syntax for literal values of " "each type." @@ -2928,100 +2950,99 @@ msgstr "" "Нижче наведено деякі основні вбудовані типи та синтаксис для літеральних " "значень кожного типу." -#: src/types-and-values/values.md src/tuples-and-arrays/tuples-and-arrays.md -#: src/unsafe-rust/exercise.md +#: src/types-and-values/values.md:10 src/unsafe-rust/exercise.md:20 msgid "Types" msgstr "Типи" -#: src/types-and-values/values.md src/tuples-and-arrays/tuples-and-arrays.md +#: src/types-and-values/values.md:10 msgid "Literals" msgstr "Літерали" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:12 msgid "Signed integers" msgstr "Цілі числа зі знаком" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:12 msgid "`i8`, `i16`, `i32`, `i64`, `i128`, `isize`" msgstr "`i8`, `i16`, `i32`, `i64`, `i128`, `isize`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:12 msgid "`-10`, `0`, `1_000`, `123_i64`" msgstr "`-10`, `0`, `1_000`, `123_i64`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:13 msgid "Unsigned integers" msgstr "Беззнакові цілі числа" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:13 msgid "`u8`, `u16`, `u32`, `u64`, `u128`, `usize`" msgstr "`u8`, `u16`, `u32`, `u64`, `u128`, `usize`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:13 msgid "`0`, `123`, `10_u16`" msgstr "`0`, `123`, `10_u16`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:14 msgid "Floating point numbers" msgstr "Числа з плаваючою комою" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:14 msgid "`f32`, `f64`" msgstr "`f32`, `f64`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:14 msgid "`3.14`, `-10.0e20`, `2_f32`" msgstr "`3.14`, `-10.0e20`, `2_f32`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:15 msgid "Unicode scalar values" msgstr "Скалярні значення Unicode" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:15 src/android/aidl/types/primitives.md:9 msgid "`char`" msgstr "`char`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:15 msgid "`'a'`, `'α'`, `'∞'`" msgstr "`'a'`, `'α'`, `'∞'`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:16 msgid "Booleans" msgstr "Логічні значення" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:16 src/android/aidl/types/primitives.md:7 msgid "`bool`" msgstr "`bool`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:16 msgid "`true`, `false`" msgstr "`true`, `false`" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:18 msgid "The types have widths as follows:" msgstr "Типи мають наступну ширину:" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:20 msgid "`iN`, `uN`, and `fN` are _N_ bits wide," msgstr "`iN`, `uN` і `fN` мають ширину _N_ біт," -#: src/types-and-values/values.md +#: src/types-and-values/values.md:21 msgid "`isize` and `usize` are the width of a pointer," msgstr "`isize` і `usize` – це ширина вказівника," -#: src/types-and-values/values.md +#: src/types-and-values/values.md:22 msgid "`char` is 32 bits wide," msgstr "`char` має ширину 32 біти," -#: src/types-and-values/values.md +#: src/types-and-values/values.md:23 msgid "`bool` is 8 bits wide." msgstr "`bool` має ширину 8 біт." -#: src/types-and-values/values.md +#: src/types-and-values/values.md:27 msgid "There are a few syntaxes which are not shown above:" msgstr "Є кілька синтаксисів, які не показано вище:" -#: src/types-and-values/values.md +#: src/types-and-values/values.md:29 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 " @@ -3031,11 +3052,11 @@ msgstr "" "розбірливості. Отже, `1_000` можна записати як `1000` (або `10_00`), а " "`123_i64` можна записати як `123i64`." -#: src/types-and-values/arithmetic.md +#: src/types-and-values/arithmetic.md:13 msgid "\"result: {}\"" msgstr "\"результат: {}\"" -#: src/types-and-values/arithmetic.md +#: src/types-and-values/arithmetic.md:19 msgid "" "This is the first time we've seen a function other than `main`, but the " "meaning should be clear: it takes three integers, and returns an integer. " @@ -3045,21 +3066,22 @@ msgstr "" "повинно бути зрозумілим: вона отримує три цілих числа і повертає ціле число. " "Функції буде розглянуто більш детально пізніше." -#: src/types-and-values/arithmetic.md +#: src/types-and-values/arithmetic.md:23 msgid "Arithmetic is very similar to other languages, with similar precedence." msgstr "Арифметика дуже схожа на інші мови, зі схожими пріоритетами." -#: src/types-and-values/arithmetic.md +#: src/types-and-values/arithmetic.md:25 +#, fuzzy msgid "" "What about integer overflow? In C and C++ overflow of _signed_ integers is " -"actually undefined, and might do different things on different platforms or " -"compilers. In Rust, it's defined." +"actually undefined, and might do unknown things at runtime. In Rust, it's " +"defined." msgstr "" "Як бути з переповненням цілих чисел? У мовах C та C++ переповнення цілих " "чисел _зі знаком_ фактично не визначено, і на різних платформах та " "компіляторах воно може поводитися по-різному. У Rust воно визначене." -#: src/types-and-values/arithmetic.md +#: src/types-and-values/arithmetic.md:29 msgid "" "Change the `i32`'s to `i16` to see an integer overflow, which panics " "(checked) in a debug build and wraps in a release build. There are other " @@ -3073,7 +3095,7 @@ msgstr "" "Доступ до них здійснюється за допомогою синтаксису методу, наприклад, `(a * " "b).saturating_add(b * c).saturating_add(c * a)`." -#: src/types-and-values/arithmetic.md +#: src/types-and-values/arithmetic.md:34 msgid "" "In fact, the compiler will detect overflow of constant expressions, which is " "why the example requires a separate function." @@ -3081,105 +3103,11 @@ msgstr "" "Насправді, компілятор виявить переповнення константних виразів, тому приклад " "вимагає окремої функції." -#: src/types-and-values/strings.md -msgid "" -"Rust has two types to represent strings, both of which will be covered in " -"more depth later. Both _always_ store UTF-8 encoded strings." -msgstr "" -"Rust має два типи для представлення рядків, обидва з яких будуть розглянуті " -"більш детально пізніше. Обидва типи _завжди_ зберігають рядки у кодуванні " -"UTF-8." - -#: src/types-and-values/strings.md -msgid "`String` - a modifiable, owned string." -msgstr "`String` - змінюваний рядок, що належить власнику." - -#: src/types-and-values/strings.md -msgid "`&str` - a read-only string. String literals have this type." -msgstr "" -"`&str` - рядок, доступний тільки для читання. Цей тип мають рядкові літерали." - -#: src/types-and-values/strings.md -msgid "\"Greetings\"" -msgstr "\" Привітання\"" - -#: src/types-and-values/strings.md -msgid "\"🪐\"" -msgstr "\"🪐\"" - -#: src/types-and-values/strings.md -msgid "\", \"" -msgstr "\", \"" - -#: src/types-and-values/strings.md -msgid "\"final sentence: {}\"" -msgstr "\"останнє речення: {}\"" - -#: src/types-and-values/strings.md src/async/control-flow/join.md -msgid "\"{:?}\"" -msgstr "\"{:?}\"" - -#: src/types-and-values/strings.md -msgid "//println!(\"{:?}\", &sentence[12..13]);\n" -msgstr "//println!(\"{:?}\", &sentence[12..13]);\n" - -#: src/types-and-values/strings.md -msgid "" -"This slide introduces strings. Everything here will be covered in more depth " -"later, but this is enough for subsequent slides and exercises to use strings." -msgstr "" -"Цей слайд знайомить зі рядками. Пізніше ми розглянемо все більш детально, " -"але цього достатньо для наступних слайдів і вправ з використанням рядків." - -#: src/types-and-values/strings.md -msgid "Invalid UTF-8 in a string is UB, and this not allowed in safe Rust." -msgstr "" -"Неправильний UTF-8 у рядку є невизначена поведінка, а це заборонено у " -"безпечному Rust." - -#: src/types-and-values/strings.md -msgid "" -"`String` is a user-defined type with a constructor (`::new()`) and methods " -"like `s.push_str(..)`." -msgstr "" -"`String` - це визначений користувачем тип з конструктором (`::new()`) і " -"методами на зразок `s.push_str(..)`." - -#: src/types-and-values/strings.md -msgid "" -"The `&` in `&str` indicates that this is a reference. We will cover " -"references later, so for now just think of `&str` as a unit meaning \"a read-" -"only string\"." -msgstr "" -"Символ `&` в `&str` вказує на те, що це посилання. Ми розглянемо посилання " -"пізніше, а поки що вважайте `&str` одиницею, яка означає \"рядок лише для " -"читання\"." - -#: src/types-and-values/strings.md -msgid "" -"The commented-out line is indexing into the string by byte position. " -"`12..13` does not end on a character boundary, so the program panics. Adjust " -"it to a range that does, based on the error message." -msgstr "" -"Закоментований рядок індексується у рядку за позицією байта. `12..13` не " -"закінчується на межі символів, тому програма панікує. Налаштуйте її на " -"діапазон, який відповідає цій межі, виходячи з повідомлення про помилку." - -#: src/types-and-values/strings.md -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 "" -"Необроблені рядки дозволяють створювати значення `&str` з відключеним " -"екрануванням: `r\"\\n\" == \"\\\\n\"`. Ви можете вставити подвійні лапки, " -"використовуючи однакову кількість `#` з обох боків лапок:" - -#: src/types-and-values/inference.md +#: src/types-and-values/inference.md:7 msgid "Rust will look at how the variable is _used_ to determine the type:" msgstr "Rust перевірить, як _використовується_ змінна для визначення типу:" -#: src/types-and-values/inference.md +#: src/types-and-values/inference.md:32 msgid "" "This slide demonstrates how the Rust compiler infers types based on " "constraints given by variable declarations and usages." @@ -3187,7 +3115,7 @@ msgstr "" "На цьому слайді показано, як компілятор Rust виводить типи на основі " "обмежень, заданих оголошеннями змінних та їх використанням." -#: src/types-and-values/inference.md +#: src/types-and-values/inference.md:35 msgid "" "It is very important to emphasize that variables declared like this are not " "of some sort of dynamic \"any type\" that can hold any data. The machine " @@ -3201,7 +3129,7 @@ msgstr "" "типу. Компілятор виконує роботу за нас і допомагає нам писати більш стислий " "код." -#: src/types-and-values/inference.md +#: src/types-and-values/inference.md:40 msgid "" "When nothing constrains the type of an integer literal, Rust defaults to " "`i32`. This sometimes appears as `{integer}` in error messages. Similarly, " @@ -3212,20 +3140,28 @@ msgstr "" "`{integer}`. Подібно до цього, літерали з плаваючою комою за замовчуванням " "мають тип `f64`." -#: src/types-and-values/inference.md +#: src/types-and-values/inference.md:49 msgid "// ERROR: no implementation for `{float} == {integer}`\n" msgstr "// ERROR: no implementation for `{float} == {integer}`\n" -#: src/types-and-values/exercise.md +#: src/types-and-values/exercise.md:2 src/control-flow-basics/exercise.md:2 +#: src/tuples-and-arrays/exercise.md:2 src/references/exercise.md:2 +#: src/user-defined-types/exercise.md:2 src/methods-and-traits/traits.md:2 +#: src/modules/exercise.md:2 src/concurrency/threads/plain.md:2 +msgid "minutes: 15" +msgstr "" + +#: src/types-and-values/exercise.md:7 +#, fuzzy msgid "" -"The first and second Fibonacci numbers are both `1`. For n>2, the n'th " -"Fibonacci number is calculated recursively as the sum of the n-1'th and " -"n-2'th Fibonacci numbers." +"The Fibonacci sequence begins with `[0,1]`. For n>1, the n'th Fibonacci " +"number is calculated recursively as the sum of the n-1'th and n-2'th " +"Fibonacci numbers." msgstr "" "Перше і друге число Фібоначчі рівні `1`. Для n>2 n-те число Фібоначчі " "обчислюється рекурсивно як сума n-1-го та n-2-го чисел Фібоначчі." -#: src/types-and-values/exercise.md +#: src/types-and-values/exercise.md:10 msgid "" "Write a function `fib(n)` that calculates the n'th Fibonacci number. When " "will this function panic?" @@ -3233,88 +3169,38 @@ msgstr "" "Напишіть функцію `fib(n)`, яка обчислює n-те число Фібоначчі. Коли ця " "функція запанікує?" -#: src/types-and-values/exercise.md +#: src/types-and-values/exercise.md:16 msgid "// The base case.\n" msgstr "// Базовий випадок.\n" -#: src/types-and-values/exercise.md src/control-flow-basics/exercise.md +#: src/types-and-values/exercise.md:17 src/types-and-values/exercise.md:20 +#: src/control-flow-basics/exercise.md:31 +#: src/control-flow-basics/exercise.md:35 msgid "\"Implement this\"" msgstr "\"Реалізуйте це\"" -#: src/types-and-values/exercise.md +#: src/types-and-values/exercise.md:19 msgid "// The recursive case.\n" msgstr "// Рекурсивний випадок.\n" -#: src/types-and-values/exercise.md src/types-and-values/solution.md -msgid "\"fib(n) = {}\"" +#: src/types-and-values/exercise.md:26 src/types-and-values/solution.md:14 +#, fuzzy +msgid "\"fib({n}) = {}\"" msgstr "\"fib(n) = {}\"" -#: src/control-flow-basics.md -msgid "[Conditionals](./control-flow-basics/conditionals.md) (5 minutes)" +#: src/control-flow-basics/if.md:2 src/control-flow-basics/break-continue.md:2 +#: src/pattern-matching/destructuring-structs.md:2 +#: src/pattern-matching/destructuring-enums.md:2 +#: src/concurrency/async/futures.md:2 +#: src/concurrency/async-control-flow/join.md:2 +msgid "minutes: 4" msgstr "" -#: src/control-flow-basics.md -msgid "[Loops](./control-flow-basics/loops.md) (5 minutes)" -msgstr "" - -#: src/control-flow-basics.md -msgid "" -"[break and continue](./control-flow-basics/break-continue.md) (5 minutes)" -msgstr "" - -#: src/control-flow-basics.md -msgid "" -"[Blocks and Scopes](./control-flow-basics/blocks-and-scopes.md) (10 minutes)" -msgstr "" - -#: src/control-flow-basics.md -msgid "[Functions](./control-flow-basics/functions.md) (3 minutes)" -msgstr "" - -#: src/control-flow-basics.md -msgid "[Macros](./control-flow-basics/macros.md) (2 minutes)" -msgstr "" - -#: src/control-flow-basics.md -msgid "" -"[Exercise: Collatz Sequence](./control-flow-basics/exercise.md) (30 minutes)" -msgstr "" - -#: src/control-flow-basics.md src/tuples-and-arrays.md src/borrowing.md -msgid "This segment should take about 1 hour" -msgstr "" - -#: src/control-flow-basics/conditionals.md -msgid "Much of the Rust syntax will be familiar to you from C, C++ or Java:" -msgstr "Значна частина синтаксису Rust буде вам знайома з C, C++ або Java:" - -#: src/control-flow-basics/conditionals.md -msgid "Blocks are delimited by curly braces." -msgstr "Блоки розділені фігурними дужками." - -#: src/control-flow-basics/conditionals.md -msgid "" -"Line comments are started with `//`, block comments are delimited by `/* ... " -"*/`." -msgstr "" -"Коментарі до рядків починаються з `//`, блокові коментарі розмежовуються за " -"допомогою `/* ... */`." - -#: src/control-flow-basics/conditionals.md -msgid "Keywords like `if` and `while` work the same." -msgstr "Такі ключові слова, як `if` та `while` працюють також само." - -#: src/control-flow-basics/conditionals.md -msgid "Variable assignment is done with `=`, comparison is done with `==`." -msgstr "" -"Присвоєння змінної виконується за допомогою `=`, порівняння — за допомогою " -"`==`." - -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md:5 msgid "`if` expressions" msgstr "Вирази `if`" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md:7 msgid "" "You use [`if` expressions](https://doc.rust-lang.org/reference/expressions/" "if-expr.html#if-expressions) exactly like `if` statements in other languages:" @@ -3323,19 +3209,19 @@ msgstr "" "expressions/if-expr.html#if-expressions) так само, як і вирази `if` в інших " "мовах:" -#: src/control-flow-basics/conditionals.md -msgid "\"small\"" -msgstr "\"маленький\"" +#: src/control-flow-basics/if.md:15 +msgid "\"zero!\"" +msgstr "" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md:17 msgid "\"biggish\"" msgstr "\"великий\"" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md:19 msgid "\"huge\"" msgstr "\"величезний\"" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md:24 msgid "" "In addition, you can use `if` as an expression. The last expression of each " "block becomes the value of the `if` expression:" @@ -3343,15 +3229,19 @@ msgstr "" "Крім того, ви можете використовувати `if` як вираз. Останній вираз кожного " "блоку стає значенням виразу `if`:" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md:30 +msgid "\"small\"" +msgstr "\"маленький\"" + +#: src/control-flow-basics/if.md:30 msgid "\"large\"" msgstr "\"великий\"" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md:31 msgid "\"number size: {}\"" msgstr "\"розмір числа: {}\"" -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md:37 msgid "" "Because `if` is an expression and must have a particular type, both of its " "branch blocks must have the same type. Show what happens if you add `;` " @@ -3361,7 +3251,7 @@ msgstr "" "розгалужень повинні мати той самий тип. Покажіть, що станеться, якщо додати " "`;` після `\"маленький\"` у другому прикладі." -#: src/control-flow-basics/conditionals.md +#: src/control-flow-basics/if.md:41 msgid "" "When `if` is used in an expression, the expression must have a `;` to " "separate it from the next statement. Remove the `;` before `println!` to see " @@ -3371,15 +3261,15 @@ msgstr "" "його від наступного оператора. Видаліть `;` перед `println!`, щоб побачити " "помилку компілятора." -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops.md:7 msgid "There are three looping keywords in Rust: `while`, `loop`, and `for`:" msgstr "У Rust є три ключові слова циклу: `while`, `loop` і `for`:" -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops.md:9 msgid "`while`" msgstr "`while`" -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops.md:11 msgid "" "The [`while` keyword](https://doc.rust-lang.org/reference/expressions/loop-" "expr.html#predicate-loops) works much like in other languages, executing the " @@ -3389,27 +3279,40 @@ msgstr "" "expr.html#predicate-loops) працює так само, як і в інших мовах, виконуючи " "тіло циклу доти, доки умова виконується." -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops.md:22 msgid "\"Final x: {x}\"" msgstr "\"Final x: {x}\"" -#: src/control-flow-basics/loops.md -msgid "`for`" -msgstr "`for`" - -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops/for.md:3 +#, fuzzy msgid "" "The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) iterates " -"over ranges of values:" +"over ranges of values or the items in a collection:" msgstr "" "Цикл [`for`](https://doc.rust-lang.org/std/keyword.for.html) виконує " "ітерації над діапазонами значень:" -#: src/control-flow-basics/loops.md -msgid "`loop`" -msgstr "`loop`" +#: src/control-flow-basics/loops/for.md:13 +msgid "\"elem: {elem}\"" +msgstr "" -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops/for.md:20 +msgid "" +"Under the hood `for` loops use a concept called \"iterators\" to handle " +"iterating over different kinds of ranges/collections. Iterators will be " +"discussed in more detail later." +msgstr "" + +#: src/control-flow-basics/loops/for.md:23 +#, fuzzy +msgid "" +"Note that the first `for` loop only iterates to `4`. Show the `1..=5` syntax " +"for an inclusive range." +msgstr "" +"Зверніть увагу, що цикл `for` виконує ітерацію тільки до `4`. Покажіть " +"синтаксис `1..=5` для включеного діапазону." + +#: src/control-flow-basics/loops/loop.md:3 msgid "" "The [`loop` statement](https://doc.rust-lang.org/std/keyword.loop.html) just " "loops forever, until a `break`." @@ -3417,26 +3320,20 @@ msgstr "" "Оператор [`loop`](https://doc.rust-lang.org/std/keyword.loop.html) просто " "повторюється до нескінченності, поки не трапиться `break`." -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/loops/loop.md:11 msgid "\"{i}\"" msgstr "\"{i}\"" -#: src/control-flow-basics/loops.md +#: src/control-flow-basics/break-continue.md:7 msgid "" -"We will discuss iteration later; for now, just stick to range expressions." +"If you want to immediately start the next iteration use [`continue`](https://" +"doc.rust-lang.org/reference/expressions/loop-expr.html#continue-expressions)." msgstr "" -"Ми обговоримо ітерації пізніше, а поки що просто використовуйте діапазонні " -"вирази." +"Якщо ви хочете негайно почати наступну ітерацію, використовуйте [`continue`]" +"(https://doc.rust-lang.org/reference/expressions/loop-expr.html#continue-" +"expressions)." -#: src/control-flow-basics/loops.md -msgid "" -"Note that the `for` loop only iterates to `4`. Show the `1..=5` syntax for " -"an inclusive range." -msgstr "" -"Зверніть увагу, що цикл `for` виконує ітерацію тільки до `4`. Покажіть " -"синтаксис `1..=5` для включеного діапазону." - -#: src/control-flow-basics/break-continue.md +#: src/control-flow-basics/break-continue.md:10 msgid "" "If you want to exit any kind of loop early, use [`break`](https://doc.rust-" "lang.org/reference/expressions/loop-expr.html#break-expressions). For " @@ -3448,20 +3345,17 @@ msgstr "" "html#break-expressions). Для `loop` це може бути необов'язковий вираз, який " "стане значенням виразу `loop`." -#: src/control-flow-basics/break-continue.md -msgid "" -"If you want to immediately start the next iteration use [`continue`](https://" -"doc.rust-lang.org/reference/expressions/loop-expr.html#continue-expressions)." -msgstr "" -"Якщо ви хочете негайно почати наступну ітерацію, використовуйте [`continue`]" -"(https://doc.rust-lang.org/reference/expressions/loop-expr.html#continue-" -"expressions)." +#: src/control-flow-basics/break-continue.md:26 src/std-traits/exercise.md:27 +#: src/std-traits/solution.md:29 src/smart-pointers/trait-objects.md:98 +#: src/smart-pointers/trait-objects.md:99 +#: src/borrowing/interior-mutability.md:51 src/modules/exercise.md:140 +#: src/modules/solution.md:78 src/android/build-rules/library.md:44 +#: src/android/interoperability/cpp/rust-bridge.md:17 +#: src/concurrency/async-pitfalls/cancellation.md:63 +msgid "\"{}\"" +msgstr "\"{}\"" -#: src/control-flow-basics/break-continue.md -msgid "\"{result}\"" -msgstr "\"{result}\"" - -#: src/control-flow-basics/break-continue.md +#: src/control-flow-basics/break-continue/labels.md:3 msgid "" "Both `continue` and `break` can optionally take a label argument which is " "used to break out of nested loops:" @@ -3469,18 +3363,11 @@ msgstr "" "І `continue`, і `break` можуть додатково приймати аргумент мітки, який " "використовується для виходу з вкладених циклів:" -#: src/control-flow-basics/break-continue.md -msgid "\"x: {x}, i: {i}\"" -msgstr "\"x: {x}, i: {i}\"" - -#: src/control-flow-basics/break-continue.md -msgid "" -"In this case we break the outer loop after 3 iterations of the inner loop." +#: src/control-flow-basics/break-continue/labels.md:19 +msgid "\"elements searched: {elements_searched}\"" msgstr "" -"У цьому випадку ми розриваємо зовнішній цикл після 3 ітерацій внутрішнього " -"циклу." -#: src/control-flow-basics/break-continue.md +#: src/control-flow-basics/break-continue/labels.md:25 msgid "" "Note that `loop` is the only looping construct which returns a non-trivial " "value. This is because it's guaranteed to be entered at least once (unlike " @@ -3490,11 +3377,11 @@ msgstr "" "значення. Це тому, що він гарантовано буде введений принаймні один раз (на " "відміну від циклів `while` та `for`)." -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes.md:7 msgid "Blocks" msgstr "Блоки" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes.md:9 msgid "" "A block in Rust contains a sequence of expressions, enclosed by braces `{}`. " "Each block has a value and a type, which are those of the last expression of " @@ -3504,11 +3391,11 @@ msgstr "" "Кожен блок має значення і тип, які відповідають значенню і типу останнього " "виразу в блоці:" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes.md:18 msgid "\"y: {y}\"" msgstr "\"y: {y}\"" -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes.md:25 msgid "" "If the last expression ends with `;`, then the resulting value and type is " "`()`." @@ -3516,44 +3403,7 @@ msgstr "" "Якщо останній вираз закінчується символом `;`, то результуюче значення і тип " "буде `()`." -#: src/control-flow-basics/blocks-and-scopes.md -msgid "Scopes and Shadowing" -msgstr "Області видимості та затінення" - -#: src/control-flow-basics/blocks-and-scopes.md -msgid "A variable's scope is limited to the enclosing block." -msgstr "Область видимості змінної обмежується блоком, що її охоплює." - -#: src/control-flow-basics/blocks-and-scopes.md -msgid "" -"You can shadow variables, both those from outer scopes and variables from " -"the same scope:" -msgstr "" -"Ви можете затіняти змінні, як із зовнішніх областей, так і змінні з тієї ж " -"області:" - -#: src/control-flow-basics/blocks-and-scopes.md -msgid "\"before: {a}\"" -msgstr "\"до: {a}\"" - -#: src/control-flow-basics/blocks-and-scopes.md src/std-traits/from-and-into.md -#: src/slices-and-lifetimes/solution.md -msgid "\"hello\"" -msgstr "\"привіт\"" - -#: src/control-flow-basics/blocks-and-scopes.md -msgid "\"inner scope: {a}\"" -msgstr "\"внутрішня область видимості: {a}\"" - -#: src/control-flow-basics/blocks-and-scopes.md -msgid "\"shadowed in inner scope: {a}\"" -msgstr "\"затінений у внутрішній області видимості: {a}\"" - -#: src/control-flow-basics/blocks-and-scopes.md -msgid "\"after: {a}\"" -msgstr "\"після: {a}\"" - -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes.md:29 msgid "" "You can show how the value of the block changes by changing the last line in " "the block. For instance, adding/removing a semicolon or using a `return`." @@ -3562,7 +3412,41 @@ msgstr "" "блоці. Наприклад, додаванням/видаленням крапки з комою або використанням " "`return`." -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md:3 +msgid "A variable's scope is limited to the enclosing block." +msgstr "Область видимості змінної обмежується блоком, що її охоплює." + +#: src/control-flow-basics/blocks-and-scopes/scopes.md:5 +msgid "" +"You can shadow variables, both those from outer scopes and variables from " +"the same scope:" +msgstr "" +"Ви можете затіняти змінні, як із зовнішніх областей, так і змінні з тієї ж " +"області:" + +#: src/control-flow-basics/blocks-and-scopes/scopes.md:11 +msgid "\"before: {a}\"" +msgstr "\"до: {a}\"" + +#: src/control-flow-basics/blocks-and-scopes/scopes.md:13 +#: src/generics/exercise.md:22 src/generics/solution.md:20 +#: src/std-traits/from-and-into.md:11 src/std-traits/from-and-into.md:23 +msgid "\"hello\"" +msgstr "\"привіт\"" + +#: src/control-flow-basics/blocks-and-scopes/scopes.md:14 +msgid "\"inner scope: {a}\"" +msgstr "\"внутрішня область видимості: {a}\"" + +#: src/control-flow-basics/blocks-and-scopes/scopes.md:17 +msgid "\"shadowed in inner scope: {a}\"" +msgstr "\"затінений у внутрішній області видимості: {a}\"" + +#: src/control-flow-basics/blocks-and-scopes/scopes.md:20 +msgid "\"after: {a}\"" +msgstr "\"після: {a}\"" + +#: src/control-flow-basics/blocks-and-scopes/scopes.md:26 msgid "" "Show that a variable's scope is limited by adding a `b` in the inner block " "in the last example, and then trying to access it outside that block." @@ -3571,7 +3455,7 @@ msgstr "" "блоці в останньому прикладі, а потім спробувавши отримати доступ до неї за " "межами цього блоку." -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md:28 msgid "" "Shadowing is different from mutation, because after shadowing both " "variable's memory locations exist at the same time. Both are available under " @@ -3581,11 +3465,11 @@ msgstr "" "пам'яті змінної існують одночасно. Обидві змінні доступні під одним і тим же " "ім'ям, залежно від того, де ви їх використовуєте у коді." -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md:31 msgid "A shadowing variable can have a different type." msgstr "Змінна затінення може мати інший тип." -#: src/control-flow-basics/blocks-and-scopes.md +#: src/control-flow-basics/blocks-and-scopes/scopes.md:32 msgid "" "Shadowing looks obscure at first, but is convenient for holding on to values " "after `.unwrap()`." @@ -3593,7 +3477,7 @@ msgstr "" "Затінення спочатку виглядає незрозумілим, але є зручним для збереження " "значень після `.unwrap()`." -#: src/control-flow-basics/functions.md +#: src/control-flow-basics/functions.md:25 msgid "" "Declaration parameters are followed by a type (the reverse of some " "programming languages), then a return type." @@ -3601,7 +3485,7 @@ msgstr "" "Параметри оголошення супроводжуються типом (у зворотному порядку порівняно з " "деякими мовами програмування), а потім типом повернення." -#: src/control-flow-basics/functions.md +#: src/control-flow-basics/functions.md:27 msgid "" "The last expression in a function body (or any block) becomes the return " "value. Simply omit the `;` at the end of the expression. The `return` " @@ -3614,7 +3498,7 @@ msgstr "" "значення\" є ідіоматичною у кінці функції (рефактор `gcd` щоб " "використовувати `return`)." -#: src/control-flow-basics/functions.md +#: src/control-flow-basics/functions.md:31 msgid "" "Some functions have no return value, and return the 'unit type', `()`. The " "compiler will infer this if the `-> ()` return type is omitted." @@ -3623,12 +3507,12 @@ msgstr "" "агрегату', `()`. Компілятор визначить це, якщо тип повернення `-> ()` " "пропущено." -#: src/control-flow-basics/functions.md +#: src/control-flow-basics/functions.md:33 msgid "" "Overloading is not supported -- each function has a single implementation." msgstr "Перевантаження не підтримується - кожна функція має єдину реалізацію." -#: src/control-flow-basics/functions.md +#: src/control-flow-basics/functions.md:34 msgid "" "Always takes a fixed number of parameters. Default arguments are not " "supported. Macros can be used to support variadic functions." @@ -3637,7 +3521,7 @@ msgstr "" "підтримуються. Для підтримки варіаційних функцій можна використовувати " "макроси." -#: src/control-flow-basics/functions.md +#: src/control-flow-basics/functions.md:36 msgid "" "Always takes a single set of parameter types. These types can be generic, " "which will be covered later." @@ -3645,7 +3529,7 @@ msgstr "" "Завжди приймає єдиний набір типів параметрів. Ці типи можуть бути " "загальними, що буде розглянуто пізніше." -#: src/control-flow-basics/macros.md +#: src/control-flow-basics/macros.md:7 msgid "" "Macros are expanded into Rust code during compilation, and can take a " "variable number of arguments. They are distinguished by a `!` at the end. " @@ -3655,7 +3539,7 @@ msgstr "" "кількість аргументів. Вони відрізняються символом `!` у кінці. До " "стандартної бібліотеки Rust входить набір корисних макросів." -#: src/control-flow-basics/macros.md +#: src/control-flow-basics/macros.md:11 msgid "" "`println!(format, ..)` prints a line to standard output, applying formatting " "described in [`std::fmt`](https://doc.rust-lang.org/std/fmt/index.html)." @@ -3664,7 +3548,7 @@ msgstr "" "форматування, описане у [`std::fmt`](https://doc.rust-lang.org/std/fmt/index." "html)." -#: src/control-flow-basics/macros.md +#: src/control-flow-basics/macros.md:13 msgid "" "`format!(format, ..)` works just like `println!` but returns the result as a " "string." @@ -3672,11 +3556,11 @@ msgstr "" "`format!(format, ..)` працює так само, як `println!`, але повертає результат " "у вигляді рядка." -#: src/control-flow-basics/macros.md +#: src/control-flow-basics/macros.md:15 msgid "`dbg!(expression)` logs the value of the expression and returns it." msgstr "`dbg!(вираз)` записує значення виразу і повертає його." -#: src/control-flow-basics/macros.md +#: src/control-flow-basics/macros.md:16 msgid "" "`todo!()` marks a bit of code as not-yet-implemented. If executed, it will " "panic." @@ -3684,7 +3568,7 @@ msgstr "" "`todo!()` позначає частину коду як таку, що ще не виконана. Якщо цей код " "буде виконано, він викличе паніку." -#: src/control-flow-basics/macros.md +#: src/control-flow-basics/macros.md:18 msgid "" "`unreachable!()` marks a bit of code as unreachable. If executed, it will " "panic." @@ -3692,11 +3576,11 @@ msgstr "" "`unreachable!()` позначає ділянку коду як недосяжну. Якщо цей код буде " "виконано, він викличе паніку." -#: src/control-flow-basics/macros.md +#: src/control-flow-basics/macros.md:36 msgid "\"{n}! = {}\"" msgstr "\"{n}! = {}\"" -#: src/control-flow-basics/macros.md +#: src/control-flow-basics/macros.md:42 msgid "" "The takeaway from this section is that these common conveniences exist, and " "how to use them. Why they are defined as macros, and what they expand to, is " @@ -3706,7 +3590,7 @@ msgstr "" "те, як ними користуватися. Чому вони визначені як макроси і на що вони " "поширюються, не є особливо важливим." -#: src/control-flow-basics/macros.md +#: src/control-flow-basics/macros.md:46 msgid "" "The course does not cover defining macros, but a later section will describe " "use of derive macros." @@ -3714,163 +3598,68 @@ msgstr "" "У цьому курсі не розглядається визначення макросів, але в наступному розділі " "буде описано використання похідних макросів." -#: src/control-flow-basics/exercise.md +#: src/control-flow-basics/exercise.md:7 +#, fuzzy msgid "" "The [Collatz Sequence](https://en.wikipedia.org/wiki/Collatz_conjecture) is " -"defined as follows, for an arbitrary n" +"defined as follows, for an arbitrary n1 greater than zero:" msgstr "" "Послідовність Коллатца [Collatz Sequence](https://en.wikipedia.org/wiki/" "Collatz_conjecture) визначається наступним чином, для довільного n" -#: src/control-flow-basics/exercise.md -msgid "1" -msgstr "1" - -#: src/control-flow-basics/exercise.md -msgid " greater than zero:" -msgstr " більше нуля:" - -#: src/control-flow-basics/exercise.md -msgid "If _n" -msgstr "Якщо _n" - -#: src/control-flow-basics/exercise.md -msgid "i" -msgstr "i" - -#: src/control-flow-basics/exercise.md -msgid "_ is 1, then the sequence terminates at _n" +#: src/control-flow-basics/exercise.md:10 +#, fuzzy +msgid "" +"If _ni_ is 1, then the sequence terminates at _ni_." msgstr "_ є 1, то послідовність завершується при _n" -#: src/control-flow-basics/exercise.md -msgid "_." -msgstr "_." +#: src/control-flow-basics/exercise.md:11 +msgid "If _ni_ is even, then _ni+1 = ni / 2_." +msgstr "" -#: src/control-flow-basics/exercise.md -msgid "_ is even, then _n" -msgstr "_ парне, тоді _n" +#: src/control-flow-basics/exercise.md:12 +msgid "" +"If _ni_ is odd, then _ni+1 = 3 * ni + 1_." +msgstr "" -#: src/control-flow-basics/exercise.md -msgid "i+1" -msgstr "i+1" - -#: src/control-flow-basics/exercise.md -msgid " = n" -msgstr " = n" - -#: src/control-flow-basics/exercise.md -msgid " / 2_." -msgstr " / 2_." - -#: src/control-flow-basics/exercise.md -msgid "_ is odd, then _n" -msgstr "_ непарне, тоді _n" - -#: src/control-flow-basics/exercise.md -msgid " = 3 * n" -msgstr " = 3 * n" - -#: src/control-flow-basics/exercise.md -msgid " + 1_." -msgstr " + 1_." - -#: src/control-flow-basics/exercise.md -msgid "For example, beginning with _n" +#: src/control-flow-basics/exercise.md:14 +#, fuzzy +msgid "For example, beginning with _n1_ = 3:" msgstr "Наприклад, починаючи з _n" -#: src/control-flow-basics/exercise.md -msgid "_ = 3:" -msgstr "_ = 3:" +#: src/control-flow-basics/exercise.md:16 +msgid "3 is odd, so _n2_ = 3 * 3 + 1 = 10;" +msgstr "" -#: src/control-flow-basics/exercise.md -msgid "3 is odd, so _n" -msgstr "3 непарне, тому _n" +#: src/control-flow-basics/exercise.md:17 +msgid "10 is even, so _n3_ = 10 / 2 = 5;" +msgstr "" -#: src/control-flow-basics/exercise.md -msgid "2" -msgstr "2" +#: src/control-flow-basics/exercise.md:18 +msgid "5 is odd, so _n4_ = 3 * 5 + 1 = 16;" +msgstr "" -#: src/control-flow-basics/exercise.md -msgid "_ = 3 * 3 + 1 = 10;" -msgstr "_ = 3 * 3 + 1 = 10;" +#: src/control-flow-basics/exercise.md:19 +msgid "16 is even, so _n5_ = 16 / 2 = 8;" +msgstr "" -#: src/control-flow-basics/exercise.md -msgid "10 is even, so _n" -msgstr "10 парне, тому _n" +#: src/control-flow-basics/exercise.md:20 +msgid "8 is even, so _n6_ = 8 / 2 = 4;" +msgstr "" -#: src/control-flow-basics/exercise.md src/bare-metal/aps/better-uart.md -msgid "3" -msgstr "3" +#: src/control-flow-basics/exercise.md:21 +msgid "4 is even, so _n7_ = 4 / 2 = 2;" +msgstr "" -#: src/control-flow-basics/exercise.md -msgid "_ = 10 / 2 = 5;" -msgstr "_ = 10 / 2 = 5;" +#: src/control-flow-basics/exercise.md:22 +msgid "2 is even, so _n8_ = 1; and" +msgstr "" -#: src/control-flow-basics/exercise.md -msgid "5 is odd, so _n" -msgstr "5 непарне, тому _n" - -#: src/control-flow-basics/exercise.md src/bare-metal/aps/better-uart.md -msgid "4" -msgstr "4" - -#: src/control-flow-basics/exercise.md -msgid "_ = 3 * 5 + 1 = 16;" -msgstr "_ = 3 * 15 + 1 = 16;" - -#: src/control-flow-basics/exercise.md -msgid "16 is even, so _n" -msgstr "16 парне, тому _n" - -#: src/control-flow-basics/exercise.md -msgid "5" -msgstr "5" - -#: src/control-flow-basics/exercise.md -msgid "_ = 16 / 2 = 8;" -msgstr "_ = 16 / 2 = 8;" - -#: src/control-flow-basics/exercise.md -msgid "8 is even, so _n" -msgstr "8 парне, тому _n" - -#: src/control-flow-basics/exercise.md src/bare-metal/aps/better-uart.md -msgid "6" -msgstr "6" - -#: src/control-flow-basics/exercise.md -msgid "_ = 8 / 2 = 4;" -msgstr "_ = 8 / 2 = 4" - -#: src/control-flow-basics/exercise.md -msgid "4 is even, so _n" -msgstr "4 парне, тому _n" - -#: src/control-flow-basics/exercise.md -msgid "7" -msgstr "7" - -#: src/control-flow-basics/exercise.md -msgid "_ = 4 / 2 = 2;" -msgstr "_ = 4 / 2 = 2;" - -#: src/control-flow-basics/exercise.md -msgid "2 is even, so _n" -msgstr "2 парне, тому _n" - -#: src/control-flow-basics/exercise.md src/bare-metal/aps/better-uart.md -msgid "8" -msgstr "8" - -#: src/control-flow-basics/exercise.md -msgid "_ = 1; and" -msgstr "_ = 1; та" - -#: src/control-flow-basics/exercise.md +#: src/control-flow-basics/exercise.md:23 msgid "the sequence terminates." msgstr "послідовність завершується." -#: src/control-flow-basics/exercise.md +#: src/control-flow-basics/exercise.md:25 msgid "" "Write a function to calculate the length of the collatz sequence for a given " "initial `n`." @@ -3878,107 +3667,25 @@ msgstr "" "Напишіть функцію, яка обчислює довжину коллатц-послідовності для заданого " "початкового `n`." -#: src/control-flow-basics/exercise.md src/control-flow-basics/solution.md +#: src/control-flow-basics/exercise.md:29 src/control-flow-basics/solution.md:4 msgid "/// Determine the length of the collatz sequence beginning at `n`.\n" msgstr "/// Визначте довжину послідовності колатів, яка починається з `n`.\n" -#: src/control-flow-basics/solution.md src/concurrency/scoped-threads.md +#: src/control-flow-basics/solution.md:20 src/concurrency/threads/scoped.md:15 +#: src/concurrency/threads/scoped.md:34 msgid "\"Length: {}\"" msgstr "\"Довжина: {}\"" +#: src/welcome-day-1-afternoon.md +msgid "session: Day 1 Afternoon target_minutes: 180" +msgstr "" + #: src/welcome-day-1-afternoon.md src/welcome-day-2-afternoon.md #: src/welcome-day-3-afternoon.md src/welcome-day-4-afternoon.md msgid "Welcome Back" msgstr "Ласкаво просимо назад" -#: src/welcome-day-1-afternoon.md -msgid "[Tuples and Arrays](./tuples-and-arrays.md) (1 hour)" -msgstr "" - -#: src/welcome-day-1-afternoon.md -msgid "[References](./references.md) (50 minutes)" -msgstr "" - -#: src/welcome-day-1-afternoon.md -msgid "[User-Defined Types](./user-defined-types.md) (50 minutes)" -msgstr "" - -#: src/welcome-day-1-afternoon.md -msgid "" -"Including 10 minute breaks, this session should take about 2 hours and 55 " -"minutes" -msgstr "" - -#: src/tuples-and-arrays.md -msgid "" -"[Tuples and Arrays](./tuples-and-arrays/tuples-and-arrays.md) (10 minutes)" -msgstr "" - -#: src/tuples-and-arrays.md -msgid "[Array Iteration](./tuples-and-arrays/iteration.md) (3 minutes)" -msgstr "" - -#: src/tuples-and-arrays.md -msgid "[Pattern Matching](./tuples-and-arrays/match.md) (10 minutes)" -msgstr "" - -#: src/tuples-and-arrays.md -msgid "[Destructuring](./tuples-and-arrays/destructuring.md) (5 minutes)" -msgstr "" - -#: src/tuples-and-arrays.md -msgid "[Exercise: Nested Arrays](./tuples-and-arrays/exercise.md) (30 minutes)" -msgstr "" - -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "" -"Tuples and arrays are the first \"compound\" types we have seen. All " -"elements of an array have the same type, while tuples can accommodate " -"different types. Both types have a size fixed at compile time." -msgstr "" -"Кортежі та масиви є першими \"складеними\" типами, з якими ми познайомилися. " -"Всі елементи масиву мають однаковий тип, тоді як кортежі можуть мати різні " -"типи. Обидва типи мають розмір, фіксований під час компіляції." - -#: src/tuples-and-arrays/tuples-and-arrays.md -#: src/tuples-and-arrays/destructuring.md -msgid "Arrays" -msgstr "Масиви" - -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "`[T; N]`" -msgstr "`[T; N]`" - -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "`[20, 30, 40]`, `[0; 3]`" -msgstr "`[20, 30, 40]`, `[0; 3]`" - -#: src/tuples-and-arrays/tuples-and-arrays.md -#: src/tuples-and-arrays/destructuring.md -msgid "Tuples" -msgstr "Кортежі" - -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "`()`, `(T,)`, `(T1, T2)`, ..." -msgstr "`()`, `(T,)`, `(T1, T2)`, ..." - -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "`()`, `('x',)`, `('x', 1.2)`, ..." -msgstr "`()`, `('x',)`, `('x', 1.2)`, ..." - -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "Array assignment and access:" -msgstr "Присвоєння масиву та доступ:" - -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "Tuple assignment and access:" -msgstr "Присвоєння кортежу та доступ:" - -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "Arrays:" -msgstr "Масиви:" - -#: src/tuples-and-arrays/tuples-and-arrays.md +#: src/tuples-and-arrays/arrays.md:19 msgid "" "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 " @@ -3992,7 +3699,7 @@ msgstr "" "різними типами. Зрізи, розмір яких визначається під час виконання, " "покриваються пізніше." -#: src/tuples-and-arrays/tuples-and-arrays.md +#: src/tuples-and-arrays/arrays.md:25 msgid "" "Try accessing an out-of-bounds array element. Array accesses are checked at " "runtime. Rust can usually optimize these checks away, and they can be " @@ -4002,11 +3709,11 @@ msgstr "" "до масиву перевіряється під час виконання. Зазвичай Rust може оптимізувати " "ці перевірки, і їх можна уникнути, використовуючи небезпечний Rust." -#: src/tuples-and-arrays/tuples-and-arrays.md +#: src/tuples-and-arrays/arrays.md:29 msgid "We can use literals to assign values to arrays." msgstr "Ми можемо використовувати літерали для присвоєння значень масивам." -#: src/tuples-and-arrays/tuples-and-arrays.md +#: src/tuples-and-arrays/arrays.md:31 msgid "" "The `println!` macro asks for the debug implementation with the `?` format " "parameter: `{}` gives the default output, `{:?}` gives the debug output. " @@ -4020,7 +3727,7 @@ msgstr "" "замовчуванням, але масиви реалізують лише виведення для налагодження. Це " "означає, що тут ми повинні використовувати налагоджувальний вивід." -#: src/tuples-and-arrays/tuples-and-arrays.md +#: src/tuples-and-arrays/arrays.md:36 msgid "" "Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be " "easier to read." @@ -4028,19 +3735,15 @@ msgstr "" "Додавання `#`, наприклад `{a:#?}`, викликає формат \"гарного друку\", який " "може бути легшим для читання." -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "Tuples:" -msgstr "Кортежі:" - -#: src/tuples-and-arrays/tuples-and-arrays.md +#: src/tuples-and-arrays/tuples.md:19 msgid "Like arrays, tuples have a fixed length." msgstr "Як і масиви, кортежі мають фіксовану довжину." -#: src/tuples-and-arrays/tuples-and-arrays.md +#: src/tuples-and-arrays/tuples.md:21 msgid "Tuples group together values of different types into a compound type." msgstr "Кортежі групують значення різних типів у складений тип." -#: src/tuples-and-arrays/tuples-and-arrays.md +#: src/tuples-and-arrays/tuples.md:23 msgid "" "Fields of a tuple can be accessed by the period and the index of the value, " "e.g. `t.0`, `t.1`." @@ -4048,32 +3751,17 @@ msgstr "" "Доступ до полів кортежу можна отримати після крапки з індексом значення, " "наприклад. `t.0`, `t.1`." -#: src/tuples-and-arrays/tuples-and-arrays.md +#: src/tuples-and-arrays/tuples.md:26 msgid "" -"The empty tuple `()` is also known as the \"unit type\". It is both a type, " -"and the only valid value of that type --- that is to say both the type and " -"its value are expressed as `()`. It is used to indicate, for example, that a " -"function or expression has no return value, as we'll see in a future slide." +"The empty tuple `()` is referred to as the \"unit type\" and signifies " +"absence of a return value, akin to `void` in other languages." msgstr "" -"Порожній кортеж `()` також відомий як \"тип одиниці\". Це одночасно і тип, і " -"єдине допустиме значення цього типу --- тобто і тип, і його значення " -"виражаються як `()`. Він використовується, наприклад, для позначення того, " -"що функція або вираз не має значення, яке повертається, як ми побачимо на " -"наступному слайді." -#: src/tuples-and-arrays/tuples-and-arrays.md -msgid "" -"You can think of it as `void` that can be familiar to you from other " -"programming languages." -msgstr "" -"Ви можете думати про це як про `void`, який може бути знайомий вам з інших " -"мов програмування." - -#: src/tuples-and-arrays/iteration.md +#: src/tuples-and-arrays/iteration.md:7 msgid "The `for` statement supports iterating over arrays (but not tuples)." msgstr "Оператор `for` підтримує ітерацію над масивами (але не кортежами)." -#: src/tuples-and-arrays/iteration.md +#: src/tuples-and-arrays/iteration.md:22 msgid "" "This functionality uses the `IntoIterator` trait, but we haven't covered " "that yet." @@ -4081,7 +3769,7 @@ msgstr "" "Ця функціональність використовує трейт `IntoIterator`, але ми ще не " "розглядали його." -#: src/tuples-and-arrays/iteration.md +#: src/tuples-and-arrays/iteration.md:25 msgid "" "The `assert_ne!` macro is new here. There are also `assert_eq!` and `assert!" "` macros. These are always checked while, debug-only variants like " @@ -4091,249 +3779,59 @@ msgstr "" "`. Вони завжди перевіряються під час виконання, варіанти лише для " "налагодження, такі як `debug_assert!`, не компілюються у релізних збірках." -#: src/tuples-and-arrays/match.md +#: src/tuples-and-arrays/destructuring.md:7 msgid "" -"The `match` keyword lets you match a value against one or more _patterns_. " -"The comparisons are done from top to bottom and the first match wins." +"When working with tuples and other structured values it's common to want to " +"extract the inner values into local variables. This can be done manually by " +"directly accessing the inner values:" msgstr "" -"Ключове слово `match` дозволяє зіставити значення з одним або декількома " -"_шаблонами_. Порівняння відбуваються зверху вниз, і виграє перший збіг." -#: src/tuples-and-arrays/match.md -msgid "The patterns can be simple values, similarly to `switch` in C and C++:" +#: src/tuples-and-arrays/destructuring.md:15 +#: src/tuples-and-arrays/destructuring.md:25 +msgid "\"left: {left}, right: {right}\"" msgstr "" -"Шаблони можуть бути простими значеннями, подібно до `switch` у C та C++:" -#: src/tuples-and-arrays/match.md -msgid "'x'" -msgstr "'x'" - -#: src/tuples-and-arrays/match.md -msgid "'q'" -msgstr "'q'" - -#: src/tuples-and-arrays/match.md -msgid "\"Quitting\"" -msgstr "\"Виходжу\"" - -#: src/tuples-and-arrays/match.md src/std-traits/solution.md -#: src/error-handling/exercise.md src/error-handling/solution.md -msgid "'a'" -msgstr "'a'" - -#: src/tuples-and-arrays/match.md -msgid "'s'" -msgstr "'s'" - -#: src/tuples-and-arrays/match.md -msgid "'w'" -msgstr "'w'" - -#: src/tuples-and-arrays/match.md -msgid "'d'" -msgstr "'d'" - -#: src/tuples-and-arrays/match.md -msgid "\"Moving around\"" -msgstr "\"Пересування\"" - -#: src/tuples-and-arrays/match.md src/error-handling/exercise.md -#: src/error-handling/solution.md -msgid "'0'" -msgstr "'0'" - -#: src/tuples-and-arrays/match.md src/error-handling/exercise.md -#: src/error-handling/solution.md -msgid "'9'" -msgstr "'9'" - -#: src/tuples-and-arrays/match.md -msgid "\"Number input\"" -msgstr "\"Введення числа\"" - -#: src/tuples-and-arrays/match.md -msgid "\"Lowercase: {key}\"" -msgstr "\"Нижній регістр: {key}\"" - -#: src/tuples-and-arrays/match.md -msgid "\"Something else\"" -msgstr "\"Щось інше\"" - -#: src/tuples-and-arrays/match.md +#: src/tuples-and-arrays/destructuring.md:19 msgid "" -"The `_` pattern is a wildcard pattern which matches any value. The " -"expressions _must_ be irrefutable, meaning that it covers every possibility, " -"so `_` is often used as the final catch-all case." +"However, Rust also supports using pattern matching to destructure a larger " +"value into its constituent parts:" msgstr "" -"Шаблон `_` - це шаблон підстановки, який відповідає будь-якому значенню. " -"Вирази _повинні_ бути неспростовними, тобто охоплювати всі можливі варіанти, " -"тому `_` часто використовується як остаточний всеохоплюючий випадок." -#: src/tuples-and-arrays/match.md +#: src/tuples-and-arrays/destructuring.md:31 msgid "" -"Match can be used as an expression. Just like `if`, each match arm must have " -"the same type. The type is the last expression of the block, if any. In the " -"example above, the type is `()`." +"The patterns used here are \"irrefutable\", meaning that the compiler can " +"statically verify that the value on the right of `=` has the same structure " +"as the pattern." msgstr "" -"Match можна використовувати як вираз. Як і у випадку з `if`, кожна гілка " -"зіставлення повинно мати однаковий тип. Тип - це останній вираз у блоці, " -"якщо такий є. У наведеному вище прикладі тип `()`." -#: src/tuples-and-arrays/match.md +#: src/tuples-and-arrays/destructuring.md:34 msgid "" -"A variable in the pattern (`key` in this example) will create a binding that " -"can be used within the match arm." +"A variable name is an irrefutable pattern that always matches any value, " +"hence why we can also use `let` to declare a single variable." msgstr "" -"Змінна у шаблоні (у цьому прикладі - `key`) створить прив'язку, яку можна " -"використовувати у гілці зіставлення." -#: src/tuples-and-arrays/match.md -msgid "A match guard causes the arm to match only if the condition is true." -msgstr "" -"Запобіжник зіставлення призводить до гілці зіставлення, тільки якщо умова " -"істинна." - -#: src/tuples-and-arrays/match.md src/user-defined-types/named-structs.md -#: src/user-defined-types/enums.md src/methods-and-traits/methods.md -msgid "Key Points:" -msgstr "Ключові моменти:" - -#: src/tuples-and-arrays/match.md +#: src/tuples-and-arrays/destructuring.md:36 msgid "" -"You might point out how some specific characters are being used when in a " -"pattern" +"Rust also supports using patterns in conditionals, allowing for equality " +"comparison and destructuring to happen at the same time. This form of " +"pattern matching will be discussed in more detail later." msgstr "" -"Ви можете вказати, як деякі конкретні символи використовуються в шаблоні" -#: src/tuples-and-arrays/match.md -msgid "`|` as an `or`" -msgstr "`|` як `or`" - -#: src/tuples-and-arrays/match.md -msgid "`..` can expand as much as it needs to be" -msgstr "`..` може розширюватися настільки, наскільки це потрібно" - -#: src/tuples-and-arrays/match.md -msgid "`1..=5` represents an inclusive range" -msgstr "`1..=5` представляє включний діапазон" - -#: src/tuples-and-arrays/match.md -msgid "`_` is a wild card" -msgstr "`_` - символ підстановки" - -#: src/tuples-and-arrays/match.md +#: src/tuples-and-arrays/destructuring.md:39 msgid "" -"Match guards as a separate syntax feature are important and necessary when " -"we wish to concisely express more complex ideas than patterns alone would " -"allow." +"Edit the examples above to show the compiler error when the pattern doesn't " +"match the value being matched on." msgstr "" -"Запобіжники зіставлення як окрема функція синтаксису є важливою та " -"необхідною, коли ми хочемо стисло висловити більш складні ідеї, ніж це " -"дозволили б самі шаблони." -#: src/tuples-and-arrays/match.md -msgid "" -"They are not the same as separate `if` expression inside of the match arm. " -"An `if` expression inside of the branch block (after `=>`) happens after the " -"match arm is selected. Failing the `if` condition inside of that block won't " -"result in other arms of the original `match` expression being considered." -msgstr "" -"Це не те саме, що окремий вираз `if` всередині гілкі зіставлення. Вираз `if` " -"всередині блоку розгалуження (після `=>`) виникає після вибору гілкі " -"зіставлення. Невиконання умови `if` всередині цього блоку не призведе до " -"розгляду інших частин вихідного виразу `match`." - -#: src/tuples-and-arrays/match.md -msgid "" -"The condition defined in the guard applies to every expression in a pattern " -"with an `|`." -msgstr "" -"Умова, визначена в запобіжнику, застосовується до кожного виразу в шаблоні з " -"`|`." - -#: src/tuples-and-arrays/destructuring.md -msgid "" -"Destructuring is a way of extracting data from a data structure by writing a " -"pattern that is matched up to the data structure, binding variables to " -"subcomponents of the data structure." -msgstr "" -"Деструктуризація - це спосіб вилучення даних зі структури даних шляхом " -"написання шаблону, який відповідає структурі даних, прив'язуючи змінні до " -"підкомпонентів структури даних." - -#: src/tuples-and-arrays/destructuring.md -msgid "You can destructure tuples and arrays by matching on their elements:" -msgstr "" -"Ви можете деструктурувати кортежі та масиви, зіставляючи їхні елементи:" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"on Y axis\"" -msgstr "\"по осі Y\"" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"on X axis\"" -msgstr "\"по осі X\"" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"left of Y axis\"" -msgstr "\"зліва від осі Y\"" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"below X axis\"" -msgstr "\"нижче осі X\"" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"first quadrant\"" -msgstr "\"перший квадрант\"" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"Tell me about {triple:?}\"" -msgstr "\"Розкажи мені про {triple:?}\"" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"First is 0, y = {y}, and z = {z}\"" -msgstr "\"Перше число 0, y = {y}, and z = {z}\"" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"First is 1 and the rest were ignored\"" -msgstr "\"Перший число 1, а решту проігноровано\"" - -#: src/tuples-and-arrays/destructuring.md -msgid "\"All elements were ignored\"" -msgstr "\"Всі елементи були проігноровані\"" - -#: src/tuples-and-arrays/destructuring.md -msgid "Create a new array pattern using `_` to represent an element." -msgstr "" -"Створіть новий шаблон масиву, використовуючи `_` для представлення елемента." - -#: src/tuples-and-arrays/destructuring.md -msgid "Add more values to the array." -msgstr "Додайте більше значень до масиву." - -#: src/tuples-and-arrays/destructuring.md -msgid "" -"Point out that how `..` will expand to account for different number of " -"elements." -msgstr "" -"Зверніть увагу на те, як `..` буде розширюватися, щоб врахувати різну " -"кількість елементів." - -#: src/tuples-and-arrays/destructuring.md -msgid "Show matching against the tail with patterns `[.., b]` and `[a@..,b]`" -msgstr "" -"Покажіть зіставлення проти хвоста з хвостом за допомогою шаблонів `[.., " -"b]` і `[a@..,b]`" - -#: src/tuples-and-arrays/exercise.md +#: src/tuples-and-arrays/exercise.md:7 msgid "Arrays can contain other arrays:" msgstr "Масиви можуть містити інші масиви:" -#: src/tuples-and-arrays/exercise.md +#: src/tuples-and-arrays/exercise.md:13 msgid "What is the type of this variable?" msgstr "Який тип цієї змінної?" -#: src/tuples-and-arrays/exercise.md +#: src/tuples-and-arrays/exercise.md:15 msgid "" "Use an array such as the above to write a function `transpose` which will " "transpose a matrix (turn rows into columns):" @@ -4341,56 +3839,38 @@ msgstr "" "Використовуйте масив, подібний до наведеного вище, для написання функції " "`transpose`, яка транспонує матрицю (перетворює рядки у стовпці):" -#: src/tuples-and-arrays/exercise.md -msgid "Hard-code both functions to operate on 3 × 3 matrices." -msgstr "Жорстко закодуйте обидві функції для роботи з матрицями 3 × 3." - -#: src/tuples-and-arrays/exercise.md +#: src/tuples-and-arrays/exercise.md:26 +#, fuzzy msgid "" "Copy the code below to and implement the " -"functions:" +"function. This function only operates on 3x3 matrices." msgstr "" -"Скопіюйте наведений нижче код до та застосуйте " -"функції:" +"Скопіюйте наведений нижче код на і застосуйте " +"функцію." -#: src/tuples-and-arrays/exercise.md src/borrowing/exercise.md -#: src/unsafe-rust/exercise.md +#: src/tuples-and-arrays/exercise.md:30 src/borrowing/exercise.md:18 +#: src/unsafe-rust/exercise.md:55 msgid "// TODO: remove this when you're done with your implementation.\n" msgstr "// TODO: видаліть це, коли закінчите реалізацію.\n" -#: src/tuples-and-arrays/exercise.md src/tuples-and-arrays/solution.md -msgid "// <-- the comment makes rustfmt add a newline\n" -msgstr "// <-- коментар змушує rustfmt додати новий рядок\n" - -#: src/tuples-and-arrays/exercise.md src/tuples-and-arrays/solution.md -msgid "\"matrix: {:#?}\"" -msgstr "\"матриця: {:#?}\"" - -#: src/tuples-and-arrays/exercise.md src/tuples-and-arrays/solution.md -msgid "\"transposed: {:#?}\"" -msgstr "\"транспонована: {:#?}\"" - -#: src/tuples-and-arrays/solution.md +#: src/tuples-and-arrays/exercise.md:40 src/tuples-and-arrays/exercise.md:48 +#: src/tuples-and-arrays/solution.md:17 src/tuples-and-arrays/solution.md:25 msgid "//\n" msgstr "//\n" -#: src/references.md -msgid "[Shared References](./references/shared.md) (10 minutes)" -msgstr "" +#: src/tuples-and-arrays/exercise.md:57 src/tuples-and-arrays/solution.md:34 +msgid "// <-- the comment makes rustfmt add a newline\n" +msgstr "// <-- коментар змушує rustfmt додати новий рядок\n" -#: src/references.md -msgid "[Exclusive References](./references/exclusive.md) (10 minutes)" -msgstr "" +#: src/tuples-and-arrays/exercise.md:62 src/tuples-and-arrays/solution.md:39 +msgid "\"matrix: {:#?}\"" +msgstr "\"матриця: {:#?}\"" -#: src/references.md -msgid "[Exercise: Geometry](./references/exercise.md) (30 minutes)" -msgstr "" +#: src/tuples-and-arrays/exercise.md:64 src/tuples-and-arrays/solution.md:41 +msgid "\"transposed: {:#?}\"" +msgstr "\"транспонована: {:#?}\"" -#: src/references.md src/user-defined-types.md src/pattern-matching.md -msgid "This segment should take about 50 minutes" -msgstr "" - -#: src/references/shared.md +#: src/references/shared.md:7 msgid "" "A reference provides a way to access another value without taking " "responsibility for the value, and is also called \"borrowing\". Shared " @@ -4401,7 +3881,7 @@ msgstr "" "Спільні посилання доступні лише для читання, і дані, на які вони " "посилаються, не можуть бути змінені." -#: src/references/shared.md +#: src/references/shared.md:24 msgid "" "A shared reference to a type `T` has type `&T`. A reference value is made " "with the `&` operator. The `*` operator \"dereferences\" a reference, " @@ -4411,11 +3891,11 @@ msgstr "" "допомогою оператора `&`. Оператор `*` \"розіменовує\" посилання, повертаючи " "його значення." -#: src/references/shared.md +#: src/references/shared.md:28 msgid "Rust will statically forbid dangling references:" msgstr "Rust статично забороняє висячі посилання:" -#: src/references/shared.md +#: src/references/shared.md:41 msgid "" "A reference is said to \"borrow\" the value it refers to, and this is a good " "model for students not familiar with pointers: code can use the reference to " @@ -4428,7 +3908,7 @@ msgstr "" "\"власністю\" вихідної змінної. Більш детально про володіння буде розглянуто " "на третьому дні курсу." -#: src/references/shared.md +#: src/references/shared.md:46 msgid "" "References are implemented as pointers, and a key advantage is that they can " "be much smaller than the thing they point to. Students familiar with C or C+" @@ -4442,24 +3922,25 @@ msgstr "" "частинах курсу буде розглянуто, як Rust запобігає помилкам, пов'язаним з " "безпекою пам'яті, які виникають при використанні сирих вказівників." -#: src/references/shared.md +#: src/references/shared.md:51 msgid "" "Rust does not automatically create references for you - the `&` is always " "required." msgstr "" "Rust не створює посилання автоматично - завжди потрібно використовувати `&`." -#: src/references/shared.md +#: src/references/shared.md:54 +#, fuzzy msgid "" "Rust will auto-dereference in some cases, in particular when invoking " -"methods (try `r.count_ones()`). There is no need for an `->` operator like " -"in C++." +"methods (try `r.is_ascii()`). There is no need for an `->` operator like in " +"C++." msgstr "" "У деяких випадках Rust виконує автоматичне розіменування, зокрема під час " "виклику методів (спробуйте `ref_x.count_ones()`). Тут не потрібен оператор " "`->`, як у C++." -#: src/references/shared.md +#: src/references/shared.md:57 msgid "" "In this example, `r` is mutable so that it can be reassigned (`r = &b`). " "Note that this re-binds `r`, so that it refers to something else. This is " @@ -4471,7 +3952,7 @@ msgstr "" "щось інше. Це відрізняється від C++, де присвоювання посилання змінює " "значення, на яке воно посилається." -#: src/references/shared.md +#: src/references/shared.md:61 msgid "" "A shared reference does not allow modifying the value it refers to, even if " "that value was mutable. Try `*r = 'X'`." @@ -4479,7 +3960,7 @@ msgstr "" "Спільне посилання не дозволяє змінювати значення, на яке воно посилається, " "навіть якщо це значення було змінним. Спробуйте `*r = 'X'`." -#: src/references/shared.md +#: src/references/shared.md:64 msgid "" "Rust is tracking the lifetimes of all references to ensure they live long " "enough. Dangling references cannot occur in safe Rust. `x_axis` would return " @@ -4491,11 +3972,11 @@ msgstr "" "Функція `x_axis` поверне посилання на `point`, але `point` буде звільнено, " "коли функція повернеться, тому це не буде скомпільовано." -#: src/references/shared.md +#: src/references/shared.md:69 msgid "We will talk more about borrowing when we get to ownership." msgstr "Про запозичення ми поговоримо більше, коли дійдемо до володіння." -#: src/references/exclusive.md +#: src/references/exclusive.md:7 msgid "" "Exclusive references, also known as mutable references, allow changing the " "value they refer to. They have type `&mut T`." @@ -4503,7 +3984,7 @@ msgstr "" "Ексклюзивні посилання, також відомі як мутабельні посилання, дозволяють " "змінювати значення, на яке вони посилаються. Вони мають тип `&mut T`." -#: src/references/exclusive.md +#: src/references/exclusive.md:25 msgid "" "\"Exclusive\" means that only this reference can be used to access the " "value. No other references (shared or exclusive) can exist at the same time, " @@ -4517,7 +3998,7 @@ msgstr "" "отримати доступ, поки існує ексклюзивне посилання. Спробуйте створити " "`&point.0` або змінити `point.0`, поки існує `x_coord`." -#: src/references/exclusive.md +#: src/references/exclusive.md:30 msgid "" "Be sure to note the difference between `let mut x_coord: &i32` and `let " "x_coord: &mut i32`. The first one represents a shared reference which can be " @@ -4529,7 +4010,203 @@ msgstr "" "прив'язати до різних значень, тоді як другий представляє ексклюзивне " "посилання на значення, що змінюється." -#: src/references/exercise.md +#: src/references/slices.md:5 +msgid "Slices" +msgstr "Зрізи" + +#: src/references/slices.md:7 +msgid "A slice gives you a view into a larger collection:" +msgstr "Зріз дає змогу поглянути на більшу колекцію:" + +#: src/references/slices.md:22 +msgid "Slices borrow data from the sliced type." +msgstr "Зрізи запозичують дані зі зрізаного типу." + +#: src/references/slices.md:23 +msgid "Question: What happens if you modify `a[3]` right before printing `s`?" +msgstr "" +"Запитання: що станеться, якщо змінити `a[3]` безпосередньо перед друком `s`?" + +#: src/references/slices.md:27 +msgid "" +"We create a slice by borrowing `a` and specifying the starting and ending " +"indexes in brackets." +msgstr "" +"Ми створюємо зріз, запозичуючи `a` та вказуючи початковий і кінцевий індекси " +"в дужках." + +#: src/references/slices.md:30 +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 " +"identical." +msgstr "" +"Якщо зріз починається з індексу 0, синтаксис діапазону Rust дозволяє нам " +"відкинути початковий індекс, тобто `&a[0..a.len()]` і `&a[..a.len()]` " +"ідентичні." + +#: src/references/slices.md:34 +msgid "" +"The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are " +"identical." +msgstr "" +"Теж саме стосується останнього індексу, тому `&a[2..a.len()]` і `&a[2..]` " +"ідентичні." + +#: src/references/slices.md:37 +msgid "" +"To easily create a slice of the full array, we can therefore use `&a[..]`." +msgstr "" +"Щоб легко створити повний зріз масиву, ми можемо використовувати `&a[..]`." + +#: src/references/slices.md:39 +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 " +"computation on slices of different sizes." +msgstr "" +"`s` є посиланням на зріз `i32`. Зверніть увагу, що тип `s` (`&[i32]`) більше " +"не згадує довжину масиву. Це дозволяє нам виконувати обчислення на зрізах " +"різного розміру." + +#: src/references/slices.md:43 +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` має " +"залишатися 'живим' (в області застосування) принаймні стільки ж, скільки і " +"наш зріз." + +#: src/references/slices.md:46 +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` 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." +msgstr "" +"Питання про модифікацію `a[3]` може викликати цікаву дискусію, але відповідь " +"полягає в тому, що з міркувань безпеки пам’яті ви не можете зробити це через " +"`a` на цьому етапі виконання, але ви можете читати дані з обох `a ` і `s` " +"безпечно. Це спрацьовує до того, як ви створили зріз, і знову після " +"`println`, коли зріз більше не використовується." + +#: src/references/strings.md:11 +msgid "We can now understand the two string types in Rust:" +msgstr "Тепер ми можемо зрозуміти два типи рядків у Rust:" + +#: src/references/strings.md:13 +msgid "`&str` is a slice of UTF-8 encoded bytes, similar to `&[u8]`." +msgstr "" + +#: src/references/strings.md:14 +msgid "" +"`String` is an owned buffer of UTF-8 encoded bytes, similar to `Vec`." +msgstr "" + +#: src/references/strings.md:21 src/std-traits/read-and-write.md:40 +msgid "\"World\"" +msgstr "\"Світ\"" + +#: src/references/strings.md:22 +msgid "\"s1: {s1}\"" +msgstr "\"s1: {s1}\"" + +#: src/references/strings.md:24 +msgid "\"Hello \"" +msgstr "\"Привіт \"" + +#: src/references/strings.md:25 src/references/strings.md:27 +#: src/memory-management/move.md:13 +msgid "\"s2: {s2}\"" +msgstr "\"s2: {s2}\"" + +#: src/references/strings.md:30 +msgid "\"s3: {s3}\"" +msgstr "\"s3: {s3}\"" + +#: src/references/strings.md:36 +#, fuzzy +msgid "" +"`&str` introduces a string slice, which is an immutable reference to UTF-8 " +"encoded string data stored in a block of memory. String literals " +"(`\"Hello\"`), are stored in the program’s binary." +msgstr "" +"`&str` представляє зріз рядка, який є незмінним посиланням на дані рядка в " +"кодуванні UTF-8, що зберігаються в блоці пам’яті. Рядкові літерали " +"(`”Hello”`) зберігаються у бінарному файлі програми." + +#: src/references/strings.md:40 +#, fuzzy +msgid "" +"Rust's `String` type is a wrapper around a vector of bytes. As with a " +"`Vec`, it is owned." +msgstr "" +"Тип `String` в Rust — це оболонка навколо вектора байтів. Як і у випадку з " +"`Vec`, він знаходиться у володінні." + +#: src/references/strings.md:43 +msgid "" +"As with many other types `String::from()` creates a string from a string " +"literal; `String::new()` creates a new empty string, to which string data " +"can be added using the `push()` and `push_str()` methods." +msgstr "" +"Як і у багатьох інших типів, `String::from()` створює рядок із рядкового " +"літералу; `String::new()` створює новий порожній рядок, до якого дані рядка " +"можна додати за допомогою методів `push()` і `push_str()`." + +#: src/references/strings.md:47 +msgid "" +"The `format!()` macro is a convenient way to generate an owned string from " +"dynamic values. It accepts the same format specification as `println!()`." +msgstr "" +"Макрос `format!()` є зручним способом створення рядка, яким володіють, з " +"динамічних значень. Він приймає таку саму специфікацію формату, як і " +"`println!()`." + +#: src/references/strings.md:50 +msgid "" +"You can borrow `&str` slices from `String` via `&` and optionally range " +"selection. If you select a byte range that is not aligned to character " +"boundaries, the expression will panic. The `chars` iterator iterates over " +"characters and is preferred over trying to get character boundaries right." +msgstr "" +"Ви можете запозичувати зрізки `&str` з `String` за допомогою `&` і, за " +"бажанням, вибору діапазону. Якщо ви виберете діапазон байт, який не " +"вирівняно за межами символів, вираз запанікує. Ітератор `chars` перебирає " +"символи, і йому надається перевага перед спробами вирівняти межі символів." + +#: src/references/strings.md:55 +msgid "" +"For C++ programmers: think of `&str` as `std::string_view` from C++, but the " +"one that always points to a valid string in memory. Rust `String` is a rough " +"equivalent of `std::string` from C++ (main difference: it can only contain " +"UTF-8 encoded bytes and will never use a small-string optimization)." +msgstr "" +"Для програмістів на C++: думайте про `&str` як про `std::string_view` з C++, " +"але такий, що завжди вказує на дійсний рядок у пам'яті. Rust `String` є " +"приблизним еквівалентом `std::string` з C++ (головна відмінність: він може " +"містити лише байти у кодуванні UTF-8 і ніколи не використовує оптимізацію " +"малих рядків).." + +#: src/references/strings.md:60 +msgid "Byte strings literals allow you to create a `&[u8]` value directly:" +msgstr "" +"Літерали байтових рядків дозволяють створювати значення `&[u8]` " +"безпосередньо:" + +#: src/references/strings.md:70 +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 "" +"Необроблені рядки дозволяють створювати значення `&str` з відключеним " +"екрануванням: `r\"\\n\" == \"\\\\n\"`. Ви можете вставити подвійні лапки, " +"використовуючи однакову кількість `#` з обох боків лапок:" + +#: src/references/exercise.md:7 msgid "" "We will create a few utility functions for 3-dimensional geometry, " "representing a point as `[f64;3]`. It is up to you to determine the function " @@ -4538,7 +4215,7 @@ msgstr "" "Ми створимо декілька утиліт для тривимірної геометрії, що представляють " "точку у вигляді `[f64;3]`. Ви самі визначаєте сигнатури функцій." -#: src/references/exercise.md +#: src/references/exercise.md:11 msgid "" "// Calculate the magnitude of a vector by summing the squares of its " "coordinates\n" @@ -4551,7 +4228,7 @@ msgstr "" "обчислення квадратного\n" "// кореня, наприклад `v.sqrt()`.\n" -#: src/references/exercise.md +#: src/references/exercise.md:19 msgid "" "// Normalize a vector by calculating its magnitude and dividing all of its\n" "// coordinates by that magnitude.\n" @@ -4559,93 +4236,73 @@ msgstr "" "// Нормалізуйте вектор, обчисливши його величину і поділивши всі його\n" "// координати на цю величину.\n" -#: src/references/exercise.md +#: src/references/exercise.md:27 msgid "// Use the following `main` to test your work.\n" msgstr "Використовуйте наступний `main` для тестування вашої роботи.\n" -#: src/references/exercise.md src/references/solution.md +#: src/references/exercise.md:31 src/references/solution.md:22 msgid "\"Magnitude of a unit vector: {}\"" msgstr "\"Величина одиничного вектора: {}\"" -#: src/references/exercise.md src/references/solution.md +#: src/references/exercise.md:34 src/references/solution.md:25 msgid "\"Magnitude of {v:?}: {}\"" msgstr "\"Величина {v:?}: {}\"" -#: src/references/exercise.md src/references/solution.md +#: src/references/exercise.md:36 src/references/solution.md:27 msgid "\"Magnitude of {v:?} after normalization: {}\"" msgstr "\"Величина {v:?} після нормалізації: {}\"" -#: src/references/solution.md +#: src/references/solution.md:4 msgid "/// Calculate the magnitude of the given vector.\n" msgstr "/// Обчисліть величину заданого вектора.\n" -#: src/references/solution.md +#: src/references/solution.md:12 msgid "" "/// Change the magnitude of the vector to 1.0 without changing its " "direction.\n" msgstr "/// Змініть величину вектора на 1.0, не змінюючи його напрямок.\n" -#: src/user-defined-types.md -msgid "[Named Structs](./user-defined-types/named-structs.md) (10 minutes)" -msgstr "" - -#: src/user-defined-types.md -msgid "[Tuple Structs](./user-defined-types/tuple-structs.md) (10 minutes)" -msgstr "" - -#: src/user-defined-types.md -msgid "[Enums](./user-defined-types/enums.md) (5 minutes)" -msgstr "" - -#: src/user-defined-types.md -msgid "" -"[Static and Const](./user-defined-types/static-and-const.md) (5 minutes)" -msgstr "" - -#: src/user-defined-types.md -msgid "[Type Aliases](./user-defined-types/aliases.md) (2 minutes)" -msgstr "" - -#: src/user-defined-types.md -msgid "" -"[Exercise: Elevator Events](./user-defined-types/exercise.md) (15 minutes)" -msgstr "" - -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:7 msgid "Like C and C++, Rust has support for custom structs:" msgstr "Подібно до C і C++, Rust підтримує користувальницькі структури:" -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:16 msgid "\"{} is {} years old\"" msgstr "\"{} віком {} років\"" -#: src/user-defined-types/named-structs.md -#: src/android/interoperability/with-c/bindgen.md +#: src/user-defined-types/named-structs.md:20 +#: src/android/interoperability/with-c/bindgen.md:87 msgid "\"Peter\"" msgstr "\"Peter\"" -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:26 msgid "\"Avery\"" msgstr "\"Avery\"" -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:31 msgid "\"Jackie\"" msgstr "\"Jackie\"" -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:38 +#: src/user-defined-types/enums.md:32 src/pattern-matching/match.md:41 +#: src/methods-and-traits/methods.md:72 +msgid "Key Points:" +msgstr "Ключові моменти:" + +#: src/user-defined-types/named-structs.md:40 msgid "Structs work like in C or C++." msgstr "Структури працюють як у C або C++." -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:41 msgid "Like in C++, and unlike in C, no typedef is needed to define a type." msgstr "" "Як і в C++, і на відміну від C, для визначення типу не потрібен typedef." -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:42 msgid "Unlike in C++, there is no inheritance between structs." msgstr "На відміну від C++, між структурами немає успадкування." -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:43 msgid "" "This may be a good time to let people know there are different types of " "structs." @@ -4653,7 +4310,7 @@ msgstr "" "Це може бути вдалий час, щоб повідомити людям, що існують різні типи " "структур." -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:45 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 " @@ -4663,7 +4320,7 @@ msgstr "" "використані при реалізації трейту на якомусь типі, але не мають даних, які " "ви хочете зберігати у самому значенні." -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:48 msgid "" "The next slide will introduce Tuple structs, used when the field names are " "not important." @@ -4671,7 +4328,7 @@ msgstr "" "На наступному слайді буде представлено структури кортежу, які " "використовуються, коли імена полів не важливі." -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:50 msgid "" "If you already have variables with the right names, then you can create the " "struct using a shorthand." @@ -4679,7 +4336,7 @@ msgstr "" "Якщо у вас уже є змінні з правильними іменами, ви можете створити структуру " "за допомогою скорочення:" -#: src/user-defined-types/named-structs.md +#: src/user-defined-types/named-structs.md:52 msgid "" "The syntax `..avery` 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 " @@ -4689,31 +4346,32 @@ msgstr "" "структури без необхідності явного введення всіх полів. Це завжди має бути " "останнім елементом." -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:11 msgid "If the field names are unimportant, you can use a tuple struct:" msgstr "Якщо імена полів неважливі, ви можете використати структуру кортежу:" -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:18 msgid "\"({}, {})\"" msgstr "\"({}, {})\"" -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:22 msgid "This is often used for single-field wrappers (called newtypes):" msgstr "" "Це часто використовується для обгорток з одним полем (так званих newtypes):" -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:29 msgid "\"Ask a rocket scientist at NASA\"" msgstr "\"Запитайте вченого-ракетника з NASA\"" -#: src/user-defined-types/tuple-structs.md -#: src/android/interoperability/cpp/cpp-bridge.md -#: src/bare-metal/microcontrollers/type-state.md -#: src/async/pitfalls/cancellation.md +#: src/user-defined-types/tuple-structs.md:33 +#: src/android/interoperability/cpp/cpp-bridge.md:50 +#: src/bare-metal/microcontrollers/type-state.md:14 +#: src/concurrency/async-pitfalls/cancellation.md:102 +#: src/concurrency/async-pitfalls/cancellation.md:105 msgid "// ...\n" msgstr "// ...\n" -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:44 msgid "" "Newtypes are a great way to encode additional information about the value in " "a primitive type, for example:" @@ -4721,12 +4379,12 @@ msgstr "" "Newtypes — чудовий спосіб закодувати додаткову інформацію про значення в " "примітивному типі, наприклад:" -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:46 msgid "The number is measured in some units: `Newtons` in the example above." msgstr "" "Число вимірюється в деяких одиницях: у наведеному вище прикладі `Newtons`." -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:47 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)`." @@ -4735,7 +4393,7 @@ msgstr "" "потрібно перевіряти його знову при кожному використанні: " "`PhoneNumber(String)` або `OddNumber(u32)`." -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:50 msgid "" "Demonstrate how to add a `f64` value to a `Newtons` type by accessing the " "single field in the newtype." @@ -4743,7 +4401,7 @@ msgstr "" "Продемонструйте, як додати значення `f64` до типу `Newtons`, отримавши " "доступ до єдиного поля в newtype." -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:52 msgid "" "Rust generally doesn’t like inexplicit things, like automatic unwrapping or " "for instance using booleans as integers." @@ -4751,11 +4409,11 @@ msgstr "" "Rust зазвичай не любить неявних речей, таких як автоматичне розгортання або, " "наприклад, використання логічних значень як цілих чисел." -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:54 msgid "Operator overloading is discussed on Day 3 (generics)." msgstr "Перевантаження операторів обговорюється в день 3 (дженерики)." -#: src/user-defined-types/tuple-structs.md +#: src/user-defined-types/tuple-structs.md:55 msgid "" "The example is a subtle reference to the [Mars Climate Orbiter](https://en." "wikipedia.org/wiki/Mars_Climate_Orbiter) failure." @@ -4763,34 +4421,34 @@ msgstr "" "Цей приклад є тонким посиланням на невдачу [Mars Climate Orbiter](https://en." "wikipedia.org/wiki/Mars_Climate_Orbiter)." -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:7 msgid "" "The `enum` keyword allows the creation of a type which has a few different " "variants:" msgstr "" "Ключове слово `enum` дозволяє створити тип, який має кілька різних варіантів:" -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:19 msgid "// Simple variant\n" msgstr "// Простий варіант\n" -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:20 msgid "// Tuple variant\n" msgstr "// Варіант кортежу\n" -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:21 msgid "// Struct variant\n" msgstr "// Варіант структури\n" -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:26 msgid "\"On this turn: {:?}\"" msgstr "\"На цьому повороті: {:?}\"" -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:34 msgid "Enumerations allow you to collect a set of values under one type." msgstr "Переліки дозволяють збирати набір значень під одним типом." -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:35 msgid "" "`Direction` is a type with variants. There are two values of `Direction`: " "`Direction::Left` and `Direction::Right`." @@ -4798,7 +4456,7 @@ msgstr "" "Напрямок - це тип з варіантами. Існує два значення `Direction`: `Direction::" "Left` та `Direction::Right`." -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:37 msgid "" "`PlayerMove` is a type with three variants. In addition to the payloads, " "Rust will store a discriminant so that it knows at runtime which variant is " @@ -4808,11 +4466,11 @@ msgstr "" "навантаження, Rust зберігатиме дискримінант, щоб під час виконання знати, " "який варіант є у значенні `PlayerMove`." -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:40 msgid "This might be a good time to compare structs and enums:" msgstr "Це може бути гарний час для порівняння структури та переліки:" -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:41 msgid "" "In both, you can have a simple version without fields (unit struct) or one " "with different types of fields (variant payloads)." @@ -4820,7 +4478,7 @@ msgstr "" "В обох ви можете мати просту версію без полів (структура одиниць) або з " "різними типами полів (різні варіанти корисного навантаження)." -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:43 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 " @@ -4830,16 +4488,16 @@ msgstr "" "але тоді вони не будуть одного типу, як якщо б всі вони були визначені в " "переліку." -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:46 msgid "Rust uses minimal space to store the discriminant." msgstr "" "Rust використовує мінімальний обсяг пам'яті для зберігання дискримінанта." -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:47 msgid "If necessary, it stores an integer of the smallest required size" msgstr "Якщо потрібно, він зберігає ціле число найменшого необхідного розміру" -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:48 msgid "" "If the allowed variant values do not cover all bit patterns, it will use " "invalid bit patterns to encode the discriminant (the \"niche " @@ -4851,26 +4509,27 @@ msgstr "" "(\"нішева оптимізація\"). Наприклад, `Option<&u8>` зберігає або вказівник на " "ціле число, або `NULL` для варіанта `None`." -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:52 msgid "" "You can control the discriminant if needed (e.g., for compatibility with C):" msgstr "" "За потреби можна керувати дискримінантом (наприклад, для сумісності з C):" -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:70 msgid "" "Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 " "bytes." msgstr "" "Без `repr` тип дискримінанта займає 2 байти, оскільки 10001 вміщує 2 байти." -#: src/user-defined-types/enums.md src/user-defined-types/static-and-const.md -#: src/memory-management/review.md src/memory-management/move.md -#: src/smart-pointers/box.md src/borrowing/shared.md +#: src/user-defined-types/enums.md:73 src/user-defined-types/static.md:30 +#: src/memory-management/review.md:54 src/memory-management/move.md:103 +#: src/memory-management/copy-types.md:60 src/smart-pointers/box.md:88 +#: src/borrowing/shared.md:36 src/error-handling/result.md:49 msgid "More to Explore" msgstr "Більше інформації для вивчення" -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:75 msgid "" "Rust has several optimizations it can employ to make enums take up less " "space." @@ -4878,7 +4537,7 @@ msgstr "" "Rust має декілька оптимізацій, які можна застосувати, щоб зменшити розмір " "переліків." -#: src/user-defined-types/enums.md +#: src/user-defined-types/enums.md:77 msgid "" "Null pointer optimization: For [some types](https://doc.rust-lang.org/std/" "option/#representation), Rust guarantees that `size_of::()` equals " @@ -4888,7 +4547,7 @@ msgstr "" "org/std/option/#representation) Rust гарантує, що `size_of::()` дорівнює " "`size_of::