msgid "" msgstr "" "Project-Id-Version: Comprehensive Rust 🦀\n" "POT-Creation-Date: 2023-09-19\n" "PO-Revision-Date: 2023-10-18 20:05+0300\n" "Last-Translator: Oleksandr Leoshko \n" "Language-Team: \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 3.4\n" #: src/SUMMARY.md:4 src/index.md:1 msgid "Welcome to Comprehensive Rust 🦀" msgstr "Ласкаво просимо в Comprehensive Rust 🦀" #: src/SUMMARY.md:5 src/running-the-course.md:1 msgid "Running the Course" msgstr "Проведення курсу" #: src/SUMMARY.md:6 src/running-the-course/course-structure.md:1 msgid "Course Structure" msgstr "Структура курсу" #: src/SUMMARY.md:7 src/running-the-course/keyboard-shortcuts.md:1 msgid "Keyboard Shortcuts" msgstr "Гарячі клавіші" #: src/SUMMARY.md:8 src/running-the-course/translations.md:1 msgid "Translations" msgstr "Переклади" #: src/SUMMARY.md:9 src/cargo.md:1 msgid "Using Cargo" msgstr "Використання Cargo" #: src/SUMMARY.md:10 msgid "Rust Ecosystem" msgstr "Екосистема Rust" #: src/SUMMARY.md:11 msgid "Code Samples" msgstr "Приклади коду" #: src/SUMMARY.md:12 msgid "Running Cargo Locally" msgstr "Локальний запуск Cargo" #: src/SUMMARY.md:15 msgid "Day 1: Morning" msgstr "День 1: Ранок" #: src/SUMMARY.md:19 src/SUMMARY.md:79 src/SUMMARY.md:134 src/SUMMARY.md:192 #: src/SUMMARY.md:218 src/SUMMARY.md:268 msgid "Welcome" msgstr "Ласкаво просимо" #: src/SUMMARY.md:20 src/welcome-day-1/what-is-rust.md:1 msgid "What is Rust?" msgstr "Що таке Rust?" #: src/SUMMARY.md:21 src/hello-world.md:1 msgid "Hello World!" msgstr "Hello World!" #: src/SUMMARY.md:22 src/hello-world/small-example.md:1 msgid "Small Example" msgstr "Невеликий Приклад" #: src/SUMMARY.md:23 src/why-rust.md:1 msgid "Why Rust?" msgstr "Чому Rust?" #: src/SUMMARY.md:24 src/why-rust/compile-time.md:1 msgid "Compile Time Guarantees" msgstr "Гарантії під час компіляції" #: src/SUMMARY.md:25 src/why-rust/runtime.md:1 msgid "Runtime Guarantees" msgstr "Гарантії під час виконання" #: src/SUMMARY.md:26 src/why-rust/modern.md:1 msgid "Modern Features" msgstr "Сучасні можливості" #: src/SUMMARY.md:27 src/basic-syntax.md:1 msgid "Basic Syntax" msgstr "Базовий синтаксис" #: src/SUMMARY.md:28 src/basic-syntax/scalar-types.md:1 msgid "Scalar Types" msgstr "Скалярні типи" #: src/SUMMARY.md:29 src/basic-syntax/compound-types.md:1 msgid "Compound Types" msgstr "Складені типи" #: src/SUMMARY.md:30 src/basic-syntax/references.md:1 msgid "References" msgstr "Посилання" #: src/SUMMARY.md:31 src/basic-syntax/references-dangling.md:1 msgid "Dangling References" msgstr "Висячі посилання" #: src/SUMMARY.md:32 src/basic-syntax/slices.md:1 msgid "Slices" msgstr "Слайси" #: src/SUMMARY.md:33 msgid "String vs str" msgstr "String та str" #: src/SUMMARY.md:34 src/basic-syntax/functions.md:1 msgid "Functions" msgstr "Функції" #: src/SUMMARY.md:35 src/basic-syntax/rustdoc.md:1 msgid "Rustdoc" msgstr "Rustdoc" #: src/SUMMARY.md:36 src/SUMMARY.md:102 src/basic-syntax/methods.md:1 #: src/methods.md:1 msgid "Methods" msgstr "Методи" #: src/SUMMARY.md:37 msgid "Overloading" msgstr "Перевантаження" #: src/SUMMARY.md:38 src/SUMMARY.md:71 src/SUMMARY.md:105 src/SUMMARY.md:125 #: src/SUMMARY.md:154 src/SUMMARY.md:184 src/SUMMARY.md:211 src/SUMMARY.md:232 #: src/SUMMARY.md:260 src/SUMMARY.md:282 src/SUMMARY.md:303 #: src/exercises/android/morning.md:1 src/exercises/bare-metal/morning.md:1 #: src/exercises/bare-metal/afternoon.md:1 #: src/exercises/concurrency/morning.md:1 #: src/exercises/concurrency/afternoon.md:1 msgid "Exercises" msgstr "Вправи" #: src/SUMMARY.md:39 src/exercises/day-1/implicit-conversions.md:1 msgid "Implicit Conversions" msgstr "Неявні приведення" #: src/SUMMARY.md:40 msgid "Arrays and for Loops" msgstr "Масиви та цикли for" #: src/SUMMARY.md:42 msgid "Day 1: Afternoon" msgstr "День 1: Полудень" #: src/SUMMARY.md:44 src/SUMMARY.md:295 src/control-flow.md:1 msgid "Control Flow" msgstr "Потік контролю" #: src/SUMMARY.md:45 src/control-flow/blocks.md:1 msgid "Blocks" msgstr "Блоки" #: src/SUMMARY.md:46 msgid "if expressions" msgstr "вирази if" #: src/SUMMARY.md:47 msgid "for expressions" msgstr "вирази for" #: src/SUMMARY.md:48 msgid "while expressions" msgstr "вирази while" #: src/SUMMARY.md:49 msgid "break & continue" msgstr "break та continue" #: src/SUMMARY.md:50 msgid "loop expressions" msgstr "цикли" #: src/SUMMARY.md:52 src/basic-syntax/variables.md:1 msgid "Variables" msgstr "Змінні" #: src/SUMMARY.md:53 src/basic-syntax/type-inference.md:1 msgid "Type Inference" msgstr "Виведення типів" #: src/SUMMARY.md:54 msgid "static & const" msgstr "static та const" #: src/SUMMARY.md:55 src/basic-syntax/scopes-shadowing.md:1 msgid "Scopes and Shadowing" msgstr "Області видимості та затінення" #: src/SUMMARY.md:56 src/enums.md:1 msgid "Enums" msgstr "Перелічувані типи" #: src/SUMMARY.md:57 src/enums/variant-payloads.md:1 msgid "Variant Payloads" msgstr "Варіанти зі значенням" #: src/SUMMARY.md:58 src/enums/sizes.md:1 msgid "Enum Sizes" msgstr "Розміри перелічуваних типів" #: src/SUMMARY.md:60 src/control-flow/novel.md:1 msgid "Novel Control Flow" msgstr "Новітній потік контролю" #: src/SUMMARY.md:61 msgid "if let expressions" msgstr "вирази if let" #: src/SUMMARY.md:62 msgid "while let expressions" msgstr "вирази while let" #: src/SUMMARY.md:63 msgid "match expressions" msgstr "вирази match" #: src/SUMMARY.md:65 src/pattern-matching.md:1 msgid "Pattern Matching" msgstr "Зіставлення зразків" #: src/SUMMARY.md:66 src/pattern-matching/destructuring-enums.md:1 msgid "Destructuring Enums" msgstr "Деструктурування перелічуваних типів" #: src/SUMMARY.md:67 src/pattern-matching/destructuring-structs.md:1 msgid "Destructuring Structs" msgstr "Деструктурування структур" #: src/SUMMARY.md:68 src/pattern-matching/destructuring-arrays.md:1 msgid "Destructuring Arrays" msgstr "Деструктурування масивів" #: src/SUMMARY.md:69 src/pattern-matching/match-guards.md:1 msgid "Match Guards" msgstr "Умовні запобіжники" #: src/SUMMARY.md:72 src/exercises/day-1/luhn.md:1 #: src/exercises/day-1/solutions-afternoon.md:3 msgid "Luhn Algorithm" msgstr "Алгоритм Луна" #: src/SUMMARY.md:73 msgid "Pattern Matching (TBD)" msgstr "Зіставлення зразків" #: src/SUMMARY.md:75 msgid "Day 2: Morning" msgstr "День 2: Ранок" #: src/SUMMARY.md:81 src/memory-management.md:1 msgid "Memory Management" msgstr "Управління пам'яттю" #: src/SUMMARY.md:82 msgid "Stack vs Heap" msgstr "Стек та Купа" #: src/SUMMARY.md:83 msgid "Stack Memory" msgstr "Стекова пам'ять" #: src/SUMMARY.md:84 src/memory-management/manual.md:1 msgid "Manual Memory Management" msgstr "Ручне управління пам'яттю" #: src/SUMMARY.md:85 src/memory-management/scope-based.md:1 msgid "Scope-Based Memory Management" msgstr "Управління памяттю на основі областей видимості" #: src/SUMMARY.md:86 msgid "Garbage Collection" msgstr "Збирання сміття" #: src/SUMMARY.md:87 msgid "Rust Memory Management" msgstr "Управління пам'яттю в Rust" #: src/SUMMARY.md:88 src/ownership.md:1 msgid "Ownership" msgstr "Володіння" #: src/SUMMARY.md:89 src/ownership/move-semantics.md:1 msgid "Move Semantics" msgstr "Семантика переміщення" #: src/SUMMARY.md:90 src/ownership/moved-strings-rust.md:1 msgid "Moved Strings in Rust" msgstr "Переміщені стрічки в Rust" #: src/SUMMARY.md:91 msgid "Double Frees in Modern C++" msgstr "Подвійні вивільнення в сучасному C++" #: src/SUMMARY.md:92 src/ownership/moves-function-calls.md:1 msgid "Moves in Function Calls" msgstr "Переміщення у викликах функцій" #: src/SUMMARY.md:93 src/ownership/copy-clone.md:1 msgid "Copying and Cloning" msgstr "Копіювання та клонування" #: src/SUMMARY.md:94 src/ownership/borrowing.md:1 msgid "Borrowing" msgstr "Запозичення" #: src/SUMMARY.md:95 src/ownership/shared-unique-borrows.md:1 msgid "Shared and Unique Borrows" msgstr "Спільні та унікальні запозичення" #: src/SUMMARY.md:96 src/ownership/lifetimes.md:1 msgid "Lifetimes" msgstr "Тривалість життя" #: src/SUMMARY.md:97 src/ownership/lifetimes-function-calls.md:1 msgid "Lifetimes in Function Calls" msgstr "Тривалість життя у викликах функцій" #: src/SUMMARY.md:98 src/ownership/lifetimes-data-structures.md:1 msgid "Lifetimes in Data Structures" msgstr "Тривалість життя в структурах даних" #: src/SUMMARY.md:99 src/structs.md:1 msgid "Structs" msgstr "Структури" #: src/SUMMARY.md:100 src/structs/tuple-structs.md:1 msgid "Tuple Structs" msgstr "Кортежні структури" #: src/SUMMARY.md:101 src/structs/field-shorthand.md:1 msgid "Field Shorthand Syntax" msgstr "Скорочений синтаксис полів структур" #: src/SUMMARY.md:103 src/methods/receiver.md:1 msgid "Method Receiver" msgstr "Отримувач методу" #: src/SUMMARY.md:104 src/SUMMARY.md:166 src/SUMMARY.md:281 #: src/methods/example.md:1 src/concurrency/shared_state/example.md:1 msgid "Example" msgstr "Приклад" #: src/SUMMARY.md:106 src/exercises/day-2/book-library.md:1 msgid "Storing Books" msgstr "Зберігання книжок" #: src/SUMMARY.md:107 src/exercises/day-2/health-statistics.md:1 msgid "Health Statistics" msgstr "Статистика здоровя" #: src/SUMMARY.md:109 msgid "Day 2: Afternoon" msgstr "День 2: Полудень" #: src/SUMMARY.md:111 src/std.md:1 msgid "Standard Library" msgstr "Стандартна бібліотека" #: src/SUMMARY.md:112 msgid "Option and Result" msgstr "Option та Result" #: src/SUMMARY.md:113 src/std/string.md:1 msgid "String" msgstr "String" #: src/SUMMARY.md:114 msgid "Vec" msgstr "Vec" #: src/SUMMARY.md:115 msgid "HashMap" msgstr "HashMap" #: src/SUMMARY.md:116 msgid "Box" msgstr "Box" #: src/SUMMARY.md:117 msgid "Recursive Data Types" msgstr "Рекурсивні типи даних" #: src/SUMMARY.md:118 src/std/box-niche.md:1 msgid "Niche Optimization" msgstr "Нішева оптимізація" #: src/SUMMARY.md:119 msgid "Rc" msgstr "Rc" #: src/SUMMARY.md:120 msgid "Cell/RefCell" msgstr "Cell/RefCell" #: src/SUMMARY.md:121 src/modules.md:1 msgid "Modules" msgstr "Модулі" #: src/SUMMARY.md:122 src/modules/visibility.md:1 msgid "Visibility" msgstr "Видимість" #: src/SUMMARY.md:123 src/modules/paths.md:1 msgid "Paths" msgstr "Шляхи" #: src/SUMMARY.md:124 src/modules/filesystem.md:1 msgid "Filesystem Hierarchy" msgstr "Ієрархія файлової системи" #: src/SUMMARY.md:126 src/exercises/day-2/iterators-and-ownership.md:1 msgid "Iterators and Ownership" msgstr "Ітератори та володіння" #: src/SUMMARY.md:127 src/exercises/day-2/strings-iterators.md:1 #: src/exercises/day-2/solutions-afternoon.md:3 msgid "Strings and Iterators" msgstr "Стрічки та ітератори" #: src/SUMMARY.md:130 msgid "Day 3: Morning" msgstr "День 3: Ранок" #: src/SUMMARY.md:135 src/generics.md:1 msgid "Generics" msgstr "Узагальнені типи" #: src/SUMMARY.md:136 src/generics/data-types.md:1 msgid "Generic Data Types" msgstr "Узагальнені типи даних" #: src/SUMMARY.md:137 src/generics/methods.md:1 msgid "Generic Methods" msgstr "Узагальнені методи" #: src/SUMMARY.md:138 src/generics/monomorphization.md:1 msgid "Monomorphization" msgstr "Мономорфізація" #: src/SUMMARY.md:139 src/traits.md:1 msgid "Traits" msgstr "Трейти" #: src/SUMMARY.md:140 src/traits/trait-objects.md:1 msgid "Trait Objects" msgstr "Трейт-об'єкти" #: src/SUMMARY.md:141 src/traits/deriving-traits.md:1 msgid "Deriving Traits" msgstr "Наслідування трейтів" #: src/SUMMARY.md:142 src/traits/default-methods.md:1 msgid "Default Methods" msgstr "Методи за замовчуванням" #: src/SUMMARY.md:143 src/traits/trait-bounds.md:1 msgid "Trait Bounds" msgstr "Обмеження трейту" #: src/SUMMARY.md:144 msgid "impl Trait" msgstr "impl Trait" #: src/SUMMARY.md:145 src/traits/important-traits.md:1 msgid "Important Traits" msgstr "Важливі трейти" #: src/SUMMARY.md:146 msgid "Iterator" msgstr "Ітератор" #: src/SUMMARY.md:147 src/traits/from-iterator.md:1 msgid "FromIterator" msgstr "FromIterator" #: src/SUMMARY.md:148 msgid "From and Into" msgstr "From та Into" #: src/SUMMARY.md:149 msgid "Read and Write" msgstr "Read та Write" #: src/SUMMARY.md:150 msgid "Drop" msgstr "Трейт `Drop`" #: src/SUMMARY.md:151 msgid "Default" msgstr "Трейт `Default`" #: src/SUMMARY.md:152 msgid "Operators: Add, Mul, ..." msgstr "Оператори: Add, Mul, ..." #: src/SUMMARY.md:153 msgid "Closures: Fn, FnMut, FnOnce" msgstr "Замикання: Fn, FnMut, FnOnce" #: src/SUMMARY.md:155 src/exercises/day-3/simple-gui.md:1 #: src/exercises/day-3/solutions-morning.md:3 msgid "A Simple GUI Library" msgstr "Проста бібліотека графічного користувацького інтерфейсу" #: src/SUMMARY.md:156 src/exercises/day-3/solutions-morning.md:175 msgid "Points and Polygons" msgstr "Точки і багатокутники" #: src/SUMMARY.md:158 msgid "Day 3: Afternoon" msgstr "День 3: Полудень" #: src/SUMMARY.md:160 src/error-handling.md:1 msgid "Error Handling" msgstr "Обробка помилок" #: src/SUMMARY.md:161 src/error-handling/panics.md:1 msgid "Panics" msgstr "Паніки" #: src/SUMMARY.md:162 msgid "Catching Stack Unwinding" msgstr "Перехоплення розмотування стека" #: src/SUMMARY.md:163 msgid "Structured Error Handling" msgstr "Структурована обробка помилок" #: src/SUMMARY.md:164 msgid "Propagating Errors with ?" msgstr "Розповсюдження помилок за допомогою ?" #: src/SUMMARY.md:165 src/error-handling/converting-error-types.md:1 #: src/error-handling/converting-error-types-example.md:1 msgid "Converting Error Types" msgstr "Перетворення типів помилок" #: src/SUMMARY.md:167 src/error-handling/deriving-error-enums.md:1 msgid "Deriving Error Enums" msgstr "Наслідування перечислюваних типів помилок" #: src/SUMMARY.md:168 src/error-handling/dynamic-errors.md:1 msgid "Dynamic Error Types" msgstr "Динамічні типи помилок" #: src/SUMMARY.md:169 src/error-handling/error-contexts.md:1 msgid "Adding Context to Errors" msgstr "Додавання контексту до помилок" #: src/SUMMARY.md:170 src/testing.md:1 msgid "Testing" msgstr "Тестування" #: src/SUMMARY.md:171 src/testing/unit-tests.md:1 msgid "Unit Tests" msgstr "Модульні тести" #: src/SUMMARY.md:172 src/testing/test-modules.md:1 msgid "Test Modules" msgstr "Тестові модулі" #: src/SUMMARY.md:173 src/testing/doc-tests.md:1 msgid "Documentation Tests" msgstr "Тести документації" #: src/SUMMARY.md:174 src/testing/integration-tests.md:1 msgid "Integration Tests" msgstr "Інтеграційні тести" #: src/SUMMARY.md:175 src/bare-metal/useful-crates.md:1 msgid "Useful crates" msgstr "Корисні крейти" #: src/SUMMARY.md:176 src/unsafe.md:1 msgid "Unsafe Rust" msgstr "Небезпечний Rust" #: src/SUMMARY.md:177 src/unsafe/raw-pointers.md:1 msgid "Dereferencing Raw Pointers" msgstr "Розіменування \"сирих\" вказівників" #: src/SUMMARY.md:178 src/unsafe/mutable-static-variables.md:1 msgid "Mutable Static Variables" msgstr "Несталі статичні змінні" #: src/SUMMARY.md:179 src/unsafe/unions.md:1 msgid "Unions" msgstr "Об'єднання" #: src/SUMMARY.md:180 src/unsafe/calling-unsafe-functions.md:1 msgid "Calling Unsafe Functions" msgstr "Виклик небезпечних функцій" #: src/SUMMARY.md:181 src/unsafe/writing-unsafe-functions.md:1 msgid "Writing Unsafe Functions" msgstr "Написання небезпечних функцій" #: src/SUMMARY.md:182 msgid "Extern Functions" msgstr "Зовнішні функції" #: src/SUMMARY.md:183 src/unsafe/unsafe-traits.md:1 msgid "Implementing Unsafe Traits" msgstr "Реалізація небезпечних трейтів" #: src/SUMMARY.md:185 src/exercises/day-3/safe-ffi-wrapper.md:1 #: src/exercises/day-3/solutions-afternoon.md:3 msgid "Safe FFI Wrapper" msgstr "Безпечна обгортка інтерфейсу зовнішньої функції (FFI)" #: src/SUMMARY.md:188 src/SUMMARY.md:258 src/bare-metal/android.md:1 msgid "Android" msgstr "Android" #: src/SUMMARY.md:193 src/android/setup.md:1 msgid "Setup" msgstr "Установка" #: src/SUMMARY.md:194 src/android/build-rules.md:1 msgid "Build Rules" msgstr "Правила побудови" #: src/SUMMARY.md:195 msgid "Binary" msgstr "Бінарний" #: src/SUMMARY.md:196 msgid "Library" msgstr "Бібліотека" #: src/SUMMARY.md:197 src/android/aidl.md:1 msgid "AIDL" msgstr "AIDL" #: src/SUMMARY.md:198 msgid "Interface" msgstr "Інтерфейс" #: src/SUMMARY.md:199 msgid "Implementation" msgstr "Реалізація" #: src/SUMMARY.md:200 msgid "Server" msgstr "Сервер" #: src/SUMMARY.md:201 src/android/aidl/deploy.md:1 msgid "Deploy" msgstr "Розгортка" #: src/SUMMARY.md:202 msgid "Client" msgstr "Кліент" #: src/SUMMARY.md:203 src/android/aidl/changing.md:1 msgid "Changing API" msgstr "Зміна API" #: src/SUMMARY.md:204 src/SUMMARY.md:248 src/android/logging.md:1 #: src/bare-metal/aps/logging.md:1 msgid "Logging" msgstr "Журналювання" #: src/SUMMARY.md:205 src/android/interoperability.md:1 msgid "Interoperability" msgstr "Взаємодія" #: src/SUMMARY.md:206 msgid "With C" msgstr "З С" #: src/SUMMARY.md:207 msgid "Calling C with Bindgen" msgstr "Виклик С за допомогою Bindgen" #: src/SUMMARY.md:208 msgid "Calling Rust from C" msgstr "Виклик Rust з C" #: src/SUMMARY.md:209 src/android/interoperability/cpp.md:1 msgid "With C++" msgstr "З С++" #: src/SUMMARY.md:210 msgid "With Java" msgstr "З Java" #: src/SUMMARY.md:214 msgid "Bare Metal: Morning" msgstr "Залізо: Ранок" #: src/SUMMARY.md:219 msgid "no_std" msgstr "no_std" #: src/SUMMARY.md:220 msgid "A Minimal Example" msgstr "Мінімальний приклад" #: src/SUMMARY.md:221 msgid "alloc" msgstr "виділення" #: src/SUMMARY.md:222 src/bare-metal/microcontrollers.md:1 msgid "Microcontrollers" msgstr "Мікроконтролери" #: src/SUMMARY.md:223 src/bare-metal/microcontrollers/mmio.md:1 msgid "Raw MMIO" msgstr "Сирий ввід вивід з відображеної пам'яті" #: src/SUMMARY.md:224 msgid "PACs" msgstr "Крейти доступу до периферійних пристроїв (PACs)" #: src/SUMMARY.md:225 msgid "HAL Crates" msgstr "Крейти абстракції обладнання (HAL)" #: src/SUMMARY.md:226 msgid "Board Support Crates" msgstr "Крейти підтримки плат" #: src/SUMMARY.md:227 msgid "The Type State Pattern" msgstr "Шаблон стану типу" #: src/SUMMARY.md:228 msgid "embedded-hal" msgstr "embedded-hal" #: src/SUMMARY.md:229 msgid "probe-rs, cargo-embed" msgstr "probe-rs, cargo-embed" #: src/SUMMARY.md:230 src/bare-metal/microcontrollers/debugging.md:1 msgid "Debugging" msgstr "Відладка" #: src/SUMMARY.md:231 src/SUMMARY.md:251 msgid "Other Projects" msgstr "Інші проєкти" #: src/SUMMARY.md:233 src/exercises/bare-metal/compass.md:1 #: src/exercises/bare-metal/solutions-morning.md:3 msgid "Compass" msgstr "Компас" #: src/SUMMARY.md:235 msgid "Bare Metal: Afternoon" msgstr "Залізо: Полудень" #: src/SUMMARY.md:237 msgid "Application Processors" msgstr "Прикладні процесори" #: src/SUMMARY.md:238 src/bare-metal/aps/entry-point.md:1 msgid "Getting Ready to Rust" msgstr "Підготовка до Rust" #: src/SUMMARY.md:239 msgid "Inline Assembly" msgstr "Вбудована збірка" #: src/SUMMARY.md:240 msgid "MMIO" msgstr "Ввід вивід з відображеної пам'яті" #: src/SUMMARY.md:241 msgid "Let's Write a UART Driver" msgstr "Давайте напишемо драйвер UART" #: src/SUMMARY.md:242 msgid "More Traits" msgstr "Більше трейтів" #: src/SUMMARY.md:243 msgid "A Better UART Driver" msgstr "Кращий драйвер UART" #: src/SUMMARY.md:244 src/bare-metal/aps/better-uart/bitflags.md:1 msgid "Bitflags" msgstr "Бітові прапорці (крейт bitflags)" #: src/SUMMARY.md:245 msgid "Multiple Registers" msgstr "Регістри" #: src/SUMMARY.md:246 src/bare-metal/aps/better-uart/driver.md:1 msgid "Driver" msgstr "Драйвер" #: src/SUMMARY.md:247 src/SUMMARY.md:249 msgid "Using It" msgstr "Його використання" #: src/SUMMARY.md:250 src/bare-metal/aps/exceptions.md:1 msgid "Exceptions" msgstr "Вийнятки" #: src/SUMMARY.md:252 msgid "Useful Crates" msgstr "Корисні крейти" #: src/SUMMARY.md:253 msgid "zerocopy" msgstr "нульова копія" #: src/SUMMARY.md:254 msgid "aarch64-paging" msgstr "aarch64-paging" #: src/SUMMARY.md:255 msgid "buddy_system_allocator" msgstr "buddy_system_allocator" #: src/SUMMARY.md:256 msgid "tinyvec" msgstr "tinyvec" #: src/SUMMARY.md:257 msgid "spin" msgstr "spin" #: src/SUMMARY.md:259 src/bare-metal/android/vmbase.md:1 msgid "vmbase" msgstr "vmbase" #: src/SUMMARY.md:261 msgid "RTC Driver" msgstr "Драйвер годинника реального часу" #: src/SUMMARY.md:264 msgid "Concurrency: Morning" msgstr "Паралелізм: Ранок" #: src/SUMMARY.md:269 src/concurrency/threads.md:1 msgid "Threads" msgstr "Потоки" #: src/SUMMARY.md:270 src/concurrency/scoped-threads.md:1 msgid "Scoped Threads" msgstr "Потоки з областю видимості" #: src/SUMMARY.md:271 src/concurrency/channels.md:1 msgid "Channels" msgstr "Канали" #: src/SUMMARY.md:272 src/concurrency/channels/unbounded.md:1 msgid "Unbounded Channels" msgstr "Незав'язані канали" #: src/SUMMARY.md:273 src/concurrency/channels/bounded.md:1 msgid "Bounded Channels" msgstr "Зав'язані канали" #: src/SUMMARY.md:274 msgid "Send and Sync" msgstr "Send та Sync" #: src/SUMMARY.md:274 msgid "Send" msgstr "Send" #: src/SUMMARY.md:274 msgid "Sync" msgstr "Sync" #: src/SUMMARY.md:277 src/concurrency/send-sync/examples.md:1 msgid "Examples" msgstr "Приклади" #: src/SUMMARY.md:278 src/concurrency/shared_state.md:1 msgid "Shared State" msgstr "Спільний стан" #: src/SUMMARY.md:279 msgid "Arc" msgstr "Arc" #: src/SUMMARY.md:280 msgid "Mutex" msgstr "Mutex" #: src/SUMMARY.md:283 src/SUMMARY.md:304 #: src/exercises/concurrency/dining-philosophers.md:1 #: src/exercises/concurrency/solutions-morning.md:3 msgid "Dining Philosophers" msgstr "Обідні філософи" #: src/SUMMARY.md:284 src/exercises/concurrency/link-checker.md:1 msgid "Multi-threaded Link Checker" msgstr "Перевірка багатопоточних посилань" #: src/SUMMARY.md:286 msgid "Concurrency: Afternoon" msgstr "Паралельність: після обіду" #: src/SUMMARY.md:288 msgid "Async Basics" msgstr "Основи асинхронізації" #: src/SUMMARY.md:289 msgid "async/await" msgstr "async/await" #: src/SUMMARY.md:290 src/async/futures.md:1 msgid "Futures" msgstr "Futures" #: src/SUMMARY.md:291 src/async/runtimes.md:1 msgid "Runtimes" msgstr "Середовища виконання" #: src/SUMMARY.md:292 src/async/runtimes/tokio.md:1 msgid "Tokio" msgstr "Токіо" #: src/SUMMARY.md:293 src/exercises/concurrency/link-checker.md:126 #: src/async/tasks.md:1 src/exercises/concurrency/chat-app.md:143 msgid "Tasks" msgstr "Завдання" #: src/SUMMARY.md:294 src/async/channels.md:1 msgid "Async Channels" msgstr "Асинхронні канали" #: src/SUMMARY.md:296 src/async/control-flow/join.md:1 msgid "Join" msgstr "Join" #: src/SUMMARY.md:297 src/async/control-flow/select.md:1 msgid "Select" msgstr "Select" #: src/SUMMARY.md:298 msgid "Pitfalls" msgstr "Підводні камені" #: src/SUMMARY.md:299 msgid "Blocking the Executor" msgstr "Блокування Виконавця" #: src/SUMMARY.md:300 src/async/pitfalls/pin.md:1 msgid "Pin" msgstr "Pin" #: src/SUMMARY.md:301 src/async/pitfalls/async-traits.md:1 msgid "Async Traits" msgstr "Асинхронні Traits" #: src/SUMMARY.md:302 src/async/pitfalls/cancellation.md:1 msgid "Cancellation" msgstr "Анулювання" #: src/SUMMARY.md:305 src/exercises/concurrency/chat-app.md:1 #: src/exercises/concurrency/solutions-afternoon.md:119 msgid "Broadcast Chat Application" msgstr "Програма широкомовного чату" #: src/SUMMARY.md:308 msgid "Final Words" msgstr "Заключні слова" #: src/SUMMARY.md:312 src/thanks.md:1 msgid "Thanks!" msgstr "Дякую!" #: src/SUMMARY.md:313 msgid "Other Resources" msgstr "Інші ресурси" #: src/SUMMARY.md:314 src/credits.md:1 msgid "Credits" msgstr "Кредити" #: src/SUMMARY.md:317 src/exercises/solutions.md:1 msgid "Solutions" msgstr "Рішення" #: src/SUMMARY.md:322 msgid "Day 1 Morning" msgstr "День 1 Ранок" #: src/SUMMARY.md:323 msgid "Day 1 Afternoon" msgstr "День 1 Після обіду" #: src/SUMMARY.md:324 msgid "Day 2 Morning" msgstr "День 2 Ранок" #: src/SUMMARY.md:325 msgid "Day 2 Afternoon" msgstr "День 2 Після обіду" #: src/SUMMARY.md:326 msgid "Day 3 Morning" msgstr "День 3 Ранок" #: src/SUMMARY.md:327 msgid "Day 3 Afternoon" msgstr "День 3 Після обіду" #: src/SUMMARY.md:328 msgid "Bare Metal Rust Morning" msgstr "Rust на голому залізі Ранок" #: src/SUMMARY.md:329 src/exercises/bare-metal/solutions-afternoon.md:1 msgid "Bare Metal Rust Afternoon" msgstr "Rust на голому залізі Після обіду" #: src/SUMMARY.md:330 msgid "Concurrency Morning" msgstr "Одночасний Ранок" #: src/SUMMARY.md:331 msgid "Concurrency Afternoon" msgstr "Одночасний обід" #: src/index.md:3 msgid "" "[![Build workflow](https://img.shields.io/github/actions/workflow/status/" "google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/" "google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain) [!" "[GitHub contributors](https://img.shields.io/github/contributors/google/" "comprehensive-rust?style=flat-square)](https://github.com/google/" "comprehensive-rust/graphs/contributors) [![GitHub stars](https://img.shields." "io/github/stars/google/comprehensive-rust?style=flat-square)](https://github." "com/google/comprehensive-rust/stargazers)" msgstr "" "[![Робочий процес створення](https://img.shields.io/github/actions/workflow/" "status/google/comprehensive-rust/build.yml?style=flat-square)](https://" "github.com /google/comprehensive-rust/actions/workflows/build.yml?" "query=branch%3Amain) [![Учасники GitHub](https://img.shields.io/github/" "contributors/google/comprehensive-rust?style=flat-square)](https://github." "com/google/comprehensive-rust/graphs/contributors) [![зірки GitHub](https://" "img.shields.io/github/stars/google/comprehensive-rust?style=flat-square)]" "(https://github.com/google/comprehensive-rust/stargazers)" #: src/index.md:7 msgid "" "This is a free Rust course developed by the Android team at Google. The " "course covers the full spectrum of Rust, from basic syntax to advanced " "topics like generics and error handling." msgstr "" "Це трьохденний курс по мові Rust, розроблений командою Android. Курс охоплює " "весь спектр Rust, від базового синтаксиса до складних тем, таких як " "узагальнення (generics) и обробка помилок. Останній день курсу теж охоплює " "особливості програмування під Android." #: src/index.md:11 msgid "" "The latest version of the course can be found at . If you are reading somewhere else, please check there " "for updates." msgstr "" "Останню версію курсу можна знайти за адресою . Якщо ви читаєте десь в іншому місці, перевіряйте там " "на оновлення." #: src/index.md:15 msgid "" "The goal of the course is to teach you Rust. We assume you don't know " "anything about Rust and hope to:" msgstr "" "Ціль курсу --- навчити вас мові Rust. Ми припускаємо, що ви нічого не знаєте " "про Rust и сподіваємося:" #: src/index.md:18 msgid "Give you a comprehensive understanding of the Rust syntax and language." msgstr "Дати повне уявлення про синтаксис та семантику Rust." #: src/index.md:19 msgid "Enable you to modify existing programs and write new programs in Rust." msgstr "Навчити працювати з існуючим кодом та писати нові програми на Rust." #: src/index.md:20 msgid "Show you common Rust idioms." msgstr "Показати розповсюджені ідіоми мови Rust." #: src/index.md:22 msgid "We call the first three course days Rust Fundamentals." msgstr "Перші три дні курсу ми називаємо Rust Fundamentals." #: src/index.md:24 msgid "" "Building on this, you're invited to dive into one or more specialized topics:" msgstr "" "Перші три дні познайомлять вас із основами Rust. Після цього вам " "пропонується заглибитися в одну або кілька спеціалізованих тем:" #: src/index.md:26 msgid "" "[Android](android.md): a half-day course on using Rust for Android platform " "development (AOSP). This includes interoperability with C, C++, and Java." msgstr "" "[Android](android.md): розрахований на половину дня курс з використання Rust " "для розробки на платформі Android (AOSP). Сюди входить взаємодія з C, C++ та " "Java." #: src/index.md:28 msgid "" "[Bare-metal](bare-metal.md): a whole-day class on using Rust for bare-metal " "(embedded) development. Both microcontrollers and application processors are " "covered." msgstr "" "[Голе залізо](bare-metal.md): одноденне заняття з використання Rust для " "низькорівневої (embedded) розробки, що охоплює як мікроконтролери, так і " "звичайні процесори." #: src/index.md:31 msgid "" "[Concurrency](concurrency.md): a whole-day class on concurrency in Rust. We " "cover both classical concurrency (preemptively scheduling using threads and " "mutexes) and async/await concurrency (cooperative multitasking using " "futures)." msgstr "" "[Concurrency](concurrency.md): повний день занять з вивчення конкурентності " "у Rust. Ми розглянемо як класичну конкурентність (витіснюючи " "багатозадачність з використанням потоків і м'ютексів), так і async/await " "конкурентність (кооперативна багатозадачність з використанням futures)." #: src/index.md:37 msgid "Non-Goals" msgstr "За рамками курсу" #: src/index.md:39 msgid "" "Rust is a large language and we won't be able to cover all of it in a few " "days. Some non-goals of this course are:" msgstr "" "Rust --- це об'ємна мова, і ми не зможемо охопити її за кілька днів. Теми, " "що виходять за межі курсу:" #: src/index.md:42 msgid "" "Learning how to develop macros: please see [Chapter 19.5 in the Rust Book]" "(https://doc.rust-lang.org/book/ch19-06-macros.html) and [Rust by Example]" "(https://doc.rust-lang.org/rust-by-example/macros.html) instead." msgstr "" "Написання макросів, див. [Розділ 19.5 у The Rust Book](https://doc.rust-lang." "org/book/ch19-06-macros.html) и [Rust by Example](https://doc.rust-lang.org/" "rust-by-example/macros.html)." #: src/index.md:46 msgid "Assumptions" msgstr "Припущення" #: src/index.md:48 msgid "" "The course assumes that you already know how to program. Rust is a " "statically-typed language and we will sometimes make comparisons with C and " "C++ to better explain or contrast the Rust approach." msgstr "" "Передбачається, що ви вже можете програмувати. Rust --- це статично " "типізована мова, і іноді ми порівнюватимемо і зіставлятимемо її з C і C++, " "щоб краще пояснити чи підкреслити різницю у підходах до написання коду на " "Rust." #: src/index.md:52 msgid "" "If you know how to program in a dynamically-typed language such as Python or " "JavaScript, then you will be able to follow along just fine too." msgstr "" "Якщо ви знаєте, як програмувати мовою з динамічною типізацією, наприклад " "Python або JavaScript, ви зможете успішно пройти цей курс." #: src/index.md:57 msgid "" "This is an example of a _speaker note_. We will use these to add additional " "information to the slides. This could be key points which the instructor " "should cover as well as answers to typical questions which come up in class." msgstr "" "Це приклад _нотаток для викладача_. Ми будемо використовувати їх для " "додавання додаткову інформацію до слайдів. Це можуть бути ключові моменти, " "які викладач повинен висвітлити, а також відповіді на типові питання, що " "виникають під час проходження курсу." #: src/running-the-course.md:3 src/running-the-course/course-structure.md:3 msgid "This page is for the course instructor." msgstr "Ця сторінка призначена для викладача курсу." #: src/running-the-course.md:5 msgid "" "Here is a bit of background information about how we've been running the " "course internally at Google." msgstr "" "Ось коротка довідкова інформація про те, як ми проводили курс всередині " "Google." #: src/running-the-course.md:8 msgid "" "We typically run classes from 10:00 am to 4:00 pm, with a 1 hour lunch break " "in the middle. This leaves 2.5 hours for the morning class and 2.5 hours for " "the afternoon class. Note that this is just a recommendation: you can also " "spend 3 hour on the morning session to give people more time for exercises. " "The downside of longer session is that people can become very tired after 6 " "full hours of class in the afternoon." msgstr "" "Зазвичай ми проводимо заняття з 10:00 до 16:00, з 1-годинною перервою на " "обід посередині. Це залишає 2,5 години для ранкового заняття та 2,5 години " "для післяобіднього. Зауважте, що це лише рекомендація: ви також можете " "приділити 3 години ранковому заняттю, щоб дати людям більше часу для вправ. " "Недоліком довшого заняття є те, що люди можуть дуже втомитися після 6 повних " "годин занять у другій половині дня." #: src/running-the-course.md:16 msgid "Before you run the course, you will want to:" msgstr "Перед проведенням курсу бажано:" #: src/running-the-course.md:18 msgid "" "Make yourself familiar with the course material. We've included speaker " "notes to help highlight the key points (please help us by contributing more " "speaker notes!). When presenting, you should make sure to open the speaker " "notes in a popup (click the link with a little arrow next to \"Speaker " "Notes\"). This way you have a clean screen to present to the class." msgstr "" "Ознайомитись з матеріалами курсу. Ми додали нотатки для викладача на деяких " "сторінках, щоб виділити ключові моменти (будь ласка, допомагайте нам, " "додаючи свої нотатки для викладачів!). Переконайтеся, що відкрили нотатки " "для викладача у спливаючому вікні (натисніть на посилання з маленькою " "стрілкою поруч з ”Нотатки для викладача”). У вас відкриється окреме вікно із " "замітками для викладача, в той час, як основне вікно ви можете демонструвати " "класу." #: src/running-the-course.md:24 msgid "" "Decide on the dates. Since the course takes at least three full days, we " "recommend that you schedule the days over two weeks. Course participants " "have said that they find it helpful to have a gap in the course since it " "helps them process all the information we give them." msgstr "" "Визначитись з датами. Оскільки курс вимагає щонайменше три дні, ми " "рекомендуємо вам запланувати три дні протягом двох тижнів. На наш досвід, " "учасники курсу вважають корисною наявність перерв, оскільки це допомагає їм " "краще осмислити інформацію." #: src/running-the-course.md:29 msgid "" "Find a room large enough for your in-person participants. We recommend a " "class size of 15-25 people. That's small enough that people are comfortable " "asking questions --- it's also small enough that one instructor will have " "time to answer the questions. Make sure the room has _desks_ for yourself " "and for the students: you will all need to be able to sit and work with your " "laptops. In particular, you will be doing a lot of live-coding as an " "instructor, so a lectern won't be very helpful for you." msgstr "" "Знайти приміщення досить просторе для очної участі. Ми рекомендуємо, щоб у " "класі було 15-20 чоловік. Це досить небагато для того, щоб людям було " "комфортно ставити запитання, а у викладача залишився час на те, щоб на них " "відповідати." #: src/running-the-course.md:37 msgid "" "On the day of your course, show up to the room a little early to set things " "up. We recommend presenting directly using `mdbook serve` running on your " "laptop (see the [installation instructions](https://github.com/google/" "comprehensive-rust#building)). This ensures optimal performance with no lag " "as you change pages. Using your laptop will also allow you to fix typos as " "you or the course participants spot them." msgstr "" "У день заняття приходьте в кімнату трохи раніше, щоби все підготувати. Ми " "рекомендуємо показувати слайди, використовуючи `mdbook serve`, запущеного на " "вашому ноутбуці (див. [installation instructions](https://github.com/google/" "comprehensive-rust#building)). Це забезпечує оптимальну продуктивність без " "затримок під час зміни сторінок. Використання ноутбука також дозволить вам " "виправляти друкарські помилки в міру їх виявлення вами або учасниками курсу." #: src/running-the-course.md:43 msgid "" "Let people solve the exercises by themselves or in small groups. We " "typically spend 30-45 minutes on exercises in the morning and in the " "afternoon (including time to review the solutions). Make sure to ask people " "if they're stuck or if there is anything you can help with. When you see " "that several people have the same problem, call it out to the class and " "offer a solution, e.g., by showing people where to find the relevant " "information in the standard library." msgstr "" "Дозвольте учасникам вирішувати вправи самостійно або у невеликих групах. " "Зазвичай ми приділяємо вправам по 30-45 хвилин вранці та у другій половині " "дня (включаючи час на розбір рішень). Обов'язково запитайте, чи не мають " "вони труднощів і чи є щось, з чим ви можете допомогти. Коли ви бачите, що у " "кількох людей одна і та ж проблема, повідомте про цей клас і запропонуйте " "рішення, наприклад, показавши, де знайти відповідну інформацію у стандартній " "бібліотеці." #: src/running-the-course.md:51 msgid "" "That is all, good luck running the course! We hope it will be as much fun " "for you as it has been for us!" msgstr "" "На цьому все, удачі у проходженні курсу! Ми сподіваємося, що вам буде так " "само весело, як і нам!" #: src/running-the-course.md:54 msgid "" "Please [provide feedback](https://github.com/google/comprehensive-rust/" "discussions/86) afterwards so that we can keep improving the course. We " "would love to hear what worked well for you and what can be made better. " "Your students are also very welcome to [send us feedback](https://github.com/" "google/comprehensive-rust/discussions/100)!" msgstr "" "Будь ласка, [залишіть відгук](https://github.com/google/comprehensive-rust/" "discussions/86), щоб ми могли продовжувати удосконалювати курс. Ми хотіли б " "почути, що було добре і що можна зробити краще. Ваші студенти також можуть " "[надіслати нам свої відгуки](https://github.com/google/comprehensive-rust/" "discussions/100)!" #: src/running-the-course/course-structure.md:5 msgid "Rust Fundamentals" msgstr "Основи Rust" #: src/running-the-course/course-structure.md:7 msgid "" "The first three days make up [Rust Fundaments](../welcome-day-1.md). The " "days are fast paced and we cover a lot of ground:" msgstr "" "Перші три дні складають [Основи Rust](../welcome-day-1.md). Дні " "швидкоплинні, і ми охоплюємо багато місць:" #: src/running-the-course/course-structure.md:10 msgid "Day 1: Basic Rust, syntax, control flow, creating and consuming values." msgstr "" "День 1: Базовий Rust, синтаксис, потік керування, створення та використання " "значень." #: src/running-the-course/course-structure.md:11 msgid "" "Day 2: Memory management, ownership, compound data types, and the standard " "library." msgstr "" "День 2: Управління пам’яттю, володіння, складові типи даних, стандартна " "бібліотека." #: src/running-the-course/course-structure.md:12 msgid "Day 3: Generics, traits, error handling, testing, and unsafe Rust." msgstr "" "День 3: Трейти та узагальнення, обробка помилок, тестування, небезпечний " "Rust." #: src/running-the-course/course-structure.md:14 msgid "Deep Dives" msgstr "Глибоке занурення" #: src/running-the-course/course-structure.md:16 msgid "" "In addition to the 3-day class on Rust Fundamentals, we cover some more " "specialized topics:" msgstr "" "На додаток до 3-денного курсу з основ Rust, ми розглянемо ще кілька " "спеціалізованих тем:" #: src/running-the-course/course-structure.md:19 msgid "Rust in Android" msgstr "Rust в Android" #: src/running-the-course/course-structure.md:21 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 " "C, C++, and Java." msgstr "" "[Rust в Android](../android.md) --- це напівденний курс з використання Rust " "для розробки на Android платформі. Сюди входить взаємодія з C, C++ та Java." #: src/running-the-course/course-structure.md:25 msgid "" "You will need an [AOSP checkout](https://source.android.com/docs/setup/" "download/downloading). Make a checkout of the [course repository](https://" "github.com/google/comprehensive-rust) on the same machine and move the `src/" "android/` directory into the root of your AOSP checkout. This will ensure " "that the Android build system sees the `Android.bp` files in `src/android/`." msgstr "" "Вам знадобиться [AOSP](https://source.android.com/docs/setup/download/" "downloading). Завантажте [репозиторій курсу](https://github.com/google/" "comprehensive-rust) на той же комп'ютер, що і курс і перемістіть каталог " "`src/android/` в кореневий каталог вашого AOSP. Це гарантує, що система " "збирання Android побачить файли `Android.bp` в `src/android/`." #: src/running-the-course/course-structure.md:30 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 " "see the commands it runs and make sure they work when you run them by hand." msgstr "" "Переконайтеся, що `adb sync` працює з вашим емулятором або реальним " "пристроєм, та попередньо зберіть усі приклади Android, використовуючи `src/" "android/build_all.sh`. Прочитайте скрипт, щоб побачити команди, які він " "запускає, і переконайтеся, що вони працюють, коли ви запускаєте їх вручну." #: src/running-the-course/course-structure.md:37 msgid "Bare-Metal Rust" msgstr "Rust на голому залізі" #: src/running-the-course/course-structure.md:39 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 " "application processors are covered." msgstr "" "[Rust на голому залізі](../bare-metal.md): заняття на повний день з " "використання Rust для низькорівневої (embedded) розробки. Розглядаються як " "мікроконтролери, так і прикладні процесори." #: src/running-the-course/course-structure.md:43 msgid "" "For the microcontroller part, you will need to buy the [BBC micro:bit]" "(https://microbit.org/) v2 development board ahead of time. Everybody will " "need to install a number of packages as described on the [welcome page](../" "bare-metal.md)." msgstr "" "Щодо частини мікроконтролерів, то вам потрібно буде заздалегідь придбати " "плату розробки [BBC micro:bit](https://microbit.org/) v2. Усім потрібно " "встановити кілька пакетів, як описано на [сторінці привітання](../bare-metal." "md)." #: src/running-the-course/course-structure.md:48 msgid "Concurrency in Rust" msgstr "Конкурентність в Rust" #: src/running-the-course/course-structure.md:50 msgid "" "The [Concurrency in Rust](../concurrency.md) deep dive is a full day class " "on classical as well as `async`/`await` concurrency." msgstr "" "[Конкурентність в Rust](../concurrency.md) це цілий день занять з класичної, " "а також `async`/`await` конкурентності." #: src/running-the-course/course-structure.md:53 msgid "" "You will need a fresh crate set up and the dependencies downloaded and ready " "to go. You can then copy/paste the examples into `src/main.rs` to experiment " "with them:" msgstr "" "Вам знадобиться налаштований новий крейт, а також завантажені залежності " "готові до роботи. Потім ви можете скопіювати приклади в `src/main.rs`, щоб " "поекспериментувати з ними:" #: src/running-the-course/course-structure.md:57 msgid "" "```shell\n" "cargo init concurrency\n" "cd concurrency\n" "cargo add tokio --features full\n" "cargo run\n" "```" msgstr "" #: src/running-the-course/course-structure.md:64 msgid "Format" msgstr "Формат" #: src/running-the-course/course-structure.md:66 msgid "" "The course is meant to be very interactive and we recommend letting the " "questions drive the exploration of Rust!" msgstr "" "Курс задуманий дуже інтерактивним, і ми рекомендуємо, щоб питання сприяли " "вивченню Rust!" #: 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:5 msgid "Arrow-Left" msgstr "Стрілка вліво" #: src/running-the-course/keyboard-shortcuts.md:5 msgid ": Navigate to the previous page." msgstr ": Перехід на попередню сторінку." #: src/running-the-course/keyboard-shortcuts.md:6 msgid "Arrow-Right" msgstr "Стрілка вправо" #: src/running-the-course/keyboard-shortcuts.md:6 msgid ": Navigate to the next page." msgstr ": Перехід до наступної сторінки." #: src/running-the-course/keyboard-shortcuts.md:7 src/cargo/code-samples.md:19 msgid "Ctrl + Enter" msgstr "Ctrl + Enter" #: src/running-the-course/keyboard-shortcuts.md:7 msgid ": Execute the code sample that has focus." msgstr ": Виконайте приклад коду, який знаходиться у фокусі." #: src/running-the-course/keyboard-shortcuts.md:8 msgid "s" msgstr "s" #: src/running-the-course/keyboard-shortcuts.md:8 msgid ": Activate the search bar." msgstr ": Активувати панель пошуку." #: 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:6 msgid "" "[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) " "by [@rastringer](https://github.com/rastringer), [@hugojacob](https://github." "com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes) and " "[@henrif75](https://github.com/henrif75)." msgstr "" "[Бразильска Португальська](https://google.github.io/comprehensive-rust/pt-" "BR/) від [@rastringer](https://github.com/rastringer) і [@hugojacob](https://" "github.com/hugojacob)." #: src/running-the-course/translations.md:7 msgid "" "[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]" "(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) and " "[@jooyunghan](https://github.com/jooyunghan)." msgstr "" "[Корейска](https://google.github.io/comprehensive-rust/ko/) від [@keispace]" "(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) і " "[@jooyunghan](https://github.com/jooyunghan).\\* \\[Українська\\]\\[ua\\] " "від \\[@git-user-cpp\\]." #: src/running-the-course/translations.md:9 msgid "" "Use the language picker in the top-right corner to switch between languages." msgstr "" "Використовуйте кнопку вибору мови у верхньому правому куті для перемикання " "між мовами." #: src/running-the-course/translations.md:11 msgid "Incomplete Translations" msgstr "Переклади" #: src/running-the-course/translations.md:13 msgid "" "There is a large number of in-progress translations. We link to the most " "recently updated translations:" msgstr "" "Існує велика кількість незавершених перекладів. Ми посилаємося на останні " "оновлені переклади:" #: src/running-the-course/translations.md:16 msgid "" "[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" "(https://github.com/raselmandol)." msgstr "" "[Бенгальська](https://google.github.io/comprehensive-rust/bn) від " "[@raselmandol](https://github.com/raselmandol)." #: src/running-the-course/translations.md:17 msgid "" "[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS]" "(https://github.com/KookaS) and [@vcaen](https://github.com/vcaen)." msgstr "" "[Французька](https://google.github.io/comprehensive-rust/fr/) від [@KookaS]" "(https://github.com/KookaS) і [@vcaen](https://github.com/vcaen)." #: src/running-the-course/translations.md:18 msgid "" "[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn]" "(https://github.com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)." msgstr "" "[Німецька](https://google.github.io/comprehensive-rust/de/) від [@Throvn]" "(https://github.com/Throvn) і [@ronaldfw](https://github.com/ronaldfw)." #: src/running-the-course/translations.md:19 msgid "" "[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN]" "(https://github.com/CoinEZ) and [@momotaro1105](https://github.com/" "momotaro1105)." msgstr "" "[Японьска](https://google.github.io/comprehensive-rust/ja/) від [@CoinEZ-JPN]" "(https://github.com/CoinEZ) і [@momotaro1105](https://github.com/" "momotaro1105)." #: src/running-the-course/translations.md:21 msgid "" "If you want to help with this effort, please see [our instructions](https://" "github.com/google/comprehensive-rust/blob/main/TRANSLATIONS.md) for how to " "get going. Translations are coordinated on the [issue tracker](https://" "github.com/google/comprehensive-rust/issues/282)." msgstr "" "Якщо ви хочете допомогти в цьому, будь ласка, ознайомтеся з [our " "instructions](https://github.com/google/comprehensive-rust/blob/main/" "TRANSLATIONS.md) про те, як розпочати роботу. Переклади координуються за " "допомогою [issue tracker](https://github.com/google/comprehensive-rust/" "issues/282)." #: src/cargo.md:3 msgid "" "When you start reading about Rust, you will soon meet [Cargo](https://doc." "rust-lang.org/cargo/), the standard tool used in the Rust ecosystem to build " "and run Rust applications. Here we want to give a brief overview of what " "Cargo is and how it fits into the wider ecosystem and how it fits into this " "training." msgstr "" "Коли ви почнете читати про Rust, то незабаром познайомитеся з [Cargo]" "(https://doc.rust-lang.org/cargo/), стандартним інструментом, що " "використовується в екосистемі Rust для створення та запуску програм. Тут ми " "хочемо дати короткий огляд того, що таке Cargo і як він вписується в ширшу " "екосистему і в цей курс." #: src/cargo.md:8 msgid "Installation" msgstr "Встановлення" #: src/cargo.md:10 msgid "**Please follow the instructions on .**" msgstr "**Дотримуйтесь інструкцій на .**" #: src/cargo.md:12 msgid "" "This will give you the Cargo build tool (`cargo`) and the Rust compiler " "(`rustc`). You will also get `rustup`, a command line utility that you can " "use to install/switch toolchains, setup cross compilation, etc." msgstr "" "Як результат, ви отримаэте інструмент побудови Cargo (`cargo`) та компілятор " "Rust (`rustc`). Поряд з `cargo` та `rustc`, буде встановлений `rustup` як " "утиліта командної стрічки, яку можна використовувати для встановлення/" "перемикання наборів інструментів, налаштування крос-компіляції і т.д." #: src/cargo.md:16 msgid "" "On Debian/Ubuntu, you can also install Cargo, the Rust source and the [Rust " "formatter](https://github.com/rust-lang/rustfmt) via `apt`. However, this " "gets you an outdated rust version and may lead to unexpected behavior. The " "command would be:" msgstr "" "У Debian/Ubuntu ви можете встановити Cargo, вихідний код Rust та [Rust " "formatter](https://github.com/rust-lang/rustfmt) за допомогою `apt`. Однак " "це може призвести до встановлення застарілої версії Rust і неочікуваної " "поведінки. Використовуйте таку команду: " #: src/cargo.md:18 msgid "" "```shell\n" "sudo apt install cargo rust-src rustfmt\n" "```" msgstr "" #: src/cargo.md:22 msgid "" "We suggest using [VS Code](https://code.visualstudio.com/) to edit the code " "(but any LSP compatible editor works with rust-analyzer[3](https://rust-" "analyzer.github.io/))." msgstr "" "Ми пропонуємо використовувати [VS Code](https://code.visualstudio.com/) для " "редагування коду (однак будь-який LSP сумісний редактор працює з rust-" "analyzer[3](https://rust-analyzer.github.io/)." #: src/cargo.md:24 msgid "" "Some folks also like to use the [JetBrains](https://www.jetbrains.com/" "clion/) family of IDEs, which do their own analysis but have their own " "tradeoffs. If you prefer them, you can install the [Rust Plugin](https://www." "jetbrains.com/rust/). Please take note that as of January 2023 debugging " "only works on the CLion version of the JetBrains IDEA suite." msgstr "" "Декому також подобається використовувати сімейство IDE [JetBrains](https://" "www.jetbrains.com/clion/), які виконують власний аналіз, але мають свої " "особливості. Якщо ви вважаєте за краще, ви можете встановити [Rust Plugin]" "(https://www.jetbrains.com/rust/). Зверніть увагу, що станом на січень 2023 " "року налагодження працює тільки в CLion." #: src/cargo/rust-ecosystem.md:1 msgid "The Rust Ecosystem" msgstr "Екосистема Rust" #: 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:5 msgid "" "`rustc`: the Rust compiler which turns `.rs` files into binaries and other " "intermediate formats." msgstr "" "`rustc`: компілятор Rust, який перетворює файли `.rs` на бінарні файли та " "інші проміжні формати." #: 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 " "pass them to `rustc` when building your project. Cargo also comes with a " "built-in test runner which is used to execute unit tests." msgstr "" "`cargo`: менеджер залежностей Rust та інструмент збірки. Cargo знає, як " "завантажити залежності, розміщені на , і передати їх " "`rustc` при збірці вашого проекту. Cargo також поставляється з вбудованим " "інструментом запуску тестів, який використовується для виконання модульних " "тестів." #: 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 is " "released. In addition, `rustup` can also download documentation for the " "standard library. You can have multiple versions of Rust installed at once " "and `rustup` will let you switch between them as needed." msgstr "" "`rustup`: програма встановлення та оновлення набору інструментів Rust. Цей " "інструмент використовується для встановлення та оновлення `rustc` і `cargo` " "при виході нових версій Rust. Окрім того, `rustup` також може завантажувати " "документацію стандартної бібліотеки. Ви можете встановити кілька версій Rust " "одночасно і `rustup` дозволить вам перемикатися між ними за необхідності." #: src/cargo/rust-ecosystem.md:21 src/hello-world.md:25 #: src/hello-world/small-example.md:27 src/why-rust/runtime.md:10 #: src/why-rust/modern.md:21 src/basic-syntax/compound-types.md:30 #: src/basic-syntax/references.md:23 #: src/pattern-matching/destructuring-enums.md:35 #: src/ownership/double-free-modern-cpp.md:55 #: src/error-handling/try-operator.md:48 #: src/error-handling/converting-error-types-example.md:50 #: src/concurrency/threads.md:30 src/async/async-await.md:25 msgid "Key points:" msgstr "Ключові моменти:" #: 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 --- " "plus they enable new functionality." msgstr "" "У Rust стрімкий графік релізів: нова версія виходить кожні шість тижнів. " "Нові версії підтримують зворотну сумісність із старими версіями --- на " "додаток вони надають нові функціональні можливості." #: 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:29 msgid "" "New features are being tested on \"nightly\", \"beta\" is what becomes " "\"stable\" every six weeks." msgstr "" "Нові функції тестуються на \"nightly\", \"beta\" --- це те, що стає " "\"stable\" кожні шість тижнів." #: src/cargo/rust-ecosystem.md:32 msgid "" "Dependencies can also be resolved from alternative [registries](https://doc." "rust-lang.org/cargo/reference/registries.html), git, folders, and more." msgstr "" "Залежності також можна вирішити за допомогою альтернативних [реєстрів]" "(https://doc.rust-lang.org/cargo/reference/registries.html), git, папок тощо." #: src/cargo/rust-ecosystem.md:34 msgid "" "Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the " "current edition is Rust 2021. Previous editions were Rust 2015 and Rust 2018." msgstr "" "Rust також має \\[редакції\\]: поточна редакція --- Rust 2021. Попередніми " "редакціями були Rust 2015 та Rust 2018." #: src/cargo/rust-ecosystem.md:37 msgid "" "The editions are allowed to make backwards incompatible changes to the " "language." msgstr "Редакціям дозволено вносити зворотно-несумісні зміни до мови." #: src/cargo/rust-ecosystem.md:40 msgid "" "To prevent breaking code, editions are opt-in: you select the edition for " "your crate via the `Cargo.toml` file." msgstr "" "Щоб уникнути збоїв, редакцію для свого пакета можна явно вказати у файлі " "`Cargo.toml`." #: src/cargo/rust-ecosystem.md:43 msgid "" "To avoid splitting the ecosystem, Rust compilers can mix code written for " "different editions." msgstr "" "Щоб уникнути поділу екосистеми, компілятор Rust може змішувати код, " "написаний для різних редакцій." #: src/cargo/rust-ecosystem.md:46 msgid "" "Mention that it is quite rare to ever use the compiler directly not through " "`cargo` (most users never do)." msgstr "" "Варто згадати, що використання компілятора безпосередньо, а не через " "`cargo`, є рідкісним явищем (більшість користувачів ніколи цього не роблять)." #: src/cargo/rust-ecosystem.md:48 msgid "" "It might be worth alluding that Cargo itself is an extremely powerful and " "comprehensive tool. It is capable of many advanced features including but " "not limited to: " msgstr "" "Cargo сам по собі є надзвичайно потужним і всеосяжним інструментом. Він " "підтримує безліч додаткових функцій, включаючи, крім іншого: " #: src/cargo/rust-ecosystem.md:49 msgid "Project/package structure" msgstr "Структуру проекту/пакета" #: src/cargo/rust-ecosystem.md:50 msgid "[workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)" msgstr "" "[робочі області](https://doc.rust-lang.org/cargo/reference/workspaces.html)" #: src/cargo/rust-ecosystem.md:51 msgid "Dev Dependencies and Runtime Dependency management/caching" msgstr "" "Управління/кешування залежностями для розробки (dev) та часу виконання " "(runtime)" #: src/cargo/rust-ecosystem.md:52 msgid "" "[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts." "html)" msgstr "" "[сценарії побудови](https://doc.rust-lang.org/cargo/reference/build-scripts." "html)" #: src/cargo/rust-ecosystem.md:53 msgid "" "[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install." "html)" msgstr "" "[глобальна установка](https://doc.rust-lang.org/cargo/commands/cargo-install." "html)" #: src/cargo/rust-ecosystem.md:54 msgid "" "It is also extensible with sub command plugins as well (such as [cargo " "clippy](https://github.com/rust-lang/rust-clippy))." msgstr "" "Він також розширюється за допомогою плагінів підкоманд (таких як [cargo " "clippy](https://github.com/rust-lang/rust-clippy))." #: src/cargo/rust-ecosystem.md:55 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:1 msgid "Code Samples in This Training" msgstr "Приклади коду в цьому курсі" #: 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 " "and ensures a consistent experience for everyone." msgstr "" "У цьому курсі ми в основному вивчатимемо мову Rust на прикладах, які можуть " "бути виконані у вашому браузері. Це значно спрощує налаштування та " "забезпечує однаковий досвід для всіх." #: 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 " "how to work with dependencies and for that you need Cargo." msgstr "" "Встановлення Cargo, як і раніше, рекомендується: це полегшить виконання " "вправ. В останній день ми виконаємо більш масштабну вправу, яка покаже вам " "як працювати із залежностями, і для цього вам знадобиться Cargo." #: src/cargo/code-samples.md:11 msgid "The code blocks in this course are fully interactive:" msgstr "Блоки коду в цьому курсі є повністю інтерактивними:" #: src/cargo/code-samples.md:13 msgid "" "```rust,editable\n" "fn main() {\n" " println!(\"Edit me!\");\n" "}\n" "```" msgstr "" #: src/cargo/code-samples.md:19 msgid "You can use " msgstr "Ви можете використовувати " #: src/cargo/code-samples.md:19 msgid " to execute the code when focus is in the text box." msgstr "" " для виконання коду, коли фокус введення знаходиться в текстовому полі." #: 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:" msgstr "" "Більшість прикладів коду доступні для редагування, як показано вище. Кілька " "прикладів коду недоступні для редагування з різних причин:" #: 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." msgstr "" "Вбудований у сторінку редактор коду не може запускати модульні тести. " "Скопіюйте код і відкрийте його в Rust Playground, щоб продемонструвати " "модульні тести." #: 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 " "using a local Rust installation or via the Playground." msgstr "" "Вбудовані в сторінку редактори коду втрачають свій стан у той момент, коли " "ви йдете зі сторінки! Саме з цієї причини учні повинні виконувати вправи, " "використовуючи локальну установку Rust або Rust Playground." #: src/cargo/running-locally.md:1 msgid "Running Code Locally with Cargo" msgstr "Запуск коду локально за допомогою Cargo" #: 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 " "Rust Book](https://doc.rust-lang.org/book/ch01-01-installation.html). This " "should give you a working `rustc` and `cargo`. At the time of writing, the " "latest stable Rust release has these version numbers:" msgstr "" "Якщо ви хочете поекспериментувати з кодом на своїй системі, то вам потрібно " "буде спочатку встановити Rust. Зробіть це, дотримуючись [інструкцій у The " "Rust Book](https://doc.rust-lang.org/book/ch01-01-installation.html). У " "вашій системі з'являться інструменти `rustc` та `cargo`. На момент написання " "статті останній стабільний випуск Rust має такі версії:" #: src/cargo/running-locally.md:8 msgid "" "```shell\n" "% rustc --version\n" "rustc 1.69.0 (84c898d65 2023-04-16)\n" "% cargo --version\n" "cargo 1.69.0 (6e9a83356 2023-04-12)\n" "```" msgstr "" #: src/cargo/running-locally.md:15 msgid "" "You can use any later version too since Rust maintains backwards " "compatibility." msgstr "" "Ви також можете використовувати будь-яку пізнішу версію, оскільки Rust " "підтримує зворотну сумісність." #: src/cargo/running-locally.md:17 msgid "" "With this in place, follow these steps to build a Rust binary from one of " "the examples in this training:" msgstr "" "Після цього виконайте такі кроки, щоб зібрати виконуваний файл на основі " "одного з прикладів у цьому курсі:" #: src/cargo/running-locally.md:20 msgid "Click the \"Copy to clipboard\" button on the example you want to copy." msgstr "" "Натисніть кнопку \"Copy to clipboard\" на прикладі коду, який потрібно " "скопіювати." #: src/cargo/running-locally.md:22 msgid "" "Use `cargo new exercise` to create a new `exercise/` directory for your code:" msgstr "" "Використовуйте `cargo new exercise`, щоб створити нову директорію `exercise/" "` для вашого коду:" #: src/cargo/running-locally.md:24 msgid "" "```shell\n" "$ cargo new exercise\n" " Created binary (application) `exercise` package\n" "```" msgstr "" "```shell\n" "$ cargo new exercise\n" " Created binary (application) `exercise` package\n" "```" #: src/cargo/running-locally.md:29 msgid "" "Navigate into `exercise/` and use `cargo run` to build and run your binary:" msgstr "" "Перейдіть в директорію `exercise/` і виконайте `cargo run` для побудови та " "запуску виконуваного файлу:" #: src/cargo/running-locally.md:31 msgid "" "```shell\n" "$ cd exercise\n" "$ cargo run\n" " Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)\n" " Finished dev [unoptimized + debuginfo] target(s) in 0.75s\n" " Running `target/debug/exercise`\n" "Hello, world!\n" "```" msgstr "" "```shell\n" "$ cd exercise\n" "$ cargo run\n" " Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)\n" " Finished dev [unoptimized + debuginfo] target(s) in 0.75s\n" " Running `target/debug/exercise`\n" "Hello, world!\n" "```" #: src/cargo/running-locally.md:40 msgid "" "Replace the boiler-plate code in `src/main.rs` with your own code. For " "example, using the example on the previous page, make `src/main.rs` look like" msgstr "" "Замініть шаблонний код у `src/main.rs` на свій код. Наприклад, " "використовуючи приклад коду з попередньої сторінки, зробіть `src/main.rs` " "схожим на" #: src/cargo/running-locally.md:43 msgid "" "```rust\n" "fn main() {\n" " println!(\"Edit me!\");\n" "}\n" "```" msgstr "" "```rust\n" "fn main() {\n" " println!(\"Edit me!\");\n" "}\n" "```" #: src/cargo/running-locally.md:49 msgid "Use `cargo run` to build and run your updated binary:" msgstr "" "Використовуйте `cargo run` для побудови та запуску оновленого виконуваного " "файлу:" #: src/cargo/running-locally.md:51 msgid "" "```shell\n" "$ cargo run\n" " Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)\n" " Finished dev [unoptimized + debuginfo] target(s) in 0.24s\n" " Running `target/debug/exercise`\n" "Edit me!\n" "```" msgstr "" "```shell\n" "$ cargo run\n" " Compiling exercise v0.1.0 (/home/mgeisler/tmp/exercise)\n" " Finished dev [unoptimized + debuginfo] target(s) in 0.24s\n" " Running `target/debug/exercise`\n" "Edit me!\n" "```" #: src/cargo/running-locally.md:59 msgid "" "Use `cargo check` to quickly check your project for errors, use `cargo " "build` to compile it without running it. You will find the output in `target/" "debug/` for a normal debug build. Use `cargo build --release` to produce an " "optimized release build in `target/release/`." msgstr "" "Використовуйте `cargo check` для швидкої перевірки проекту на наявність " "помилок і `cargo build` для компіляції проекту без його запуску. Ви " "знайдете результат у директорії `target/debug/` для налагоджувальної збірки. " "Використовуйте `cargo build --release` для створення оптимізованох фінальної " "збірки в `target/release/`." #: src/cargo/running-locally.md:64 msgid "" "You can add dependencies for your project by editing `Cargo.toml`. When you " "run `cargo` commands, it will automatically download and compile missing " "dependencies for you." msgstr "" "Ви можете додати залежності для вашого проекту, відредагувавши файл `Cargo." "toml`. Коли ви запустите команду `cargo`, вона автоматично завантажить і " "скомпілює відсутні залежності для вас." #: src/cargo/running-locally.md:72 msgid "" "Try to encourage the class participants to install Cargo and use a local " "editor. It will make their life easier since they will have a normal " "development environment." msgstr "" "Запропонуйте учасникам заняття встановити Cargo та використовувати локальний " "редактор. Це полегшить їм життя, тому що у них буде відповідне середовище " "розробки." #: src/welcome-day-1.md:1 msgid "Welcome to Day 1" msgstr "Ласкаво просимо до Дня 1" #: src/welcome-day-1.md:3 msgid "" "This is the first day of Rust Fundamentals. We will cover a lot of ground " "today:" msgstr "" "Це перший день Rust Fundamentals. Сьогодні ми розглянемо багато питань:" #: src/welcome-day-1.md:6 msgid "" "Basic Rust syntax: variables, scalar and compound types, enums, structs, " "references, functions, and methods." msgstr "" "Базовий синтаксис Rust: змінні, скалярні та складені типи, переліки, " "структури, посилання, функції та методи." #: src/welcome-day-1.md:9 msgid "" "Control flow constructs: `if`, `if let`, `while`, `while let`, `break`, and " "`continue`." msgstr "" "Конструкції потоку керування: `if`, `if let`, `while`, `while let`, `break` " "і `continue`." #: src/welcome-day-1.md:12 msgid "Pattern matching: destructuring enums, structs, and arrays." msgstr "Зіставлення шаблонів: деструктурування переліків, структур і масивів." #: src/welcome-day-1.md:16 msgid "Please remind the students that:" msgstr "Нагадайте учням, що:" #: src/welcome-day-1.md:18 msgid "" "They should ask questions when they get them, don't save them to the end." msgstr "" "Вони повинні задавати питання, коли вони їх отримають, не зберігайте їх до " "кінця." #: src/welcome-day-1.md:19 msgid "" "The class is meant to be interactive and discussions are very much " "encouraged!" msgstr "Клас має бути інтерактивним, тому дискусії дуже заохочуються!" #: src/welcome-day-1.md:20 msgid "" "As an instructor, you should try to keep the discussions relevant, i.e., " "keep the discussions related to how Rust does things vs some other " "language. It can be hard to find the right balance, but err on the side of " "allowing discussions since they engage people much more than one-way " "communication." msgstr "" "Як інструктор, ви повинні намагатися підтримувати обговорення актуальними, " "тобто підтримувати обговорення, пов’язані з тим, як Rust щось робить проти " "іншої мови. Може бути важко знайти правильний баланс, але дозвольте " "обговорення, оскільки вони залучають людей набагато більше, ніж одностороннє " "спілкування." #: src/welcome-day-1.md:24 msgid "" "The questions will likely mean that we talk about things ahead of the slides." msgstr "" "Запитання, швидше за все, означатимуть, що ми обговорюємо речі напередодні " "слайдів." #: src/welcome-day-1.md:25 msgid "" "This is perfectly okay! Repetition is an important part of learning. " "Remember that the slides are just a support and you are free to skip them as " "you like." msgstr "" "Це цілком нормально! Повторення є важливою частиною навчання. Пам’ятайте, що " "слайди є лише підтримкою, і ви можете пропускати їх, як забажаєте." #: src/welcome-day-1.md:29 msgid "" "The idea for the first day is to show _just enough_ of Rust to be able to " "speak about the famous borrow checker. The way Rust handles memory is a " "major feature and we should show students this right away." msgstr "" "Ідея першого дня полягає в тому, щоб показати _рівно стільки_ Rust, щоб " "можна було говорити про знамениту перевірку позик. Те, як Rust обробляє " "пам’ять, є головною особливістю, і ми повинні негайно показати це студентам." #: src/welcome-day-1.md:33 msgid "" "If you're teaching this in a classroom, this is a good place to go over the " "schedule. We suggest splitting the day into two parts (following the slides):" msgstr "" "Якщо ви викладаєте це в класі, це гарне місце, щоб переглянути розклад. " "Пропонуємо розділити день на дві частини (за слайдами):" #: src/welcome-day-1.md:36 msgid "Morning: 9:00 to 12:00," msgstr "Ранок: з 9:00 до 12:00," #: src/welcome-day-1.md:37 msgid "Afternoon: 13:00 to 16:00." msgstr "Післяобідній час: з 13:00 до 16:00." #: src/welcome-day-1.md:39 msgid "" "You can of course adjust this as necessary. Please make sure to include " "breaks, we recommend a break every hour!" msgstr "" "Ви, звичайно, можете налаштувати це за потреби. Будь ласка, обов’язково " "передбачте перерви, ми рекомендуємо перерву щогодини!" #: src/welcome-day-1/what-is-rust.md:3 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):" msgstr "" "Rust — це нова мова програмування, яка випустила [1.0 у 2015 році](https://" "blog.rust-lang.org/2015/05/15/Rust-1.0.html):" #: src/welcome-day-1/what-is-rust.md:5 msgid "Rust is a statically compiled language in a similar role as C++" msgstr "" "Rust — це статично скомпільована мова, яка виконує таку саму роль, як C++" #: src/welcome-day-1/what-is-rust.md:6 msgid "`rustc` uses LLVM as its backend." msgstr "`rustc` використовує LLVM як серверну частину." #: src/welcome-day-1/what-is-rust.md:7 msgid "" "Rust supports many [platforms and architectures](https://doc.rust-lang.org/" "nightly/rustc/platform-support.html):" msgstr "" "Rust підтримує багато [платформ і архітектур](https://doc.rust-lang.org/" "nightly/rustc/platform-support.html):" #: src/welcome-day-1/what-is-rust.md:9 msgid "x86, ARM, WebAssembly, ..." msgstr "x86, ARM, WebAssembly, ..." #: src/welcome-day-1/what-is-rust.md:10 msgid "Linux, Mac, Windows, ..." msgstr "Linux, Mac, Windows, ..." #: src/welcome-day-1/what-is-rust.md:11 msgid "Rust is used for a wide range of devices:" msgstr "Rust використовується для широкого спектру пристроїв:" #: src/welcome-day-1/what-is-rust.md:12 msgid "firmware and boot loaders," msgstr "прошивки та завантажувачі," #: src/welcome-day-1/what-is-rust.md:13 msgid "smart displays," msgstr "розумні дисплеї," #: src/welcome-day-1/what-is-rust.md:14 msgid "mobile phones," msgstr "мобільні телефони," #: src/welcome-day-1/what-is-rust.md:15 msgid "desktops," msgstr "робочі столи," #: src/welcome-day-1/what-is-rust.md:16 msgid "servers." msgstr "серверів." #: src/welcome-day-1/what-is-rust.md:21 msgid "Rust fits in the same area as C++:" msgstr "Rust відповідає тій самій області, що й C++:" #: src/welcome-day-1/what-is-rust.md:23 msgid "High flexibility." msgstr "Висока гнучкість." #: src/welcome-day-1/what-is-rust.md:24 msgid "High level of control." msgstr "Високий рівень контролю." #: src/welcome-day-1/what-is-rust.md:25 msgid "" "Can be scaled down to very constrained devices such as microcontrollers." msgstr "Можна зменшити до дуже обмежених пристроїв, таких як мікроконтролери." #: src/welcome-day-1/what-is-rust.md:26 msgid "Has no runtime or garbage collection." msgstr "Не має часу виконання або збирання сміття." #: src/welcome-day-1/what-is-rust.md:27 msgid "Focuses on reliability and safety without sacrificing performance." msgstr "Зосереджено на надійності та безпеці без шкоди для продуктивності." #: src/hello-world.md:3 msgid "" "Let us jump into the simplest possible Rust program, a classic Hello World " "program:" msgstr "" "Перейдемо до найпростішої програми Rust, класичної програми Hello World:" #: src/hello-world.md:6 msgid "" "```rust,editable\n" "fn main() {\n" " println!(\"Hello 🌍!\");\n" "}\n" "```" msgstr "" #: src/hello-world.md:12 msgid "What you see:" msgstr "Що ти бачиш:" #: src/hello-world.md:14 msgid "Functions are introduced with `fn`." msgstr "Функції вводяться за допомогою `fn`." #: src/hello-world.md:15 msgid "Blocks are delimited by curly braces like in C and C++." msgstr "Блоки розділені фігурними дужками, як у C і C++." #: src/hello-world.md:16 msgid "The `main` function is the entry point of the program." msgstr "Функція `main` є точкою входу в програму." #: src/hello-world.md:17 msgid "Rust has hygienic macros, `println!` is an example of this." msgstr "Rust має гігієнічні макроси, `println!` є прикладом цього." #: src/hello-world.md:18 msgid "Rust strings are UTF-8 encoded and can contain any Unicode character." msgstr "" "Рядки Rust мають кодування UTF-8 і можуть містити будь-які символи Unicode." #: src/hello-world.md:22 msgid "" "This slide tries to make the students comfortable with Rust code. They will " "see a ton of it over the next three days so we start small with something " "familiar." msgstr "" "Цей слайд спрямований на те, щоб студенти звикли працювати з кодом Rust. " "Вони побачать масу цього протягом наступних трьох днів, тож ми починаємо з " "малого з чогось знайомого." #: src/hello-world.md:27 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.md:31 msgid "Rust is modern with full support for things like Unicode." msgstr "Rust сучасний із повною підтримкою таких речей, як Unicode." #: src/hello-world.md:33 msgid "" "Rust uses macros for situations where you want to have a variable number of " "arguments (no function [overloading](basic-syntax/functions-interlude.md))." msgstr "" "Rust використовує макроси для ситуацій, коли потрібно мати змінну кількість " "аргументів (немає функції [перевантаження](basic-syntax/functions-interlude." "md))." #: src/hello-world.md:36 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.md:40 msgid "" "Rust is multi-paradigm. For example, it has powerful [object-oriented " "programming features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, " "while it is not a functional language, it includes a range of [functional " "concepts](https://doc.rust-lang.org/book/ch13-00-functional-features.html)." msgstr "" "Іржа є мультипарадигмою. Наприклад, він має потужні [функції об’єктно-" "орієнтованого програмування](https://doc.rust-lang.org/book/ch17-00-oop." "html), і, хоча це не функціональна мова, він включає діапазон " "[функціональних понять](https://doc.rust-lang.org/book/ch13-00-functional-" "features.html)." #: src/hello-world/small-example.md:3 msgid "Here is a small example program in Rust:" msgstr "Ось невеликий приклад програми в Rust:" #: src/hello-world/small-example.md:5 msgid "" "```rust,editable\n" "fn main() { // Program entry point\n" " let mut x: i32 = 6; // Mutable variable binding\n" " print!(\"{x}\"); // Macro for printing, like printf\n" " while x != 1 { // No parenthesis around expression\n" " if x % 2 == 0 { // Math like in other languages\n" " x = x / 2;\n" " } else {\n" " x = 3 * x + 1;\n" " }\n" " print!(\" -> {x}\");\n" " }\n" " println!();\n" "}\n" "```" msgstr "" #: src/hello-world/small-example.md:23 msgid "" "The code implements the Collatz conjecture: it is believed that the loop " "will always end, but this is not yet proved. Edit the code and play with " "different inputs." msgstr "" "Код реалізує гіпотезу Коллатца: вважається, що цикл завжди закінчується, але " "це ще не доведено. Редагуйте код і грайте з різними введеннями." #: src/hello-world/small-example.md:29 msgid "" "Explain that all variables are statically typed. Try removing `i32` to " "trigger type inference. Try with `i8` instead and trigger a runtime integer " "overflow." msgstr "" "Поясніть, що всі змінні мають статичний тип. Спробуйте видалити `i32`, щоб " "активувати визначення типу. Натомість спробуйте використати `i8` і запустіть " "цілочисельне переповнення під час виконання." #: src/hello-world/small-example.md:32 msgid "Change `let mut x` to `let x`, discuss the compiler error." msgstr "Змініть `let mut x` на `let x`, обговоріть помилку компілятора." #: src/hello-world/small-example.md:34 msgid "" "Show how `print!` gives a compilation error if the arguments don't match the " "format string." msgstr "" "Покажіть, як `print!` видає помилку компіляції, якщо аргументи не " "відповідають рядку формату." #: src/hello-world/small-example.md:37 msgid "" "Show how you need to use `{}` as a placeholder if you want to print an " "expression which is more complex than just a single variable." msgstr "" "Покажіть, як вам потрібно використовувати `{}` як заповнювач, якщо ви хочете " "надрукувати вираз, складніший за одну змінну." #: src/hello-world/small-example.md:40 msgid "" "Show the students the standard library, show them how to search for `std::" "fmt` which has the rules of the formatting mini-language. It's important " "that the students become familiar with searching in the standard library." msgstr "" "Покажіть студентам стандартну бібліотеку, покажіть їм, як шукати `std::fmt`, " "який містить правила міні-мови форматування. Важливо, щоб учні ознайомилися " "з пошуком у стандартній бібліотеці." #: src/hello-world/small-example.md:44 msgid "" "In a shell `rustup doc std::fmt` will open a browser on the local std::fmt " "documentation" msgstr "" "У оболонці `rustup doc std::fmt` відкриє браузер локальної документації std::" "fmt" #: src/why-rust.md:3 msgid "Some unique selling points of Rust:" msgstr "Деякі унікальні переваги Rust:" #: src/why-rust.md:5 msgid "Compile time memory safety." msgstr "Безпека пам'яті часу компіляції." #: src/why-rust.md:6 msgid "Lack of undefined runtime behavior." msgstr "Відсутність невизначеної поведінки під час виконання." #: src/why-rust.md:7 msgid "Modern language features." msgstr "Сучасні мовні особливості." #: src/why-rust.md:11 msgid "" "Make sure to ask the class which languages they have experience with. " "Depending on the answer you can highlight different features of Rust:" msgstr "" "Обов’язково запитайте в класу, якими мовами вони мають досвід. Залежно від " "відповіді ви можете виділити різні функції Rust:" #: src/why-rust.md:14 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 " "have the memory unsafety issues. In addition, you get a modern language with " "constructs like pattern matching and built-in dependency management." msgstr "" "Досвід роботи з C або C++: Rust усуває цілий клас _помилок виконання_ за " "допомогою засобу перевірки запозичень. Ви отримуєте продуктивність, як у C і " "C++, але у вас немає проблем із небезпекою пам’яті. Крім того, ви отримуєте " "сучасну мову з такими конструкціями, як зіставлення шаблонів і вбудоване " "керування залежностями." #: src/why-rust.md:19 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)" msgstr "" "Досвід роботи з Java, Go, Python, JavaScript...: Ви отримуєте таку саму " "безпеку пам’яті, що й у цих мовах, а також подібне відчуття мови високого " "рівня. Крім того, ви отримуєте швидку та передбачувану продуктивність, як-от " "C і C++ (без збирача сміття), а також доступ до апаратного забезпечення " "низького рівня (якщо воно вам знадобиться)" #: src/why-rust/compile-time.md:3 msgid "Static memory management at compile time:" msgstr "Керування статичною пам'яттю під час компіляції:" #: src/why-rust/compile-time.md:5 msgid "No uninitialized variables." msgstr "Немає неініціалізованих змінних." #: src/why-rust/compile-time.md:6 msgid "No memory leaks (_mostly_, see notes)." msgstr "Немає витоків пам'яті (_переважно_, див. примітки)." #: src/why-rust/compile-time.md:7 msgid "No double-frees." msgstr "Ніяких подвійних звільнень." #: src/why-rust/compile-time.md:8 msgid "No use-after-free." msgstr "Без використання після безкоштовного використання." #: src/why-rust/compile-time.md:9 msgid "No `NULL` pointers." msgstr "Немає вказівників `NULL`." #: src/why-rust/compile-time.md:10 msgid "No forgotten locked mutexes." msgstr "Немає забутих заблокованих м'ютексів." #: src/why-rust/compile-time.md:11 msgid "No data races between threads." msgstr "Немає перегонів даних між потоками." #: src/why-rust/compile-time.md:12 msgid "No iterator invalidation." msgstr "Немає недійсності ітератора." #: src/why-rust/compile-time.md:16 msgid "" "It is possible to produce memory leaks in (safe) Rust. Some examples are:" msgstr "У (безпечному) Rust можливі витоки пам’яті. Деякі приклади:" #: src/why-rust/compile-time.md:19 msgid "" "You can use [`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box." "html#method.leak) to leak a pointer. A use of this could be to get runtime-" "initialized and runtime-sized static variables" msgstr "" "Ви можете використовувати [`Box::leak`](https://doc.rust-lang.org/std/boxed/" "struct.Box.html#method.leak) для витоку покажчика. Це може бути використано " "для отримання статичних змінних, ініціалізованих під час виконання та " "розміром під час виконання" #: src/why-rust/compile-time.md:21 msgid "" "You can use [`std::mem::forget`](https://doc.rust-lang.org/std/mem/fn.forget." "html) to make the compiler \"forget\" about a value (meaning the destructor " "is never run)." msgstr "" "Ви можете використовувати [`std::mem::forget`](https://doc.rust-lang.org/std/" "mem/fn.forget.html), щоб змусити компілятор «забути» про значення (тобто " "деструктор ніколи не запускається)." #: src/why-rust/compile-time.md:23 msgid "" "You can also accidentally create a [reference cycle](https://doc.rust-lang." "org/book/ch15-06-reference-cycles.html) with `Rc` or `Arc`." msgstr "" "Ви також можете випадково створити [довідковий цикл](https://doc.rust-lang." "org/book/ch15-06-reference-cycles.html) за допомогою `Rc` або `Arc`." #: src/why-rust/compile-time.md:25 msgid "" "In fact, some will consider infinitely populating a collection a memory leak " "and Rust does not protect from those." msgstr "" "Фактично, дехто вважатиме нескінченне заповнення колекції витоком пам’яті, а " "Rust від цього не захищає." #: src/why-rust/compile-time.md:28 msgid "" "For the purpose of this course, \"No memory leaks\" should be understood as " "\"Pretty much no _accidental_ memory leaks\"." msgstr "" "Для цілей цього курсу «Немає витоків пам’яті» слід розуміти як «Практично " "немає _випадкових_ витоків пам’яті»." #: src/why-rust/runtime.md:3 msgid "No undefined behavior at runtime:" msgstr "Немає невизначеної поведінки під час виконання:" #: src/why-rust/runtime.md:5 msgid "Array access is bounds checked." msgstr "Доступ до масиву перевірено на межі." #: src/why-rust/runtime.md:6 msgid "Integer overflow is defined (panic or wrap-around)." msgstr "Визначається цілочисельне переповнення (паніка або обертання)." #: src/why-rust/runtime.md:12 msgid "" "Integer overflow is defined via the [`overflow-checks`](https://doc.rust-" "lang.org/rustc/codegen-options/index.html#overflow-checks) compile-time " "flag. If enabled, the program will panic (a controlled crash of the " "program), otherwise you get wrap-around semantics. By default, you get " "panics in debug mode (`cargo build`) and wrap-around in release mode (`cargo " "build --release`)." msgstr "" "Цілочисельне переповнення визначається за допомогою позначки [`overflow-" "checks`](https://doc.rust-lang.org/rustc/codegen-options/index.html#overflow-" "checks) під час компіляції. Якщо ввімкнути, програма виникне паніка " "(контрольований збій програми), інакше ви отримаєте семантику обертання. За " "замовчуванням ви отримуєте паніку в режимі налагодження (`cargo build`) і " "обертання в режимі випуску (`cargo build --release`)." #: src/why-rust/runtime.md:18 msgid "" "Bounds checking cannot be disabled with a compiler flag. It can also not be " "disabled directly with the `unsafe` keyword. However, `unsafe` allows you to " "call functions such as `slice::get_unchecked` which does not do bounds " "checking." msgstr "" "Перевірку меж не можна вимкнути за допомогою позначки компілятора. Його " "також не можна вимкнути безпосередньо за допомогою ключового слова `unsafe`. " "Однак `unsafe` дозволяє викликати такі функції, як `slice::get_unchecked`, " "яка не виконує перевірку меж." #: src/why-rust/modern.md:3 msgid "Rust is built with all the experience gained in the last decades." msgstr "Rust будується з усім досвідом, набутим за останні десятиліття." #: src/why-rust/modern.md:5 msgid "Language Features" msgstr "Особливості мови" #: src/why-rust/modern.md:7 msgid "Enums and pattern matching." msgstr "Переліки та зіставлення шаблонів." #: src/why-rust/modern.md:8 msgid "Generics." msgstr "Дженерики." #: src/why-rust/modern.md:9 msgid "No overhead FFI." msgstr "Без накладних FFI." #: src/why-rust/modern.md:10 msgid "Zero-cost abstractions." msgstr "Абстракції без витрат." #: src/why-rust/modern.md:12 msgid "Tooling" msgstr "Інструменти" #: src/why-rust/modern.md:14 msgid "Great compiler errors." msgstr "Великі помилки компілятора." #: src/why-rust/modern.md:15 msgid "Built-in dependency manager." msgstr "Вбудований менеджер залежностей." #: src/why-rust/modern.md:16 msgid "Built-in support for testing." msgstr "Вбудована підтримка тестування." #: src/why-rust/modern.md:17 msgid "Excellent Language Server Protocol support." msgstr "Чудова підтримка протоколу мовного сервера." #: src/why-rust/modern.md:23 msgid "" "Zero-cost abstractions, similar to C++, means that you don't have to 'pay' " "for higher-level programming constructs with memory or CPU. For example, " "writing a loop using `for` should result in roughly the same low level " "instructions as using the `.iter().fold()` construct." msgstr "" "Абстракції з нульовою вартістю, подібні до C++, означають, що вам не " "потрібно «платити» за конструкції програмування вищого рівня за допомогою " "пам’яті чи процесора. Наприклад, написання циклу за допомогою `for` має " "призвести до приблизно тих самих інструкцій низького рівня, що й " "використання конструкції `.iter().fold()`." #: src/why-rust/modern.md:28 msgid "" "It may be worth mentioning that Rust enums are 'Algebraic Data Types', also " "known as 'sum types', which allow the type system to express things like " "`Option` and `Result`." msgstr "" "Можливо, варто згадати, що переліки Rust — це «алгебраїчні типи даних», " "також відомі як «типи сум», які дозволяють системі типів виражати такі речі, " "як «Option» і «Result»." #: src/why-rust/modern.md:32 msgid "" "Remind people to read the errors --- many developers have gotten used to " "ignore lengthy compiler output. The Rust compiler is significantly more " "talkative than other compilers. It will often provide you with _actionable_ " "feedback, ready to copy-paste into your code." msgstr "" "Нагадайте людям прочитати помилки --- багато розробників звикли ігнорувати " "довгий вихід компілятора. Компілятор Rust значно балакучіший, ніж інші " "компілятори. Він часто надає вам _дієві_ відгуки, готові скопіювати та " "вставити у ваш код." #: src/why-rust/modern.md:37 msgid "" "The Rust standard library is small compared to languages like Java, Python, " "and Go. Rust does not come with several things you might consider standard " "and essential:" msgstr "" "Стандартна бібліотека Rust невелика порівняно з такими мовами, як Java, " "Python і Go. У Rust немає кількох речей, які ви можете вважати стандартними " "та важливими:" #: src/why-rust/modern.md:41 msgid "a random number generator, but see [rand](https://docs.rs/rand/)." msgstr "генератор випадкових чисел, але див. [rand](https://docs.rs/rand/)." #: src/why-rust/modern.md:42 msgid "support for SSL or TLS, but see [rusttls](https://docs.rs/rustls/)." msgstr "підтримка SSL або TLS, але див. [rusttls](https://docs.rs/rustls/)." #: src/why-rust/modern.md:43 msgid "support for JSON, but see [serde_json](https://docs.rs/serde_json/)." msgstr "підтримка JSON, але див. [serde_json](https://docs.rs/serde_json/)." #: src/why-rust/modern.md:45 msgid "" "The reasoning behind this is that functionality in the standard library " "cannot go away, so it has to be very stable. For the examples above, the " "Rust community is still working on finding the best solution --- and perhaps " "there isn't a single \"best solution\" for some of these things." msgstr "" "Причиною цього є те, що функціональність стандартної бібліотеки не може " "зникнути, тому вона має бути дуже стабільною. Для наведених вище прикладів " "спільнота Rust все ще працює над пошуком найкращого рішення --- і, можливо, " "для деяких із цих речей не існує єдиного \"найкращого рішення\"." #: src/why-rust/modern.md:50 msgid "" "Rust comes with a built-in package manager in the form of Cargo and this " "makes it trivial to download and compile third-party crates. A consequence " "of this is that the standard library can be smaller." msgstr "" "Rust постачається з вбудованим менеджером пакунків у формі Cargo, і це " "спрощує завантаження та компіляцію ящиків сторонніх розробників. Наслідком " "цього є те, що стандартна бібліотека може бути меншою." #: src/why-rust/modern.md:54 msgid "" "Discovering good third-party crates can be a problem. Sites like help with this by letting you compare health metrics for crates to " "find a good and trusted one." msgstr "" "Виявлення хороших ящиків сторонніх виробників може бути проблемою. Такі " "сайти, як , допомагають у цьому, дозволяючи порівнювати " "показники здоров’я ящиків, щоб знайти хороший і надійний." #: src/why-rust/modern.md:58 msgid "" "[rust-analyzer](https://rust-analyzer.github.io/) is a well supported LSP " "implementation used in major IDEs and text editors." msgstr "" "[rust-analyzer](https://rust-analyzer.github.io/) — це добре підтримувана " "реалізація LSP, яка використовується в основних IDE і текстових редакторах." #: src/basic-syntax.md:3 msgid "Much of the Rust syntax will be familiar to you from C, C++ or Java:" msgstr "Значна частина синтаксису Rust буде вам знайома з C, C++ або Java:" #: src/basic-syntax.md:5 msgid "Blocks and scopes are delimited by curly braces." msgstr "Блоки та області поділяються фігурними дужками." #: src/basic-syntax.md:6 msgid "" "Line comments are started with `//`, block comments are delimited by `/* ... " "*/`." msgstr "" "Коментарі до рядків починаються з `//`, коментарі до блоків відокремлюються " "`/* ... */`." #: src/basic-syntax.md:8 msgid "Keywords like `if` and `while` work the same." msgstr "Такі ключові слова, як «якщо» та «поки» працюють однаково." #: src/basic-syntax.md:9 msgid "Variable assignment is done with `=`, comparison is done with `==`." msgstr "" "Присвоєння змінної виконується за допомогою `=`, порівняння — за допомогою " "`==`." #: src/basic-syntax/scalar-types.md:3 src/basic-syntax/compound-types.md:3 #: src/exercises/day-3/safe-ffi-wrapper.md:16 msgid "Types" msgstr "Типи" #: src/basic-syntax/scalar-types.md:3 src/basic-syntax/compound-types.md:3 msgid "Literals" msgstr "Літерали" #: src/basic-syntax/scalar-types.md:5 msgid "Signed integers" msgstr "Цілі числа зі знаком" #: src/basic-syntax/scalar-types.md:5 msgid "`i8`, `i16`, `i32`, `i64`, `i128`, `isize`" msgstr "`i8`, `i16`, `i32`, `i64`, `i128`, `isize`" #: src/basic-syntax/scalar-types.md:5 msgid "`-10`, `0`, `1_000`, `123_i64`" msgstr "\"-10\", \"0\", \"1_000\", \"123_i64\"" #: src/basic-syntax/scalar-types.md:6 msgid "Unsigned integers" msgstr "Беззнакові цілі числа" #: src/basic-syntax/scalar-types.md:6 msgid "`u8`, `u16`, `u32`, `u64`, `u128`, `usize`" msgstr "`u8`, `u16`, `u32`, `u64`, `u128`, `usize`" #: src/basic-syntax/scalar-types.md:6 msgid "`0`, `123`, `10_u16`" msgstr "`0`, `123`, `10_u16`" #: src/basic-syntax/scalar-types.md:7 msgid "Floating point numbers" msgstr "Числа з плаваючою комою" #: src/basic-syntax/scalar-types.md:7 msgid "`f32`, `f64`" msgstr "`f32`, `f64`" #: src/basic-syntax/scalar-types.md:7 msgid "`3.14`, `-10.0e20`, `2_f32`" msgstr "`3.14`, `-10.0e20`, `2_f32`" #: src/basic-syntax/scalar-types.md:8 msgid "Strings" msgstr "рядки" #: src/basic-syntax/scalar-types.md:8 msgid "`&str`" msgstr "`&str`" #: src/basic-syntax/scalar-types.md:8 msgid "`\"foo\"`, `\"two\\nlines\"`" msgstr "`\"foo\"`, `\"два\\nрядки\"`" #: src/basic-syntax/scalar-types.md:9 msgid "Unicode scalar values" msgstr "Скалярні значення Unicode" #: src/basic-syntax/scalar-types.md:9 msgid "`char`" msgstr "`char`" #: src/basic-syntax/scalar-types.md:9 msgid "`'a'`, `'α'`, `'∞'`" msgstr "`'a'`, `'α'`, `'∞'`" #: src/basic-syntax/scalar-types.md:10 msgid "Booleans" msgstr "Логічні значення" #: src/basic-syntax/scalar-types.md:10 msgid "`bool`" msgstr "`bool`" #: src/basic-syntax/scalar-types.md:10 msgid "`true`, `false`" msgstr "`true`, `false`" #: src/basic-syntax/scalar-types.md:12 msgid "The types have widths as follows:" msgstr "Типи мають наступну ширину:" #: src/basic-syntax/scalar-types.md:14 msgid "`iN`, `uN`, and `fN` are _N_ bits wide," msgstr "`iN`, `uN` і `fN` мають ширину _N_ біт," #: src/basic-syntax/scalar-types.md:15 msgid "`isize` and `usize` are the width of a pointer," msgstr "`isize` і `usize` – це ширина покажчика," #: src/basic-syntax/scalar-types.md:16 msgid "`char` is 32 bits wide," msgstr "`char` має ширину 32 біти," #: src/basic-syntax/scalar-types.md:17 msgid "`bool` is 8 bits wide." msgstr "`bool` має ширину 8 біт." #: src/basic-syntax/scalar-types.md:21 msgid "There are a few syntaxes which are not shown above:" msgstr "Є кілька синтаксисів, які не показано вище:" #: src/basic-syntax/scalar-types.md:23 msgid "" "Raw strings allow you to create a `&str` value with escapes disabled: " "`r\"\\n\" == \"\\\\n\"`. You can embed double-quotes by using an equal " "amount of `#` on either side of the quotes:" msgstr "" "Необроблені рядки дозволяють створювати значення `&str` з вимкненими " "екранами: `r\"\\n\" == \"\\\\n\"`. Ви можете вставити подвійні лапки, " "використовуючи однакову кількість `#` з обох боків лапок:" #: src/basic-syntax/scalar-types.md:27 msgid "" "```rust,editable\n" "fn main() {\n" " println!(r#\"link\"#);\n" " println!(\"link\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/scalar-types.md:34 msgid "Byte strings allow you to create a `&[u8]` value directly:" msgstr "Рядки байтів дозволяють безпосередньо створювати значення `&[u8]`:" #: src/basic-syntax/scalar-types.md:36 msgid "" "```rust,editable\n" "fn main() {\n" " println!(\"{:?}\", b\"abc\");\n" " println!(\"{:?}\", &[97, 98, 99]);\n" "}\n" "```" msgstr "" #: src/basic-syntax/scalar-types.md:43 msgid "" "All underscores in numbers can be left out, they are for legibility only. So " "`1_000` can be written as `1000` (or `10_00`), and `123_i64` can be written " "as `123i64`." msgstr "" "Усі підкреслення в цифрах можна опускати, вони призначені лише для " "розбірливості. Отже, `1_000` можна записати як `1000` (або `10_00`), а " "`123_i64` можна записати як `123i64`." #: src/basic-syntax/compound-types.md:5 msgid "Arrays" msgstr "Масиви" #: src/basic-syntax/compound-types.md:5 msgid "`[T; N]`" msgstr "" #: src/basic-syntax/compound-types.md:5 msgid "`[20, 30, 40]`, `[0; 3]`" msgstr "" #: src/basic-syntax/compound-types.md:6 msgid "Tuples" msgstr "Кортежі" #: src/basic-syntax/compound-types.md:6 msgid "`()`, `(T,)`, `(T1, T2)`, ..." msgstr "\"()\", \"(T,)\", \"(T1, T2)\", ..." #: src/basic-syntax/compound-types.md:6 msgid "`()`, `('x',)`, `('x', 1.2)`, ..." msgstr "`()`, `('x',)`, `('x', 1.2)`, ..." #: src/basic-syntax/compound-types.md:8 msgid "Array assignment and access:" msgstr "Призначення масиву та доступ:" #: src/basic-syntax/compound-types.md:10 msgid "" "```rust,editable\n" "fn main() {\n" " let mut a: [i8; 10] = [42; 10];\n" " a[5] = 0;\n" " println!(\"a: {:?}\", a);\n" "}\n" "```" msgstr "" #: src/basic-syntax/compound-types.md:18 msgid "Tuple assignment and access:" msgstr "Присвоєння кортежу та доступ:" #: src/basic-syntax/compound-types.md:20 msgid "" "```rust,editable\n" "fn main() {\n" " let t: (i8, bool) = (7, true);\n" " println!(\"1st index: {}\", t.0);\n" " println!(\"2nd index: {}\", t.1);\n" "}\n" "```" msgstr "" #: src/basic-syntax/compound-types.md:32 msgid "Arrays:" msgstr "Масиви:" #: src/basic-syntax/compound-types.md:34 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 " "its type_, which means that `[u8; 3]` and `[u8; 4]` are considered two " "different types." msgstr "" #: src/basic-syntax/compound-types.md:38 msgid "We can use literals to assign values to arrays." msgstr "Ми можемо використовувати літерали для призначення значень масивам." #: src/basic-syntax/compound-types.md:40 msgid "" "In the main function, the print statement asks for the debug implementation " "with the `?` format parameter: `{}` gives the default output, `{:?}` gives " "the debug output. We could also have used `{a}` and `{a:?}` without " "specifying the value after the format string." msgstr "" "У головній функції оператор print запитує реалізацію налагодження за " "допомогою параметра формату `?`: `{}` дає вихід за замовчуванням, `{:?}` дає " "вихід налагодження. Ми також могли використовувати `{a}` і `{a:?}` без " "вказівки значення після рядка формату." #: src/basic-syntax/compound-types.md:45 msgid "" "Adding `#`, eg `{a:#?}`, invokes a \"pretty printing\" format, which can be " "easier to read." msgstr "" "Додавання `#`, наприклад `{a:#?}`, викликає формат \"гарного друку\", який " "може бути легшим для читання." #: src/basic-syntax/compound-types.md:47 msgid "Tuples:" msgstr "Кортежі:" #: src/basic-syntax/compound-types.md:49 msgid "Like arrays, tuples have a fixed length." msgstr "Як і масиви, кортежі мають фіксовану довжину." #: src/basic-syntax/compound-types.md:51 msgid "Tuples group together values of different types into a compound type." msgstr "Кортежі групують значення різних типів у складений тип." #: src/basic-syntax/compound-types.md:53 msgid "" "Fields of a tuple can be accessed by the period and the index of the value, " "e.g. `t.0`, `t.1`." msgstr "" "Доступ до полів кортежу можна отримати за крапкою та індексом значення, " "наприклад. `t.0`, `t.1`." #: src/basic-syntax/compound-types.md:55 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. " msgstr "" "Порожній кортеж `()` також відомий як \"тип одиниці\". Це і тип, і єдине " "дійсне значення цього типу, тобто і тип, і його значення виражаються як " "`()`. Він використовується, наприклад, щоб вказати, що функція або вираз не " "мають значення, що повертається, як ми побачимо на наступному слайді." #: src/basic-syntax/compound-types.md:59 msgid "" "You can think of it as `void` that can be familiar to you from other " "programming languages." msgstr "" "Ви можете думати про це як про «пустоту», яка може бути знайома вам з інших " "мов програмування." #: src/basic-syntax/references.md:3 msgid "Like C++, Rust has references:" msgstr "Як і C++, Rust має посилання:" #: src/basic-syntax/references.md:5 msgid "" "```rust,editable\n" "fn main() {\n" " let mut x: i32 = 10;\n" " let ref_x: &mut i32 = &mut x;\n" " *ref_x = 20;\n" " println!(\"x: {x}\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/references.md:14 msgid "Some notes:" msgstr "Деякі примітки:" #: src/basic-syntax/references.md:16 msgid "" "We must dereference `ref_x` when assigning to it, similar to C and C++ " "pointers." msgstr "" "Ми повинні розіменувати ref_x під час призначення, подібно до покажчиків C і " "C++." #: src/basic-syntax/references.md:17 msgid "" "Rust will auto-dereference in some cases, in particular when invoking " "methods (try `ref_x.count_ones()`)." msgstr "" "У деяких випадках Rust виконує автоматичне розіменування, зокрема під час " "виклику методів (спробуйте ref_x.count_ones())." #: src/basic-syntax/references.md:19 msgid "" "References that are declared as `mut` can be bound to different values over " "their lifetime." msgstr "" "Посилання, оголошені як `mut`, можуть бути пов’язані з різними значеннями " "протягом свого життя." #: src/basic-syntax/references.md:25 msgid "" "Be sure to note the difference between `let mut ref_x: &i32` and `let ref_x: " "&mut i32`. The first one represents a mutable reference which can be bound " "to different values, while the second represents a reference to a mutable " "value." msgstr "" "Обов’язково зверніть увагу на різницю між `let mut ref_x: &i32` і `let " "ref_x: &mut i32`. Перше представляє змінне посилання, яке може бути " "прив’язане до різних значень, тоді як друге представляє посилання на змінне " "значення." #: src/basic-syntax/references-dangling.md:3 msgid "Rust will statically forbid dangling references:" msgstr "Rust статично забороняє висячі посилання:" #: src/basic-syntax/references-dangling.md:5 msgid "" "```rust,editable,compile_fail\n" "fn main() {\n" " let ref_x: &i32;\n" " {\n" " let x: i32 = 10;\n" " ref_x = &x;\n" " }\n" " println!(\"ref_x: {ref_x}\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/references-dangling.md:16 msgid "A reference is said to \"borrow\" the value it refers to." msgstr "Кажуть, що посилання «позичає» значення, на яке воно посилається." #: src/basic-syntax/references-dangling.md:17 msgid "" "Rust is tracking the lifetimes of all references to ensure they live long " "enough." msgstr "" "Rust відстежує терміни життя всіх посилань, щоб переконатися, що вони живуть " "достатньо довго." #: src/basic-syntax/references-dangling.md:19 msgid "We will talk more about borrowing when we get to ownership." msgstr "Про запозичення ми поговоримо більше, коли дійдемо до власності." #: src/basic-syntax/slices.md:3 msgid "A slice gives you a view into a larger collection:" msgstr "Фрагмент дає змогу переглянути більшу колекцію:" #: src/basic-syntax/slices.md:5 msgid "" "```rust,editable\n" "fn main() {\n" " let mut a: [i32; 6] = [10, 20, 30, 40, 50, 60];\n" " println!(\"a: {a:?}\");\n" "\n" " let s: &[i32] = &a[2..4];\n" "\n" " println!(\"s: {s:?}\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/slices.md:16 msgid "Slices borrow data from the sliced type." msgstr "Зрізи запозичують дані зі зрізаного типу." #: src/basic-syntax/slices.md:17 msgid "Question: What happens if you modify `a[3]` right before printing `s`?" msgstr "" "Запитання: що станеться, якщо змінити `a[3]` безпосередньо перед друком `s`?" #: src/basic-syntax/slices.md:21 msgid "" "We create a slice by borrowing `a` and specifying the starting and ending " "indexes in brackets." msgstr "" "Ми створюємо фрагмент, запозичуючи `a` та вказуючи початковий і кінцевий " "індекси в дужках." #: src/basic-syntax/slices.md:23 msgid "" "If the slice starts at index 0, Rust’s range syntax allows us to drop the " "starting index, meaning that `&a[0..a.len()]` and `&a[..a.len()]` are " "identical." msgstr "" "Якщо фрагмент починається з індексу 0, синтаксис діапазону Rust дозволяє нам " "відкинути початковий індекс, тобто `&a[0..a.len()]` і `&a[..a.len()]` " "ідентичні." #: src/basic-syntax/slices.md:25 msgid "" "The same is true for the last index, so `&a[2..a.len()]` and `&a[2..]` are " "identical." msgstr "" "Те саме стосується останнього індексу, тому `&a[2..a.len()]` і `&a[2..]` " "ідентичні." #: src/basic-syntax/slices.md:27 msgid "" "To easily create a slice of the full array, we can therefore use `&a[..]`." msgstr "" "Щоб легко створити фрагмент повного масиву, ми можемо використовувати " "`&a[..]`." #: src/basic-syntax/slices.md:29 msgid "" "`s` is a reference to a slice of `i32`s. Notice that the type of `s` " "(`&[i32]`) no longer mentions the array length. This allows us to perform " "computation on slices of different sizes." msgstr "" "`s` є посиланням на фрагмент `i32`s. Зверніть увагу, що тип `s` (`&[i32]`) " "більше не згадує довжину масиву. Це дозволяє нам виконувати обчислення на " "зрізах різного розміру." #: src/basic-syntax/slices.md:31 msgid "" "Slices always borrow from another object. In this example, `a` has to remain " "'alive' (in scope) for at least as long as our slice. " msgstr "" "Зрізи завжди запозичуються з іншого об'єкта. У цьому прикладі \"a\" має " "залишатися \"живим\" (в області видимості) принаймні стільки ж, скільки наш " "фрагмент." #: src/basic-syntax/slices.md:33 msgid "" "The question about modifying `a[3]` can spark an interesting discussion, but " "the answer is that for memory safety reasons you cannot do it through `a` at " "this point in the execution, but you can read the data from both `a` and `s` " "safely. It works before you created the slice, and again after the " "`println`, when the slice is no longer used. More details will be explained " "in the borrow checker section." msgstr "" "Питання про модифікацію `a[3]` може викликати цікаву дискусію, але відповідь " "полягає в тому, що з міркувань безпеки пам’яті ви не можете зробити це через " "`a` на цьому етапі виконання, але ви можете читати дані з обох `a ` і `s` " "безпечно. Він працює до того, як ви створили фрагмент, і знову після " "`println`, коли фрагмент більше не використовується. Докладніше буде описано " "в розділі перевірки запозичень." #: src/basic-syntax/string-slices.md:1 msgid "`String` vs `str`" msgstr "`String` проти `str`" #: src/basic-syntax/string-slices.md:3 msgid "We can now understand the two string types in Rust:" msgstr "Тепер ми можемо зрозуміти два типи рядків у Rust:" #: src/basic-syntax/string-slices.md:5 msgid "" "```rust,editable\n" "fn main() {\n" " let s1: &str = \"World\";\n" " println!(\"s1: {s1}\");\n" "\n" " let mut s2: String = String::from(\"Hello \");\n" " println!(\"s2: {s2}\");\n" " s2.push_str(s1);\n" " println!(\"s2: {s2}\");\n" " \n" " let s3: &str = &s2[6..];\n" " println!(\"s3: {s3}\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/string-slices.md:20 msgid "Rust terminology:" msgstr "Термінологія Rust:" #: src/basic-syntax/string-slices.md:22 msgid "`&str` an immutable reference to a string slice." msgstr "`&str` незмінне посилання на фрагмент рядка." #: src/basic-syntax/string-slices.md:23 msgid "`String` a mutable string buffer." msgstr "`String` змінний буфер рядка." #: src/basic-syntax/string-slices.md:27 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/basic-syntax/string-slices.md:30 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/basic-syntax/string-slices.md:32 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 "" #: src/basic-syntax/string-slices.md:35 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/basic-syntax/string-slices.md:38 msgid "" "You can borrow `&str` slices from `String` via `&` and optionally range " "selection." msgstr "" "Ви можете запозичити фрагменти `&str` з `String` через `&` і вибір діапазону." #: src/basic-syntax/string-slices.md:40 msgid "" "For C++ programmers: think of `&str` as `const char*` 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` як про `const char*` із C++, але " "той, який завжди вказує на дійсний рядок у пам’яті. Rust `String` — це " "приблизний еквівалент `std::string` з C++ (головна відмінність: він може " "містити лише байти в кодуванні UTF-8 і ніколи не використовуватиме " "оптимізацію за малими рядками)." #: src/basic-syntax/functions.md:3 msgid "" "A Rust version of the famous [FizzBuzz](https://en.wikipedia.org/wiki/" "Fizz_buzz) interview question:" msgstr "" "Rust-версія відомого запитання для інтерв’ю [FizzBuzz](https://en.wikipedia." "org/wiki/Fizz_buzz):" #: src/basic-syntax/functions.md:5 msgid "" "```rust,editable\n" "fn main() {\n" " print_fizzbuzz_to(20);\n" "}\n" "\n" "fn is_divisible(n: u32, divisor: u32) -> bool {\n" " if divisor == 0 {\n" " return false;\n" " }\n" " n % divisor == 0\n" "}\n" "\n" "fn fizzbuzz(n: u32) -> String {\n" " let fizz = if is_divisible(n, 3) { \"fizz\" } else { \"\" };\n" " let buzz = if is_divisible(n, 5) { \"buzz\" } else { \"\" };\n" " if fizz.is_empty() && buzz.is_empty() {\n" " return format!(\"{n}\");\n" " }\n" " format!(\"{fizz}{buzz}\")\n" "}\n" "\n" "fn print_fizzbuzz_to(n: u32) {\n" " for i in 1..=n {\n" " println!(\"{}\", fizzbuzz(i));\n" " }\n" "}\n" "```" msgstr "" #: src/basic-syntax/functions.md:35 msgid "" "We refer in `main` to a function written below. Neither forward declarations " "nor headers are necessary. " msgstr "" "У `main` ми посилаємося на функцію, написану нижче. Ні попередні оголошення, " "ні заголовки не потрібні." #: src/basic-syntax/functions.md:36 msgid "" "Declaration parameters are followed by a type (the reverse of some " "programming languages), then a return type." msgstr "" "За параметрами оголошення слідує тип (зворотній зв’язок з деякими мовами " "програмування), а потім тип повернення." #: src/basic-syntax/functions.md:37 msgid "" "The last expression in a function body (or any block) becomes the return " "value. Simply omit the `;` at the end of the expression." msgstr "" #: src/basic-syntax/functions.md:38 msgid "" "Some functions have no return value, and return the 'unit type', `()`. The " "compiler will infer this if the `-> ()` return type is omitted." msgstr "" "Деякі функції не мають значення, що повертається, і повертають «тип одиниці " "вимірювання», `()`. Компілятор визначить це, якщо тип повернення `-> ()` " "пропущено." #: src/basic-syntax/functions.md:39 msgid "" "The range expression in the `for` loop in `print_fizzbuzz_to()` contains " "`=n`, which causes it to include the upper bound." msgstr "" "Вираз діапазону в циклі `for` у `print_fizzbuzz_to()` містить `=n`, що " "змушує його включати верхню межу." #: src/basic-syntax/rustdoc.md:3 msgid "" "All language items in Rust can be documented using special `///` syntax." msgstr "" "Усі мовні елементи в Rust можна задокументувати за допомогою спеціального " "синтаксису `///`." #: src/basic-syntax/rustdoc.md:5 msgid "" "```rust,editable\n" "/// Determine whether the first argument is divisible by the second " "argument.\n" "///\n" "/// If the second argument is zero, the result is false.\n" "fn is_divisible_by(lhs: u32, rhs: u32) -> bool {\n" " if rhs == 0 {\n" " return false; // Corner case, early return\n" " }\n" " lhs % rhs == 0 // The last expression in a block is the return " "value\n" "}\n" "```" msgstr "" #: src/basic-syntax/rustdoc.md:17 msgid "" "The contents are treated as Markdown. All published Rust library crates are " "automatically documented at [`docs.rs`](https://docs.rs) using the [rustdoc]" "(https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is " "idiomatic to document all public items in an API using this pattern." msgstr "" "Вміст розглядається як Markdown. Усі опубліковані ящики бібліотеки Rust " "автоматично документуються на [`docs.rs`](https://docs.rs) за допомогою " "[rustdoc](https://doc.rust-lang.org/rustdoc/what-is-rustdoc) .html). " "Ідіоматично документувати всі публічні елементи в API за допомогою цього " "шаблону." #: src/basic-syntax/rustdoc.md:24 msgid "" "Show students the generated docs for the `rand` crate at [`docs.rs/rand`]" "(https://docs.rs/rand)." msgstr "" "Покажіть студентам згенеровані документи для ящика `rand` на [`docs.rs/rand`]" "(https://docs.rs/rand)." #: src/basic-syntax/rustdoc.md:27 msgid "" "This course does not include rustdoc on slides, just to save space, but in " "real code they should be present." msgstr "" "Цей курс не містить rustdoc на слайдах, щоб заощадити місце, але в реальному " "коді вони повинні бути присутніми." #: src/basic-syntax/rustdoc.md:30 msgid "" "Inner doc comments are discussed later (in the page on modules) and need not " "be addressed here." msgstr "" "Коментарі до внутрішнього документа обговорюються пізніше (на сторінці " "модулів), і їх тут не потрібно розглядати." #: src/basic-syntax/rustdoc.md:33 msgid "" "Rustdoc comments can contain code snippets that we can run and test using " "`cargo test`. We will discuss these tests in the [Testing section](../" "testing/doc-tests.html)." msgstr "" "Коментарі Rustdoc можуть містити фрагменти коду, які ми можемо запускати та " "тестувати за допомогою `cargo test`. Ми обговоримо ці тести в [розділі " "тестування](../testing/doc-tests.html)." #: src/basic-syntax/methods.md:3 msgid "" "Methods are functions associated with a type. The `self` argument of a " "method is an instance of the type it is associated with:" msgstr "" "Методи — це функції, пов’язані з типом. Аргумент `self` методу є екземпляром " "типу, з яким він пов’язаний:" #: src/basic-syntax/methods.md:6 msgid "" "```rust,editable\n" "struct Rectangle {\n" " width: u32,\n" " height: u32,\n" "}\n" "\n" "impl Rectangle {\n" " fn area(&self) -> u32 {\n" " self.width * self.height\n" " }\n" "\n" " fn inc_width(&mut self, delta: u32) {\n" " self.width += delta;\n" " }\n" "}\n" "\n" "fn main() {\n" " let mut rect = Rectangle { width: 10, height: 5 };\n" " println!(\"old area: {}\", rect.area());\n" " rect.inc_width(5);\n" " println!(\"new area: {}\", rect.area());\n" "}\n" "```" msgstr "" #: src/basic-syntax/methods.md:30 msgid "" "We will look much more at methods in today's exercise and in tomorrow's " "class." msgstr "" "Ми розглянемо методи набагато більше в сьогоднішній вправі та на " "завтрашньому уроці." #: src/basic-syntax/methods.md:34 msgid "Add a static method called `Rectangle::new` and call this from `main`:" msgstr "" "Додайте статичний метод під назвою `Rectangle::new` і викличте це з `main`:" #: src/basic-syntax/methods.md:36 msgid "" "```rust,editable,compile_fail\n" "fn new(width: u32, height: u32) -> Rectangle {\n" " Rectangle { width, height }\n" "}\n" "```" msgstr "" #: src/basic-syntax/methods.md:42 msgid "" "While _technically_, Rust does not have custom constructors, static methods " "are commonly used to initialize structs (but don't have to). The actual " "constructor, `Rectangle { width, height }`, could be called directly. See " "the [Rustnomicon](https://doc.rust-lang.org/nomicon/constructors.html)." msgstr "" "Хоча _технічно_, Rust не має спеціальних конструкторів, для ініціалізації " "структур зазвичай використовуються статичні методи (але це не обов’язково). " "Фактичний конструктор, `Rectangle { width, height }`, можна викликати " "безпосередньо. Перегляньте [Rustnomicon](https://doc.rust-lang.org/nomicon/" "constructors.html)." #: src/basic-syntax/methods.md:45 msgid "" "Add a `Rectangle::square(width: u32)` constructor to illustrate that such " "static methods can take arbitrary parameters." msgstr "" "Додайте конструктор `Rectangle::square(width: u32)`, щоб проілюструвати, що " "такі статичні методи можуть приймати довільні параметри." #: src/basic-syntax/functions-interlude.md:1 msgid "Function Overloading" msgstr "Перевантаження функцій" #: src/basic-syntax/functions-interlude.md:3 msgid "Overloading is not supported:" msgstr "Перевантаження не підтримується:" #: src/basic-syntax/functions-interlude.md:5 msgid "Each function has a single implementation:" msgstr "Кожна функція має одну реалізацію:" #: src/basic-syntax/functions-interlude.md:6 msgid "Always takes a fixed number of parameters." msgstr "Завжди приймає фіксовану кількість параметрів." #: src/basic-syntax/functions-interlude.md:7 msgid "Always takes a single set of parameter types." msgstr "Завжди приймає один набір типів параметрів." #: src/basic-syntax/functions-interlude.md:8 msgid "Default values are not supported:" msgstr "Значення за замовчуванням не підтримуються:" #: src/basic-syntax/functions-interlude.md:9 msgid "All call sites have the same number of arguments." msgstr "Усі сайти викликів мають однакову кількість аргументів." #: src/basic-syntax/functions-interlude.md:10 msgid "Macros are sometimes used as an alternative." msgstr "Макроси іноді використовуються як альтернатива." #: src/basic-syntax/functions-interlude.md:12 msgid "However, function parameters can be generic:" msgstr "Однак параметри функції можуть бути загальними:" #: src/basic-syntax/functions-interlude.md:14 msgid "" "```rust,editable\n" "fn pick_one(a: T, b: T) -> T {\n" " if std::process::id() % 2 == 0 { a } else { b }\n" "}\n" "\n" "fn main() {\n" " println!(\"coin toss: {}\", pick_one(\"heads\", \"tails\"));\n" " println!(\"cash prize: {}\", pick_one(500, 1000));\n" "}\n" "```" msgstr "" #: src/basic-syntax/functions-interlude.md:27 msgid "" "When using generics, the standard library's `Into` can provide a kind of " "limited polymorphism on argument types. We will see more details in a later " "section." msgstr "" "При використанні дженериків стандартна бібліотека `Into` може забезпечити " "певний обмежений поліморфізм типів аргументів. Ми побачимо більше деталей у " "наступному розділі." #: src/exercises/day-1/morning.md:1 msgid "Day 1: Morning Exercises" msgstr "День 1: Ранкова зарядка" #: src/exercises/day-1/morning.md:3 msgid "In these exercises, we will explore two parts of Rust:" msgstr "У цих вправах ми дослідимо дві частини Rust:" #: src/exercises/day-1/morning.md:5 msgid "Implicit conversions between types." msgstr "Неявні перетворення між типами." #: src/exercises/day-1/morning.md:7 msgid "Arrays and `for` loops." msgstr "Масиви та цикли for." #: src/exercises/day-1/morning.md:11 msgid "A few things to consider while solving the exercises:" msgstr "Кілька речей, які слід враховувати під час вирішення вправ:" #: src/exercises/day-1/morning.md:13 msgid "" "Use a local Rust installation, if possible. This way you can get auto-" "completion in your editor. See the page about [Using Cargo](../../cargo.md) " "for details on installing Rust." msgstr "" "Використовуйте локальну установку Rust, якщо можливо. Таким чином ви можете " "отримати автозаповнення у своєму редакторі. Перегляньте сторінку про " "[Використання Cargo](../../cargo.md), щоб дізнатися більше про встановлення " "Rust." #: src/exercises/day-1/morning.md:17 msgid "Alternatively, use the Rust Playground." msgstr "Крім того, скористайтеся ігровим майданчиком Rust." #: src/exercises/day-1/morning.md:19 msgid "" "The code snippets are not editable on purpose: the inline code snippets lose " "their state if you navigate away from the page." msgstr "" "Фрагменти коду не можна редагувати навмисно: вбудовані фрагменти коду " "втрачають свій стан, якщо ви переходите зі сторінки." #: src/exercises/day-1/morning.md:22 src/exercises/day-2/morning.md:11 #: src/exercises/day-3/morning.md:9 src/exercises/bare-metal/morning.md:7 #: src/exercises/concurrency/morning.md:12 msgid "" "After looking at the exercises, you can look at the [solutions](solutions-" "morning.md) provided." msgstr "" "Переглянувши вправи, ви можете переглянути надані [рішення](solutions-" "morning.md)." #: src/exercises/day-1/implicit-conversions.md:3 msgid "" "Rust will not automatically apply _implicit conversions_ between types " "([unlike C++](https://en.cppreference.com/w/cpp/language/" "implicit_conversion)). You can see this in a program like this:" msgstr "" "Rust не застосовуватиме автоматично _неявні перетворення_ між типами ([на " "відміну від C++](https://en.cppreference.com/w/cpp/language/" "implicit_conversion)). Ви можете побачити це в такій програмі:" #: src/exercises/day-1/implicit-conversions.md:6 msgid "" "```rust,editable,compile_fail\n" "fn multiply(x: i16, y: i16) -> i16 {\n" " x * y\n" "}\n" "\n" "fn main() {\n" " let x: i8 = 15;\n" " let y: i16 = 1000;\n" "\n" " println!(\"{x} * {y} = {}\", multiply(x, y));\n" "}\n" "```" msgstr "" #: src/exercises/day-1/implicit-conversions.md:19 msgid "" "The Rust integer types all implement the [`From`](https://doc.rust-lang." "org/std/convert/trait.From.html) and [`Into`](https://doc.rust-lang.org/" "std/convert/trait.Into.html) traits to let us convert between them. The " "`From` trait has a single `from()` method and similarly, the `Into` " "trait has a single `into()` method. Implementing these traits is how a type " "expresses that it can be converted into another type." msgstr "" "Усі цілі типи Rust реалізують [`From`](https://doc.rust-lang.org/std/" "convert/trait.From.html) і [`Into`](https: //doc.rust-lang.org/std/" "convert/trait.Into.html), щоб ми могли конвертувати між ними. Характеристика " "`From` має єдиний метод `from()`, а ознака `Into` має один метод " "`into()`. Реалізація цих ознак є тим, як тип виражає, що його можна " "перетворити на інший тип." #: src/exercises/day-1/implicit-conversions.md:25 msgid "" "The standard library has an implementation of `From for i16`, which " "means that we can convert a variable `x` of type `i8` to an `i16` by " "calling `i16::from(x)`. Or, simpler, with `x.into()`, because `From for " "i16` implementation automatically create an implementation of `Into for " "i8`." msgstr "" "Стандартна бібліотека має реалізацію `From для i16`, що означає, що ми " "можемо перетворити змінну `x` типу `i8` на `i16`, викликавши `i16::from(x)`. " "Або, простіше, з `x.into()`, оскільки реалізація `From для i16` " "автоматично створює реалізацію `Into для i8`." #: src/exercises/day-1/implicit-conversions.md:30 msgid "" "The same applies for your own `From` implementations for your own types, so " "it is sufficient to only implement `From` to get a respective `Into` " "implementation automatically." msgstr "" "Те саме стосується ваших власних реалізацій `From` для ваших власних типів, " "тому достатньо реалізувати лише `From`, щоб автоматично отримати відповідну " "реалізацію `Into`." #: src/exercises/day-1/implicit-conversions.md:33 msgid "Execute the above program and look at the compiler error." msgstr "Виконайте наведену вище програму та подивіться на помилку компілятора." #: src/exercises/day-1/implicit-conversions.md:35 msgid "Update the code above to use `into()` to do the conversion." msgstr "" "Оновіть код вище, щоб використовувати `in()` для виконання перетворення." #: src/exercises/day-1/implicit-conversions.md:37 msgid "" "Change the types of `x` and `y` to other things (such as `f32`, `bool`, " "`i128`) to see which types you can convert to which other types. Try " "converting small types to big types and the other way around. Check the " "[standard library documentation](https://doc.rust-lang.org/std/convert/trait." "From.html) to see if `From` is implemented for the pairs you check." msgstr "" "Змініть типи `x` і `y` на інші речі (наприклад, `f32`, `bool`, `i128`), щоб " "побачити, які типи можна перетворити на інші типи. Спробуйте перетворити " "малі типи на великі типи і навпаки. Перевірте [стандартну бібліотечну " "документацію](https://doc.rust-lang.org/std/convert/trait.From.html), щоб " "перевірити, чи реалізовано `From` для пар, які ви перевіряєте." #: src/exercises/day-1/for-loops.md:1 #: src/exercises/day-1/solutions-morning.md:3 msgid "Arrays and `for` Loops" msgstr "Масиви та цикли for" #: src/exercises/day-1/for-loops.md:3 msgid "We saw that an array can be declared like this:" msgstr "Ми побачили, що масив можна оголосити так:" #: src/exercises/day-1/for-loops.md:5 msgid "" "```rust\n" "let array = [10, 20, 30];\n" "```" msgstr "" #: src/exercises/day-1/for-loops.md:9 msgid "" "You can print such an array by asking for its debug representation with `{:?}" "`:" msgstr "" "Ви можете надрукувати такий масив, запитавши його представлення налагодження " "за допомогою `{:?}`:" #: src/exercises/day-1/for-loops.md:11 msgid "" "```rust,editable\n" "fn main() {\n" " let array = [10, 20, 30];\n" " println!(\"array: {array:?}\");\n" "}\n" "```" msgstr "" #: src/exercises/day-1/for-loops.md:18 msgid "" "Rust lets you iterate over things like arrays and ranges using the `for` " "keyword:" msgstr "" "Rust дозволяє вам перебирати такі речі, як масиви та діапазони, " "використовуючи ключове слово `for`:" #: src/exercises/day-1/for-loops.md:21 msgid "" "```rust,editable\n" "fn main() {\n" " let array = [10, 20, 30];\n" " print!(\"Iterating over array:\");\n" " for n in &array {\n" " print!(\" {n}\");\n" " }\n" " println!();\n" "\n" " print!(\"Iterating over range:\");\n" " for i in 0..3 {\n" " print!(\" {}\", array[i]);\n" " }\n" " println!();\n" "}\n" "```" msgstr "" #: src/exercises/day-1/for-loops.md:38 msgid "" "Use the above to write a function `pretty_print` which pretty-print a matrix " "and a function `transpose` which will transpose a matrix (turn rows into " "columns):" msgstr "" "Використовуйте наведене вище, щоб написати функцію `pretty_print`, яка " "красиво друкує матрицю, і функцію `transpose`, яка транспонує матрицю " "(перетворює рядки на стовпці):" #: src/exercises/day-1/for-loops.md:41 msgid "" "```bob\n" " ⎛⎡1 2 3⎤⎞ ⎡1 4 7⎤\n" "\"transpose\"⎜⎢4 5 6⎥⎟ \"==\"⎢2 5 8⎥\n" " ⎝⎣7 8 9⎦⎠ ⎣3 6 9⎦\n" "```" msgstr "" #: src/exercises/day-1/for-loops.md:47 msgid "Hard-code both functions to operate on 3 × 3 matrices." msgstr "Жорстко закодуйте обидві функції для роботи з матрицями 3 × 3." #: src/exercises/day-1/for-loops.md:49 msgid "" "Copy the code below to and implement the " "functions:" msgstr "" "Скопіюйте наведений нижче код на і застосуйте " "функції:" #: src/exercises/day-1/for-loops.md:52 msgid "" "```rust,should_panic\n" "// TODO: remove this when you're done with your implementation.\n" "#![allow(unused_variables, dead_code)]\n" "\n" "fn transpose(matrix: [[i32; 3]; 3]) -> [[i32; 3]; 3] {\n" " unimplemented!()\n" "}\n" "\n" "fn pretty_print(matrix: &[[i32; 3]; 3]) {\n" " unimplemented!()\n" "}\n" "\n" "fn main() {\n" " let matrix = [\n" " [101, 102, 103], // <-- the comment makes rustfmt add a newline\n" " [201, 202, 203],\n" " [301, 302, 303],\n" " ];\n" "\n" " println!(\"matrix:\");\n" " pretty_print(&matrix);\n" "\n" " let transposed = transpose(matrix);\n" " println!(\"transposed:\");\n" " pretty_print(&transposed);\n" "}\n" "```" msgstr "" #: src/exercises/day-1/for-loops.md:80 msgid "Bonus Question" msgstr "Бонусне питання" #: src/exercises/day-1/for-loops.md:82 msgid "" "Could you use `&[i32]` slices instead of hard-coded 3 × 3 matrices for your " "argument and return types? Something like `&[&[i32]]` for a two-dimensional " "slice-of-slices. Why or why not?" msgstr "" "Чи можете ви використати фрагменти `&[i32]` замість жорстко закодованих " "матриць 3 × 3 для ваших аргументів і типів повернення? Щось на зразок " "`&[&[i32]]` для двовимірного фрагмента фрагментів. Чому або чому ні?" #: src/exercises/day-1/for-loops.md:87 msgid "" "See the [`ndarray` crate](https://docs.rs/ndarray/) for a production quality " "implementation." msgstr "" "Перегляньте [`ndarray` ящик](https://docs.rs/ndarray/), щоб дізнатися про " "якість виробництва." #: src/exercises/day-1/for-loops.md:92 msgid "" "The solution and the answer to the bonus section are available in the " "[Solution](solutions-morning.md#arrays-and-for-loops) section." msgstr "" "Рішення та відповідь до бонусного розділу доступні в розділі [Рішення]" "(solutions-morning.md#arrays-and-for-loops)." #: src/exercises/day-1/for-loops.md:95 msgid "" "The use of the reference `&array` within `for n in &array` is a subtle " "preview of issues of ownership that will come later in the afternoon." msgstr "" "Використання посилання `&array` у `for n in &array` є тонким попереднім " "переглядом питань власності, які виникнуть пізніше вдень." #: src/exercises/day-1/for-loops.md:98 msgid "Without the `&`..." msgstr "Без `&`..." #: src/exercises/day-1/for-loops.md:99 msgid "" "The loop would have been one that consumes the array. This is a change " "[introduced in the 2021 Edition](https://doc.rust-lang.org/edition-guide/" "rust-2021/IntoIterator-for-arrays.html)." msgstr "" "Цикл мав би споживати масив. Це зміна [внесена у випуск 2021](https://doc." "rust-lang.org/edition-guide/rust-2021/IntoIterator-for-arrays.html)." #: src/exercises/day-1/for-loops.md:102 msgid "" "An implicit array copy would have occurred. Since `i32` is a copy type, " "then `[i32; 3]` is also a copy type." msgstr "" #: src/control-flow.md:3 msgid "" "As we have seen, `if` is an expression in Rust. It is used to conditionally " "evaluate one of two blocks, but the blocks can have a value which then " "becomes the value of the `if` expression. Other control flow expressions " "work similarly in Rust." msgstr "" "Як ми бачили, `if` є виразом у Rust. Він використовується для умовного " "оцінювання одного з двох блоків, але блоки можуть мати значення, яке потім " "стає значенням виразу if. Інші вирази потоку керування працюють подібним " "чином у Rust." #: src/control-flow/blocks.md:3 msgid "" "A block in Rust contains a sequence of expressions. Each block has a value " "and a type, which are those of the last expression of the block:" msgstr "" "Блок у Rust містить послідовність виразів. Кожен блок має значення та тип, " "які відповідають останньому виразу блоку:" #: src/control-flow/blocks.md:7 msgid "" "```rust,editable\n" "fn main() {\n" " let x = {\n" " let y = 10;\n" " println!(\"y: {y}\");\n" " let z = {\n" " let w = {\n" " 3 + 4\n" " };\n" " println!(\"w: {w}\");\n" " y * w\n" " };\n" " println!(\"z: {z}\");\n" " z - y\n" " };\n" " println!(\"x: {x}\");\n" "}\n" "```" msgstr "" #: src/control-flow/blocks.md:26 msgid "" "If the last expression ends with `;`, then the resulting value and type is " "`()`." msgstr "" #: src/control-flow/blocks.md:28 msgid "" "The same rule is used for functions: the value of the function body is the " "return value:" msgstr "" "Те саме правило використовується для функцій: значення тіла функції є " "значенням, що повертається:" #: src/control-flow/blocks.md:31 msgid "" "```rust,editable\n" "fn double(x: i32) -> i32 {\n" " x + x\n" "}\n" "\n" "fn main() {\n" " println!(\"doubled: {}\", double(7));\n" "}\n" "```" msgstr "" #: src/control-flow/blocks.md:43 src/enums.md:34 src/enums/sizes.md:28 #: src/pattern-matching.md:25 src/pattern-matching/match-guards.md:22 #: src/structs.md:31 src/methods.md:30 src/methods/example.md:46 msgid "Key Points:" msgstr "Ключові моменти:" #: src/control-flow/blocks.md:44 msgid "" "The point of this slide is to show that blocks have a type and value in " "Rust. " msgstr "Мета цього слайда — показати, що блоки мають тип і значення в Rust." #: src/control-flow/blocks.md:45 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`." msgstr "" "Ви можете показати, як змінюється значення блоку, змінивши останній рядок у " "блоці. Наприклад, додавання/видалення крапки з комою або використання " "`return`." #: src/control-flow/if-expressions.md:1 msgid "`if` expressions" msgstr "вирази `if`" #: src/control-flow/if-expressions.md:3 msgid "" "You use [`if` expressions](https://doc.rust-lang.org/reference/expressions/" "if-expr.html#if-expressions) exactly like `if` statements in other languages:" msgstr "" "Ви використовуєте вирази [`if`](https://doc.rust-lang.org/reference/" "expressions/if-expr.html#if-expressions) так само, як і вирази `if` в інших " "мовах:" #: src/control-flow/if-expressions.md:7 msgid "" "```rust,editable\n" "fn main() {\n" " let mut x = 10;\n" " if x % 2 == 0 {\n" " x = x / 2;\n" " } else {\n" " x = 3 * x + 1;\n" " }\n" "}\n" "```" msgstr "" #: src/control-flow/if-expressions.md:18 msgid "" "In addition, you can use `if` as an expression. The last expression of each " "block becomes the value of the `if` expression:" msgstr "" "Крім того, ви можете використовувати `if` як вираз. Останній вираз кожного " "блоку стає значенням виразу if:" #: src/control-flow/if-expressions.md:22 msgid "" "```rust,editable\n" "fn main() {\n" " let mut x = 10;\n" " x = if x % 2 == 0 {\n" " x / 2\n" " } else {\n" " 3 * x + 1\n" " };\n" "}\n" "```" msgstr "" #: src/control-flow/if-expressions.md:35 msgid "" "Because `if` is an expression and must have a particular type, both of its " "branch blocks must have the same type. Consider showing what happens if you " "add `;` after `x / 2` in the second example." msgstr "" #: src/control-flow/for-expressions.md:1 msgid "`for` loops" msgstr "петлі `за`" #: src/control-flow/for-expressions.md:3 msgid "" "The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) is closely " "related to the [`while let` loop](while-let-expressions.md). It will " "automatically call `into_iter()` on the expression and then iterate over it:" msgstr "" "Цикл [`for`] (https://doc.rust-lang.org/std/keyword.for.html) тісно " "пов’язаний із циклом [`while let`] (while-let-expressions.md). Він " "автоматично викличе `into_iter()` для виразу, а потім перебере його:" #: src/control-flow/for-expressions.md:7 msgid "" "```rust,editable\n" "fn main() {\n" " let v = vec![10, 20, 30];\n" "\n" " for x in v {\n" " println!(\"x: {x}\");\n" " }\n" " \n" " for i in (0..10).step_by(2) {\n" " println!(\"i: {i}\");\n" " }\n" "}\n" "```" msgstr "" #: src/control-flow/for-expressions.md:21 msgid "You can use `break` and `continue` here as usual." msgstr "Ви можете використовувати `break` і `continue` тут, як зазвичай." #: src/control-flow/for-expressions.md:25 msgid "Index iteration is not a special syntax in Rust for just that case." msgstr "" "Ітерація індексу не є спеціальним синтаксисом у Rust лише для цього випадку." #: src/control-flow/for-expressions.md:26 msgid "`(0..10)` is a range that implements an `Iterator` trait. " msgstr "\"(0..10)\" – це діапазон, який реалізує ознаку \"ітератора\"." #: src/control-flow/for-expressions.md:27 msgid "" "`step_by` is a method that returns another `Iterator` that skips every other " "element. " msgstr "" "`step_by` — це метод, який повертає ще один `ітератор`, який пропускає всі " "інші елементи." #: src/control-flow/for-expressions.md:28 msgid "" "Modify the elements in the vector and explain the compiler errors. Change " "vector `v` to be mutable and the for loop to `for x in v.iter_mut()`." msgstr "" "Змініть елементи у векторі та поясніть помилки компілятора. Змініть вектор " "`v` на змінний, а цикл for — на `for x у v.iter_mut()`." #: src/control-flow/while-expressions.md:1 msgid "`while` loops" msgstr "цикли `while`" #: src/control-flow/while-expressions.md:3 msgid "" "The [`while` keyword](https://doc.rust-lang.org/reference/expressions/loop-" "expr.html#predicate-loops) works very similar to other languages:" msgstr "" "Ключове слово [`while`](https://doc.rust-lang.org/reference/expressions/loop-" "expr.html#predicate-loops) працює дуже подібно до інших мов:" #: src/control-flow/while-expressions.md:6 msgid "" "```rust,editable\n" "fn main() {\n" " let mut x = 10;\n" " while x != 1 {\n" " x = if x % 2 == 0 {\n" " x / 2\n" " } else {\n" " 3 * x + 1\n" " };\n" " }\n" " println!(\"Final x: {x}\");\n" "}\n" "```" msgstr "" #: src/control-flow/break-continue.md:1 msgid "`break` and `continue`" msgstr "`break` і `continue`" #: src/control-flow/break-continue.md:3 msgid "" "If you want to exit a loop early, use [`break`](https://doc.rust-lang.org/" "reference/expressions/loop-expr.html#break-expressions)," msgstr "" "Якщо ви хочете вийти з циклу раніше, використовуйте [`break`](https://doc." "rust-lang.org/reference/expressions/loop-expr.html#break-expressions)," #: src/control-flow/break-continue.md:4 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 "" "Якщо ви хочете негайно почати наступну ітерацію, використовуйте " "[`продовжити`](https://doc.rust-lang.org/reference/expressions/loop-expr." "html#continue-expressions)." #: src/control-flow/break-continue.md:7 msgid "" "Both `continue` and `break` can optionally take a label argument which is " "used to break out of nested loops:" msgstr "" "І `continue`, і `break` можуть додатково приймати аргумент мітки, який " "використовується для виходу з вкладених циклів:" #: src/control-flow/break-continue.md:10 msgid "" "```rust,editable\n" "fn main() {\n" " let v = vec![10, 20, 30];\n" " let mut iter = v.into_iter();\n" " 'outer: while let Some(x) = iter.next() {\n" " println!(\"x: {x}\");\n" " let mut i = 0;\n" " while i < x {\n" " println!(\"x: {x}, i: {i}\");\n" " i += 1;\n" " if i == 3 {\n" " break 'outer;\n" " }\n" " }\n" " }\n" "}\n" "```" msgstr "" #: src/control-flow/break-continue.md:28 msgid "" "In this case we break the outer loop after 3 iterations of the inner loop." msgstr "" "У цьому випадку ми розриваємо зовнішній цикл після 3 ітерацій внутрішнього " "циклу." #: src/control-flow/loop-expressions.md:1 msgid "`loop` expressions" msgstr "вирази `циклу`" #: src/control-flow/loop-expressions.md:3 msgid "" "Finally, there is a [`loop` keyword](https://doc.rust-lang.org/reference/" "expressions/loop-expr.html#infinite-loops) which creates an endless loop." msgstr "" "Нарешті, є [`loop` ключове слово](https://doc.rust-lang.org/reference/" "expressions/loop-expr.html#infinite-loops), яке створює нескінченний цикл." #: src/control-flow/loop-expressions.md:6 msgid "Here you must either `break` or `return` to stop the loop:" msgstr "Тут ви повинні або `break`, або `return`, щоб зупинити цикл:" #: src/control-flow/loop-expressions.md:8 msgid "" "```rust,editable\n" "fn main() {\n" " let mut x = 10;\n" " loop {\n" " x = if x % 2 == 0 {\n" " x / 2\n" " } else {\n" " 3 * x + 1\n" " };\n" " if x == 1 {\n" " break;\n" " }\n" " }\n" " println!(\"Final x: {x}\");\n" "}\n" "```" msgstr "" #: src/control-flow/loop-expressions.md:27 msgid "Break the `loop` with a value (e.g. `break 8`) and print it out." msgstr "" "Розірвіть «цикл» зі значенням (наприклад, «break 8») і роздрукуйте його." #: src/control-flow/loop-expressions.md:28 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 " "`while` and `for` loops)." msgstr "" "Зауважте, що `loop` — це єдина конструкція циклу, яка повертає нетривіальне " "значення. Це тому, що його гарантовано буде введено принаймні один раз (на " "відміну від циклів `while` і `for`)." #: src/basic-syntax/variables.md:3 msgid "" "Rust provides type safety via static typing. Variable bindings are immutable " "by default:" msgstr "" "Rust забезпечує безпеку типів за допомогою статичної типізації. Прив'язки " "змінних незмінні за замовчуванням:" #: src/basic-syntax/variables.md:6 msgid "" "```rust,editable\n" "fn main() {\n" " let x: i32 = 10;\n" " println!(\"x: {x}\");\n" " // x = 20;\n" " // println!(\"x: {x}\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/variables.md:17 msgid "" "Due to type inference the `i32` is optional. We will gradually show the " "types less and less as the course progresses." msgstr "" "Через визначення типу `i32` є необов'язковим. Ми поступово показуватимемо " "типи все рідше в міру просування курсу." #: src/basic-syntax/type-inference.md:3 msgid "Rust will look at how the variable is _used_ to determine the type:" msgstr "Rust перевірить, як _використовується_ змінна для визначення типу:" #: src/basic-syntax/type-inference.md:5 msgid "" "```rust,editable\n" "fn takes_u32(x: u32) {\n" " println!(\"u32: {x}\");\n" "}\n" "\n" "fn takes_i8(y: i8) {\n" " println!(\"i8: {y}\");\n" "}\n" "\n" "fn main() {\n" " let x = 10;\n" " let y = 20;\n" "\n" " takes_u32(x);\n" " takes_i8(y);\n" " // takes_u32(y);\n" "}\n" "```" msgstr "" #: src/basic-syntax/type-inference.md:26 msgid "" "This slide demonstrates how the Rust compiler infers types based on " "constraints given by variable declarations and usages." msgstr "" "На цьому слайді показано, як компілятор Rust виводить типи на основі " "обмежень, заданих оголошеннями змінних і використанням." #: src/basic-syntax/type-inference.md:28 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 " "code generated by such declaration is identical to the explicit declaration " "of a type. The compiler does the job for us and helps us write more concise " "code." msgstr "" "Дуже важливо підкреслити, що змінні, оголошені таким чином, не належать до " "якогось динамічного «будь-якого типу», який може містити будь-які дані. " "Машинний код, згенерований такою декларацією, ідентичний явному оголошенню " "типу. Компілятор виконує роботу за нас і допомагає нам писати більш стислий " "код." #: src/basic-syntax/type-inference.md:32 msgid "" "The following code tells the compiler to copy into a certain generic " "container without the code ever explicitly specifying the contained type, " "using `_` as a placeholder:" msgstr "" "Наведений нижче код повідомляє компілятору скопіювати в певний загальний " "контейнер без явного вказівки коду типу, що міститься, використовуючи `_` як " "заповнювач:" #: src/basic-syntax/type-inference.md:34 msgid "" "```rust,editable\n" "fn main() {\n" " let mut v = Vec::new();\n" " v.push((10, false));\n" " v.push((20, true));\n" " println!(\"v: {v:?}\");\n" "\n" " let vv = v.iter().collect::>();\n" " println!(\"vv: {vv:?}\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/type-inference.md:46 msgid "" "[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator." "html#method.collect) relies on [`FromIterator`](https://doc.rust-lang.org/" "std/iter/trait.FromIterator.html), which [`HashSet`](https://doc.rust-lang." "org/std/collections/struct.HashSet.html#impl-FromIterator%3CT%3E-for-" "HashSet%3CT,+S%3E) implements." msgstr "" "[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator." "html#method.collect) покладається на [`FromIterator`](https://doc.rust- lang." "org/std/iter/trait.FromIterator.html), який [`HashSet`](https://doc.rust-" "lang.org/std/collections/struct.HashSet.html#impl-FromIterator%3CT% 3E-for-" "HashSet%3CT,+S%3E)." #: src/basic-syntax/static-and-const.md:1 msgid "Static and Constant Variables" msgstr "Статичні та постійні змінні" #: src/basic-syntax/static-and-const.md:3 msgid "" "Static and constant variables are two different ways to create globally-" "scoped values that cannot be moved or reallocated during the execution of " "the program. " msgstr "" "Статичні та постійні змінні — це два різні способи створення глобальних " "значень, які не можна перемістити чи перерозподілити під час виконання " "програми." #: src/basic-syntax/static-and-const.md:6 msgid "`const`" msgstr "`const`" #: src/basic-syntax/static-and-const.md:8 msgid "" "Constant variables are evaluated at compile time and their values are " "inlined wherever they are used:" msgstr "" "Константні змінні оцінюються під час компіляції, а їхні значення " "вставляються скрізь, де вони використовуються:" #: src/basic-syntax/static-and-const.md:11 msgid "" "```rust,editable\n" "const DIGEST_SIZE: usize = 3;\n" "const ZERO: Option = Some(42);\n" "\n" "fn compute_digest(text: &str) -> [u8; DIGEST_SIZE] {\n" " let mut digest = [ZERO.unwrap_or(0); DIGEST_SIZE];\n" " for (idx, &b) in text.as_bytes().iter().enumerate() {\n" " digest[idx % DIGEST_SIZE] = digest[idx % DIGEST_SIZE]." "wrapping_add(b);\n" " }\n" " digest\n" "}\n" "\n" "fn main() {\n" " let digest = compute_digest(\"Hello\");\n" " println!(\"Digest: {digest:?}\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/static-and-const.md:29 msgid "" "According to the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-" "vs-static.html) these are inlined upon use." msgstr "" "Відповідно до [Книги RFC RFC] (https://rust-lang.github.io/rfcs/0246-const-" "vs-static.html) вони додаються під час використання." #: src/basic-syntax/static-and-const.md:31 msgid "" "Only functions marked `const` can be called at compile time to generate " "`const` values. `const` functions can however be called at runtime." msgstr "" "Лише функції з позначкою `const` можна викликати під час компіляції для " "створення значень `const`. Однак функції `const` можна викликати під час " "виконання." #: src/basic-syntax/static-and-const.md:33 msgid "`static`" msgstr "`статичний`" #: src/basic-syntax/static-and-const.md:35 msgid "" "Static variables will live during the whole execution of the program, and " "therefore will not move:" msgstr "" "Статичні змінні будуть жити протягом усього виконання програми, тому не " "будуть переміщатися:" #: src/basic-syntax/static-and-const.md:37 msgid "" "```rust,editable\n" "static BANNER: &str = \"Welcome to RustOS 3.14\";\n" "\n" "fn main() {\n" " println!(\"{BANNER}\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/static-and-const.md:45 msgid "" "As noted in the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-" "vs-static.html), these are not inlined upon use and have an actual " "associated memory location. This is useful for unsafe and embedded code, " "and the variable lives through the entirety of the program execution. When a " "globally-scoped value does not have a reason to need object identity, " "`const` is generally preferred." msgstr "" "Як зазначено в [Книзі Rust RFC](https://rust-lang.github.io/rfcs/0246-const-" "vs-static.html), вони не вбудовуються під час використання та мають фактичне " "пов’язане розташування в пам’яті. Це корисно для небезпечного та вбудованого " "коду, і змінна живе протягом усього виконання програми. Якщо значення " "глобальної області видимості не потребує ідентичності об’єкта, перевага " "надається `const`." #: src/basic-syntax/static-and-const.md:49 msgid "" "Because `static` variables are accessible from any thread, they must be " "`Sync`. Interior mutability is possible through a [`Mutex`](https://doc.rust-" "lang.org/std/sync/struct.Mutex.html), atomic or similar. It is also possible " "to have mutable statics, but they require manual synchronisation so any " "access to them requires `unsafe` code. We will look at [mutable statics](../" "unsafe/mutable-static-variables.md) in the chapter on Unsafe Rust." msgstr "" "Оскільки `static` змінні доступні з будь-якого потоку, вони повинні бути " "`Sync`. Внутрішня змінність можлива через [`Mutex`](https://doc.rust-lang." "org/std/sync/struct.Mutex.html), атомарний або подібний. Також можна мати " "змінну статику, але вона потребує ручної синхронізації, тому будь-який " "доступ до них потребує `небезпечного` коду. Ми розглянемо [змінну статику]" "(../unsafe/mutable-static-variables.md) у розділі про небезпечний Rust." #: src/basic-syntax/static-and-const.md:57 msgid "Mention that `const` behaves semantically similar to C++'s `constexpr`." msgstr "Зауважте, що `const` поводиться семантично подібно до `constexpr` C++." #: src/basic-syntax/static-and-const.md:58 msgid "" "`static`, on the other hand, is much more similar to a `const` or mutable " "global variable in C++." msgstr "" "`static`, з іншого боку, набагато більше схожий на `const` або змінну " "глобальну змінну в C++." #: src/basic-syntax/static-and-const.md:59 msgid "" "`static` provides object identity: an address in memory and state as " "required by types with interior mutability such as `Mutex`." msgstr "" "`static` забезпечує ідентичність об’єкта: адресу в пам’яті та стан " "відповідно до типів із внутрішньою змінністю, таких як `Mutex`." #: src/basic-syntax/static-and-const.md:60 msgid "" "It isn't super common that one would need a runtime evaluated constant, but " "it is helpful and safer than using a static." msgstr "" "Це не надто поширене явище, коли потрібна константа з оцінкою часу " "виконання, але це корисно та безпечніше, ніж використовувати static." #: src/basic-syntax/static-and-const.md:61 msgid "`thread_local` data can be created with the macro `std::thread_local`." msgstr "" "Дані `thread_local` можна створити за допомогою макросу `std::thread_local`." #: src/basic-syntax/static-and-const.md:63 msgid "Properties table:" msgstr "Таблиця властивостей:" #: src/basic-syntax/static-and-const.md:65 msgid "Property" msgstr "Власність" #: src/basic-syntax/static-and-const.md:65 msgid "Static" msgstr "Статичний" #: src/basic-syntax/static-and-const.md:65 msgid "Constant" msgstr "Постійний" #: src/basic-syntax/static-and-const.md:67 msgid "Has an address in memory" msgstr "Має адресу в пам'яті" #: src/basic-syntax/static-and-const.md:67 #: src/basic-syntax/static-and-const.md:68 #: src/basic-syntax/static-and-const.md:70 #: src/basic-syntax/static-and-const.md:71 msgid "Yes" msgstr "Так" #: src/basic-syntax/static-and-const.md:67 msgid "No (inlined)" msgstr "Ні (вставлено)" #: src/basic-syntax/static-and-const.md:68 msgid "Lives for the entire duration of the program" msgstr "Живе протягом усього терміну програми" #: src/basic-syntax/static-and-const.md:68 #: src/basic-syntax/static-and-const.md:69 #: src/basic-syntax/static-and-const.md:71 msgid "No" msgstr "Немає" #: src/basic-syntax/static-and-const.md:69 msgid "Can be mutable" msgstr "Може бути змінним" #: src/basic-syntax/static-and-const.md:69 msgid "Yes (unsafe)" msgstr "Так (небезпечно)" #: src/basic-syntax/static-and-const.md:70 msgid "Evaluated at compile time" msgstr "Оцінюється під час компіляції" #: src/basic-syntax/static-and-const.md:70 msgid "Yes (initialised at compile time)" msgstr "Так (ініціалізовано під час компіляції)" #: src/basic-syntax/static-and-const.md:71 msgid "Inlined wherever it is used" msgstr "Вбудований скрізь, де він використовується" #: src/basic-syntax/scopes-shadowing.md:3 msgid "" "You can shadow variables, both those from outer scopes and variables from " "the same scope:" msgstr "" "Ви можете затіняти змінні, як із зовнішніх областей, так і змінні з тієї ж " "області:" #: src/basic-syntax/scopes-shadowing.md:6 msgid "" "```rust,editable\n" "fn main() {\n" " let a = 10;\n" " println!(\"before: {a}\");\n" "\n" " {\n" " let a = \"hello\";\n" " println!(\"inner scope: {a}\");\n" "\n" " let a = true;\n" " println!(\"shadowed in inner scope: {a}\");\n" " }\n" "\n" " println!(\"after: {a}\");\n" "}\n" "```" msgstr "" #: src/basic-syntax/scopes-shadowing.md:25 msgid "" "Definition: Shadowing is different from mutation, because after shadowing " "both variable's memory locations exist at the same time. Both are available " "under the same name, depending where you use it in the code. " msgstr "" "Визначення: затінення відрізняється від мутації, оскільки після затінення " "обидві області пам’яті змінної існують одночасно. Обидва доступні під " "однаковою назвою, залежно від того, де ви її використовуєте в коді." #: src/basic-syntax/scopes-shadowing.md:26 msgid "A shadowing variable can have a different type. " msgstr "Змінна затінення може мати інший тип." #: src/basic-syntax/scopes-shadowing.md:27 msgid "" "Shadowing looks obscure at first, but is convenient for holding on to values " "after `.unwrap()`." msgstr "" "Затінення спочатку виглядає незрозумілим, але зручно для збереження значень " "після `.unwrap()`." #: src/basic-syntax/scopes-shadowing.md:28 msgid "" "The following code demonstrates why the compiler can't simply reuse memory " "locations when shadowing an immutable variable in a scope, even if the type " "does not change." msgstr "" "Наступний код демонструє, чому компілятор не може просто повторно " "використовувати розташування пам’яті під час затінення незмінної змінної в " "області, навіть якщо тип не змінюється." #: src/basic-syntax/scopes-shadowing.md:30 msgid "" "```rust,editable\n" "fn main() {\n" " let a = 1;\n" " let b = &a;\n" " let a = a + 1;\n" " println!(\"{a} {b}\");\n" "}\n" "```" msgstr "" #: src/enums.md:3 msgid "" "The `enum` keyword allows the creation of a type which has a few different " "variants:" msgstr "" "Ключове слово `enum` дозволяє створити тип, який має кілька різних варіантів:" #: src/enums.md:6 msgid "" "```rust,editable\n" "fn generate_random_number() -> i32 {\n" " // Implementation based on https://xkcd.com/221/\n" " 4 // Chosen by fair dice roll. Guaranteed to be random.\n" "}\n" "\n" "#[derive(Debug)]\n" "enum CoinFlip {\n" " Heads,\n" " Tails,\n" "}\n" "\n" "fn flip_coin() -> CoinFlip {\n" " let random_number = generate_random_number();\n" " if random_number % 2 == 0 {\n" " return CoinFlip::Heads;\n" " } else {\n" " return CoinFlip::Tails;\n" " }\n" "}\n" "\n" "fn main() {\n" " println!(\"You got: {:?}\", flip_coin());\n" "}\n" "```" msgstr "" #: src/enums.md:36 msgid "Enumerations allow you to collect a set of values under one type" msgstr "Перерахування дозволяють зібрати набір значень під один тип" #: src/enums.md:37 msgid "" "This page offers an enum type `CoinFlip` with two variants `Heads` and " "`Tails`. You might note the namespace when using variants." msgstr "" "Ця сторінка пропонує тип переліку `CoinFlip` з двома варіантами `Heads` і " "`Tails`. Ви можете звернути увагу на простір імен під час використання " "варіантів." #: src/enums.md:38 msgid "This might be a good time to compare Structs and Enums:" msgstr "Це може бути гарний час для порівняння Structs і Enum:" #: src/enums.md:39 msgid "" "In both, you can have a simple version without fields (unit struct) or one " "with different types of fields (variant payloads). " msgstr "" "В обох ви можете мати просту версію без полів (структура одиниць) або з " "різними типами полів (варіантні корисні навантаження)." #: src/enums.md:40 msgid "In both, associated functions are defined within an `impl` block." msgstr "В обох асоційовані функції визначені в блоці `impl`." #: src/enums.md:41 msgid "" "You could even implement the different variants of an enum with separate " "structs but then they wouldn’t be the same type as they would if they were " "all defined in an enum. " msgstr "" "Ви навіть можете реалізувати різні варіанти enum за допомогою окремих " "структур, але тоді вони не будуть того самого типу, якби вони були визначені " "в enum." #: src/enums/variant-payloads.md:3 msgid "" "You can define richer enums where the variants carry data. You can then use " "the `match` statement to extract the data from each variant:" msgstr "" "Ви можете визначити більш багаті переліки, де варіанти несуть дані. Потім ви " "можете використати оператор `match`, щоб отримати дані з кожного варіанту:" #: src/enums/variant-payloads.md:6 msgid "" "```rust,editable\n" "enum WebEvent {\n" " PageLoad, // Variant without payload\n" " KeyPress(char), // Tuple struct variant\n" " Click { x: i64, y: i64 }, // Full struct variant\n" "}\n" "\n" "#[rustfmt::skip]\n" "fn inspect(event: WebEvent) {\n" " match event {\n" " WebEvent::PageLoad => println!(\"page loaded\"),\n" " WebEvent::KeyPress(c) => println!(\"pressed '{c}'\"),\n" " WebEvent::Click { x, y } => println!(\"clicked at x={x}, y={y}\"),\n" " }\n" "}\n" "\n" "fn main() {\n" " let load = WebEvent::PageLoad;\n" " let press = WebEvent::KeyPress('x');\n" " let click = WebEvent::Click { x: 20, y: 80 };\n" "\n" " inspect(load);\n" " inspect(press);\n" " inspect(click);\n" "}\n" "```" msgstr "" #: src/enums/variant-payloads.md:35 msgid "" "The values in the enum variants can only be accessed after being pattern " "matched. The pattern binds references to the fields in the \"match arm\" " "after the `=>`." msgstr "" "Доступ до значень у варіантах переліку можна отримати лише після " "відповідності шаблону. Шаблон прив’язує посилання до полів у «руці " "відповідності» після `=>`." #: src/enums/variant-payloads.md:36 msgid "" "The expression is matched against the patterns from top to bottom. There is " "no fall-through like in C or C++." msgstr "" "Вираз зіставляється із шаблонами зверху вниз. Немає провалів, як у C або C++." #: src/enums/variant-payloads.md:37 msgid "" "The match expression has a value. The value is the last expression in the " "match arm which was executed." msgstr "" "Вираз відповідності має значення. Значення — це останній вираз у групі " "відповідності, який було виконано." #: src/enums/variant-payloads.md:38 msgid "" "Starting from the top we look for what pattern matches the value then run " "the code following the arrow. Once we find a match, we stop. " msgstr "" "Починаючи згори, ми шукаємо, який шаблон відповідає значенню, а потім " "запускаємо код за стрілкою. Коли ми знаходимо збіг, ми зупиняємось." #: src/enums/variant-payloads.md:39 msgid "" "Demonstrate what happens when the search is inexhaustive. Note the advantage " "the Rust compiler provides by confirming when all cases are handled. " msgstr "" "Продемонструйте, що відбувається, коли пошук є невичерпним. Зверніть увагу " "на перевагу, яку надає компілятор Rust, підтверджуючи, коли всі випадки " "оброблено." #: src/enums/variant-payloads.md:40 msgid "`match` inspects a hidden discriminant field in the `enum`." msgstr "`match` перевіряє приховане дискримінантне поле в `enum`." #: src/enums/variant-payloads.md:41 msgid "" "It is possible to retrieve the discriminant by calling `std::mem::" "discriminant()`" msgstr "Можна отримати дискримінант, викликавши `std::mem::discriminant()`" #: src/enums/variant-payloads.md:42 msgid "" "This is useful, for example, if implementing `PartialEq` for structs where " "comparing field values doesn't affect equality." msgstr "" "Це корисно, наприклад, якщо реалізовано `PartialEq` для структур, де " "порівняння значень полів не впливає на рівність." #: src/enums/variant-payloads.md:43 msgid "" "`WebEvent::Click { ... }` is not exactly the same as `WebEvent::" "Click(Click)` with a top level `struct Click { ... }`. The inlined version " "cannot implement traits, for example." msgstr "" "`WebEvent::Click { ... }` не зовсім те саме, що `WebEvent::Click(Click)` з " "верхньою структурою `struct Click { ... }`. Вбудована версія не може " "реалізувати ознаки, наприклад." #: src/enums/sizes.md:3 msgid "" "Rust enums are packed tightly, taking constraints due to alignment into " "account:" msgstr "" "Переліки Rust упаковані щільно, враховуючи обмеження через вирівнювання:" #: src/enums/sizes.md:5 msgid "" "```rust,editable\n" "use std::any::type_name;\n" "use std::mem::{align_of, size_of};\n" "\n" "fn dbg_size() {\n" " println!(\"{}: size {} bytes, align: {} bytes\",\n" " type_name::(), size_of::(), align_of::());\n" "}\n" "\n" "enum Foo {\n" " A,\n" " B,\n" "}\n" "\n" "fn main() {\n" " dbg_size::();\n" "}\n" "```" msgstr "" #: src/enums/sizes.md:24 msgid "" "See the [Rust Reference](https://doc.rust-lang.org/reference/type-layout." "html)." msgstr "" "Перегляньте [довідник Rust](https://doc.rust-lang.org/reference/type-layout." "html)." #: src/enums/sizes.md:30 msgid "" "Internally Rust is using a field (discriminant) to keep track of the enum " "variant." msgstr "" "Внутрішньо Rust використовує поле (дискримінант), щоб відстежувати варіант " "переліку." #: src/enums/sizes.md:32 msgid "" "You can control the discriminant if needed (e.g., for compatibility with C):" msgstr "" "За потреби можна керувати дискримінантом (наприклад, для сумісності з C):" #: src/enums/sizes.md:34 msgid "" "```rust,editable\n" "#[repr(u32)]\n" "enum Bar {\n" " A, // 0\n" " B = 10000,\n" " C, // 10001\n" "}\n" "\n" "fn main() {\n" " println!(\"A: {}\", Bar::A as u32);\n" " println!(\"B: {}\", Bar::B as u32);\n" " println!(\"C: {}\", Bar::C as u32);\n" "}\n" "```" msgstr "" #: src/enums/sizes.md:49 msgid "" "Without `repr`, the discriminant type takes 2 bytes, because 10001 fits 2 " "bytes." msgstr "" "Без `repr` тип дискримінанта займає 2 байти, оскільки 10001 вміщує 2 байти." #: src/enums/sizes.md:53 msgid "Try out other types such as" msgstr "Спробуйте інші типи, наприклад" #: src/enums/sizes.md:55 msgid "`dbg_size!(bool)`: size 1 bytes, align: 1 bytes," msgstr "`dbg_size!(bool)`: розмір 1 байт, вирівнювання: 1 байт," #: src/enums/sizes.md:56 msgid "" "`dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche optimization, " "see below)," msgstr "" "`dbg_size!(Option)`: розмір 1 байт, вирівнювання: 1 байт (оптимізація " "ніші, див. нижче)," #: src/enums/sizes.md:57 msgid "`dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (on a 64-bit machine)," msgstr "" "`dbg_size!(&i32)`: розмір 8 байт, вирівнювання: 8 байт (на 64-бітній машині)," #: src/enums/sizes.md:58 msgid "" "`dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer " "optimization, see below)." msgstr "" "`dbg_size!(Option<&i32>)`: розмір 8 байтів, вирівнювання: 8 байтів " "(оптимізація нульового вказівника, див. нижче)." #: src/enums/sizes.md:60 msgid "" "Niche optimization: Rust will merge unused bit patterns for the enum " "discriminant." msgstr "" "Оптимізація ніші: Rust об’єднає невикористані шаблони бітів для " "дискримінанта enum." #: src/enums/sizes.md:63 msgid "" "Null pointer optimization: For [some types](https://doc.rust-lang.org/std/" "option/#representation), Rust guarantees that `size_of::()` equals " "`size_of::>()`." msgstr "" "Оптимізація нульового покажчика: для [деяких типів](https://doc.rust-lang." "org/std/option/#representation) Rust гарантує, що `size_of::()` дорівнює " "`size_of::