1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-02-14 00:42:04 +02:00

uk: Concurrency (morning) (#2097)

uk: Concurrency (morning)

Signed-off-by: Andriy Redko <drreta@gmail.com>
This commit is contained in:
Andriy Redko 2024-05-28 06:27:45 -04:00 committed by GitHub
parent a8fc72ef2f
commit 634258ccf0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

327
po/uk.po
View File

@ -1007,7 +1007,7 @@ msgstr "Драйвер годинника реального часу (RTC)"
#: src/SUMMARY.md
msgid "Concurrency: Morning"
msgstr "Паралелізм: Ранок"
msgstr "Одночасність виконання: Ранок"
#: src/SUMMARY.md src/concurrency/threads.md
msgid "Threads"
@ -1066,7 +1066,7 @@ msgstr "Приклад"
#: src/SUMMARY.md src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/solutions-morning.md
msgid "Dining Philosophers"
msgstr "Обідаючи філософи"
msgstr "Вечеря філософів"
#: src/SUMMARY.md src/exercises/concurrency/link-checker.md
msgid "Multi-threaded Link Checker"
@ -1074,7 +1074,7 @@ msgstr "Перевірка багатопоточних посилань"
#: src/SUMMARY.md
msgid "Concurrency: Afternoon"
msgstr "Паралельність: після обіду"
msgstr "Одночасність виконання: Полудень"
#: src/SUMMARY.md
msgid "Async Basics"
@ -20850,15 +20850,15 @@ msgstr "/// Очищає очікуване переривання, якщо т
#: src/concurrency.md
msgid "Welcome to Concurrency in Rust"
msgstr "Ласкаво просимо до Concurrency в Rust"
msgstr "Ласкаво просимо до одночасних обчислень у Rust"
#: src/concurrency.md
msgid ""
"Rust has full support for concurrency using OS threads with mutexes and "
"channels."
msgstr ""
"Rust має повну підтримку паралелізму за допомогою потоків ОС із м’ютексами "
"та каналами."
"Rust має повну підтримку паралелізму та одночасних обчислень за допомогою "
"потоків ОС із м’ютексами та каналами."
#: src/concurrency.md
msgid ""
@ -20866,22 +20866,22 @@ msgid ""
"compile time bugs. This is often referred to as _fearless concurrency_ since "
"you can rely on the compiler to ensure correctness at runtime."
msgstr ""
"Система типів Rust відіграє важливу роль у виникненні багатьох помилок "
"паралелізму під час компіляції. Це часто називають _безстрашним "
"паралелізмом_, оскільки ви можете покластися на компілятор для забезпечення "
"правильності під час виконання."
"Система типів у Rust відіграє важливу роль у тому, що дозволяє зробити "
"багато помилок з одночасним виконанням помилками часу компіляції. Це часто "
"називають _безстрашним одночасним виконанням_, оскільки ви можете покластися "
"на компілятор для забезпечення коректності під час виконання."
#: src/concurrency/threads.md
msgid "Rust threads work similarly to threads in other languages:"
msgstr "Потоки Rust працюють так само, як і на інших мовах:"
msgstr "Потоки Rust працюють так само, як і в інших мовах:"
#: src/concurrency/threads.md
msgid "\"Count in thread: {i}!\""
msgstr ""
msgstr "\"Підрахунок в потоці: {i}!\""
#: src/concurrency/threads.md
msgid "\"Main thread: {i}\""
msgstr ""
msgstr "\"Головний потік: {i}\""
#: src/concurrency/threads.md
msgid "Threads are all daemon threads, the main thread does not wait for them."
@ -20894,16 +20894,15 @@ msgstr "Паніка потоків не залежить одна від одн
#: src/concurrency/threads.md
msgid "Panics can carry a payload, which can be unpacked with `downcast_ref`."
msgstr ""
"Panics може нести корисне навантаження, яке можна розпакувати за допомогою "
"Паніки можуть нести корисне навантаження, яке можна розпакувати за допомогою "
"`downcast_ref`."
#: src/concurrency/threads.md
#, fuzzy
msgid ""
"Notice that the thread is stopped before it reaches 10 --- the main thread "
"is not waiting."
msgstr ""
"Зверніть увагу, що потік зупиняється, не досягнувши 10 головний потік не "
"Зверніть увагу, що потік зупиняється, не досягнувши 10 --- головний потік не "
"чекає."
#: src/concurrency/threads.md
@ -20916,7 +20915,7 @@ msgstr ""
#: src/concurrency/threads.md
msgid "Trigger a panic in the thread, notice how this doesn't affect `main`."
msgstr "Викликати паніку в ланцюжку, зауважте, що це не впливає на `main`."
msgstr "Викликає паніку в потоці, зауважте, що це не впливає на `main`."
#: src/concurrency/threads.md
msgid ""
@ -20937,8 +20936,8 @@ msgid ""
"However, you can use a [scoped thread](https://doc.rust-lang.org/std/thread/"
"fn.scope.html) for this:"
msgstr ""
"Однак для цього можна використовувати [область](https://doc.rust-lang.org/"
"std/thread/fn.scope.html):"
"Однак для цього можна використовувати [потік із обмеженою областю](https://"
"doc.rust-lang.org/std/thread/fn.scope.html):"
#: src/concurrency/scoped-threads.md
msgid ""
@ -20954,20 +20953,20 @@ msgid ""
"Normal Rust borrowing rules apply: you can either borrow mutably by one "
"thread, or immutably by any number of threads."
msgstr ""
"Застосовуються звичайні правила запозичення Rust: ви можете запозичувати "
"змінно одним потоком або незмінно будь-якою кількістю потоків."
"Застосовуються звичайні правила запозичення Rust: ви можете запозичувати або "
"мутабельно одним потоком, або іммутабельно будь-якою кількістю потоків."
#: src/concurrency/channels.md
msgid ""
"Rust channels have two parts: a `Sender<T>` and a `Receiver<T>`. The two "
"parts are connected via the channel, but you only see the end-points."
msgstr ""
"Канали Rust мають дві частини: `Відправник<T>` і `Одержувач<T>`. Дві частини "
"Канали Rust мають дві частини: `Sender<T>` і `Receiver<T>`. Дві частини "
"з’єднані через канал, але ви бачите лише кінцеві точки."
#: src/concurrency/channels.md
msgid "\"Received: {:?}\""
msgstr ""
msgstr "\"Прийнято: {:?}\""
#: src/concurrency/channels.md
msgid ""
@ -20975,17 +20974,17 @@ msgid ""
"implement `Clone` (so you can make multiple producers) but `Receiver` does "
"not."
msgstr ""
"`mpsc` означає Multi-Producer, Single-Consumer. `Sender` і `SyncSender` "
"реалізують `Clone` (тобто ви можете створити кілька виробників), а "
"`Receiver` — ні."
"`mpsc` означає багато виробників, один споживач (Multi-Producer, Single-"
"Consumer). `Sender` і `SyncSender` реалізують `Clone` (тобто ви можете "
"створити кілька виробників), а `Receiver` — ні."
#: src/concurrency/channels.md
msgid ""
"`send()` and `recv()` return `Result`. If they return `Err`, it means the "
"counterpart `Sender` or `Receiver` is dropped and the channel is closed."
msgstr ""
"`send()` і `recv()` повертають `Результат`. Якщо вони повертають `Err`, це "
"означає, що відповідник `Sender` або `Receiver` видалено, а канал закрито."
"`send()` і `recv()` повертають `Result`. Якщо вони повертають `Err`, це "
"означає, що відповідний `Sender` або `Receiver` видалено, а канал закрито."
#: src/concurrency/channels/unbounded.md
msgid "You get an unbounded and asynchronous channel with `mpsc::channel()`:"
@ -20994,19 +20993,19 @@ msgstr ""
#: src/concurrency/channels/unbounded.md src/concurrency/channels/bounded.md
msgid "\"Message {i}\""
msgstr ""
msgstr "\"Повідомлення {i}\""
#: src/concurrency/channels/unbounded.md src/concurrency/channels/bounded.md
msgid "\"{thread_id:?}: sent Message {i}\""
msgstr ""
msgstr "\"{thread_id:?}: надіслано Повідомлення {i}\""
#: src/concurrency/channels/unbounded.md src/concurrency/channels/bounded.md
msgid "\"{thread_id:?}: done\""
msgstr ""
msgstr "\"{thread_id:?}: виконано\""
#: src/concurrency/channels/unbounded.md src/concurrency/channels/bounded.md
msgid "\"Main: got {msg}\""
msgstr ""
msgstr "\"Головний: отримав {msg}\""
#: src/concurrency/channels/bounded.md
msgid ""
@ -21030,32 +21029,31 @@ msgid ""
"if the channel is closed. A channel is closed when the receiver is dropped."
msgstr ""
"Виклик `send` буде перервано з помилкою (ось чому він повертає `Result`), "
"якщо канал закрито. Канал закривається, коли приймач кидається."
"якщо канал закрито. Канал закривається, коли отримувача видалено."
#: src/concurrency/channels/bounded.md
msgid ""
"A bounded channel with a size of zero is called a \"rendezvous channel\". "
"Every send will block the current thread until another thread calls `read`."
msgstr ""
"Обмежений канал розміром нуль називається \"каналом зустрічі\". Кожне "
"Обмежений канал нульовим розміром називається \"каналом зустрічі\". Кожне "
"надсилання блокуватиме поточний потік, доки інший потік не викличе `read`."
#: src/concurrency/send-sync.md
#, fuzzy
msgid ""
"How does Rust know to forbid shared access across threads? The answer is in "
"two traits:"
msgstr ""
"Як Rust знає, що заборонити спільний доступ між потоками? Відповідь полягає "
"в двох рисах:"
"Як Rust знає, що потрібно заборонити спільний доступ до потоків? Відповідь "
"полягає у двох трейтах:"
#: src/concurrency/send-sync.md
msgid ""
"[`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html): a type `T` "
"is `Send` if it is safe to move a `T` across a thread boundary."
msgstr ""
"[`Надіслати`](https://doc.rust-lang.org/std/marker/trait.Send.html): тип `T` "
"є `Надіслати`, якщо безпечно перемістити `T` через межа нитки."
"[`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html): тип `T` є "
"`Send`, якщо безпечно переміщувати `T` через межу потоку."
#: src/concurrency/send-sync.md
msgid ""
@ -21063,7 +21061,7 @@ msgid ""
"is `Sync` if it is safe to move a `&T` across a thread boundary."
msgstr ""
"[`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html): тип `T` є "
"`Sync`, якщо безпечно переміщати `&T` через межа нитки."
"`Sync`, якщо безпечно переміщувати `&T` через межу потоку."
#: src/concurrency/send-sync.md
msgid ""
@ -21072,30 +21070,30 @@ msgid ""
"contain `Send` and `Sync` types. You can also implement them manually when "
"you know it is valid."
msgstr ""
"`Надіслати` та `Синхронізувати` є [небезпечними ознаками](../unsafe/unsafe-"
"traits.md). Компілятор автоматично виведе їх для ваших типів, якщо вони "
"містять лише типи `Send` і `Sync`. Ви також можете застосувати їх вручну, "
"якщо знаєте, що це дійсно."
"`Send` та `Sync` є [небезпечними трейтами](../unsafe/unsafe-traits.md). "
"Компілятор автоматично виведе їх для ваших типів, якщо вони містять лише "
"типи `Send` і `Sync`. Ви також можете застосувати їх вручну, якщо знаєте, що "
"це дійсно."
#: src/concurrency/send-sync.md
msgid ""
"One can think of these traits as markers that the type has certain thread-"
"safety properties."
msgstr ""
"Ці риси можна розглядати як маркери того, що тип має певні властивості "
"Ці трейти можна розглядати як маркери того, що тип має певні властивості "
"безпеки потоків."
#: src/concurrency/send-sync.md
msgid "They can be used in the generic constraints as normal traits."
msgstr "Їх можна використовувати в загальних обмеженнях як звичайні ознаки."
msgstr "Їх можна використовувати в загальних обмеженнях як звичайні трейти."
#: src/concurrency/send-sync/send.md
msgid ""
"A type `T` is [`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html) "
"if it is safe to move a `T` value to another thread."
msgstr ""
"Тип `T` — це [`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html), "
"якщо безпечно перемістити значення `T` в інший потік."
"Тип `T` є [`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html), "
"якщо безпечно переміщати значення `T` в інший потік."
#: src/concurrency/send-sync/send.md
msgid ""
@ -21104,8 +21102,8 @@ msgid ""
"thread and deallocate it in another."
msgstr ""
"Наслідком перенесення права власності на інший потік є те, що _деструктори_ "
"будуть працювати в цьому потоці. Отже, питання полягає в тому, коли ви "
"можете виділити значення в одному потоці та звільнити його в іншому."
"будуть виконани в цьому потоці. Отже, питання полягає в тому, коли ви можете "
"виділити значення в одному потоці та звільнити його в іншому."
#: src/concurrency/send-sync/send.md
msgid ""
@ -21120,8 +21118,8 @@ msgid ""
"A type `T` is [`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html) "
"if it is safe to access a `T` value from multiple threads at the same time."
msgstr ""
"Тип `T` [`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html), "
"якщо безпечно отримати доступ до значення `T` з кількох потоків на Водночас."
"Тип `T` є [`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html), "
"якщо безпечно отримувати доступ до значення `T` з кількох потоків водночас."
#: src/concurrency/send-sync/sync.md
msgid "More precisely, the definition is:"
@ -21129,7 +21127,7 @@ msgstr "Точніше, визначення таке:"
#: src/concurrency/send-sync/sync.md
msgid "`T` is `Sync` if and only if `&T` is `Send`"
msgstr "`T` є `Sync` тоді і тільки якщо `&T` є `Send`"
msgstr "`T` є `Sync` тоді і тільки тоді коли `&T` є `Send`"
#: src/concurrency/send-sync/sync.md
msgid ""
@ -21149,7 +21147,7 @@ msgid ""
"is also safe to move to another thread, because the data it references can "
"be accessed from any thread safely."
msgstr ""
"Це пояснюється тим, що якщо тип Sync, це означає, що він може "
"Це пояснюється тим, що якщо тип є Sync, це означає, що він може "
"використовуватися кількома потоками без ризику перегонів даних або інших "
"проблем із синхронізацією, тому його безпечно перемістити в інший потік. "
"Посилання на тип також безпечно перемістити в інший потік, оскільки дані, на "
@ -21157,7 +21155,7 @@ msgstr ""
#: src/concurrency/send-sync/examples.md
msgid "`Send + Sync`"
msgstr "`Надіслати + синхронізувати`"
msgstr "`Send + Sync`"
#: src/concurrency/send-sync/examples.md
msgid "Most types you come across are `Send + Sync`:"
@ -21169,7 +21167,7 @@ msgstr "`i8`, `f32`, `bool`, `char`, `&str`, ..."
#: src/concurrency/send-sync/examples.md
msgid "`(T1, T2)`, `[T; N]`, `&[T]`, `struct { x: T }`, ..."
msgstr ""
msgstr "`(T1, T2)`, `[T; N]`, `&[T]`, `struct { x: T }`, ..."
#: src/concurrency/send-sync/examples.md
msgid "`String`, `Option<T>`, `Vec<T>`, `Box<T>`, ..."
@ -21193,20 +21191,20 @@ msgid ""
"The generic types are typically `Send + Sync` when the type parameters are "
"`Send + Sync`."
msgstr ""
"Загальні типи, як правило, \"Надіслати + синхронізація\", коли параметри "
"типу мають значення \"Надіслати + синхронізація\"."
"Загальні типи, як правило, є `Send + Sync, коли параметри типу є також `Send "
"+ Sync."
#: src/concurrency/send-sync/examples.md
msgid "`Send + !Sync`"
msgstr "`Надіслати + !Sync`"
msgstr "`Send + !Sync`"
#: src/concurrency/send-sync/examples.md
msgid ""
"These types can be moved to other threads, but they're not thread-safe. "
"Typically because of interior mutability:"
msgstr ""
"Ці типи можна перемістити в інші потоки, але вони небезпечні для потоків. Як "
"правило, через внутрішню мінливість:"
"Ці типи можна переміщувати в інші потоки, але вони не є потокобезпечними. "
"Зазвичай через внутрішню мутабільність:"
#: src/concurrency/send-sync/examples.md
msgid "`mpsc::Sender<T>`"
@ -21218,7 +21216,7 @@ msgstr "`mpsc::Receiver<T>`"
#: src/concurrency/send-sync/examples.md
msgid "`Cell<T>`"
msgstr "`Клітинка<T>`"
msgstr "`Cell<T>`"
#: src/concurrency/send-sync/examples.md
msgid "`RefCell<T>`"
@ -21226,7 +21224,7 @@ msgstr "`RefCell<T>`"
#: src/concurrency/send-sync/examples.md
msgid "`!Send + Sync`"
msgstr "`!Надіслати + синхронізувати`"
msgstr "`!Send + Sync`"
#: src/concurrency/send-sync/examples.md
msgid ""
@ -21234,30 +21232,29 @@ msgid ""
msgstr "Ці типи є потокобезпечними, але їх не можна перемістити в інший потік:"
#: src/concurrency/send-sync/examples.md
#, fuzzy
msgid ""
"`MutexGuard<T: Sync>`: Uses OS level primitives which must be deallocated on "
"the thread which created them."
msgstr ""
"`MutexGuard<T>`: використовує примітиви рівня ОС, які мають бути звільнені в "
"потоці, який їх створив."
"`MutexGuard<T: Sync>`: використовує примітиви рівня ОС, які мають бути "
"звільнені в потоці, який їх створив."
#: src/concurrency/send-sync/examples.md
msgid "`!Send + !Sync`"
msgstr "`!Надіслати + !Синхронізувати`"
msgstr "`!Send + !Sync`"
#: src/concurrency/send-sync/examples.md
msgid "These types are not thread-safe and cannot be moved to other threads:"
msgstr ""
"Ці типи небезпечні для потоків і не можуть бути переміщені в інші потоки:"
"Ці типи є потоконебезпечними і не можуть бути переміщені в інші потоки:"
#: src/concurrency/send-sync/examples.md
msgid ""
"`Rc<T>`: each `Rc<T>` has a reference to an `RcBox<T>`, which contains a non-"
"atomic reference count."
msgstr ""
"`Rc<T>`: кожен `Rc<T>` має посилання на `RcBox<T>`, який містить кількість "
"неатомарних посилань."
"`Rc<T>`: кожен `Rc<T>` має посилання на `RcBox<T>`, який містить "
"неатомарний лічильник посилань."
#: src/concurrency/send-sync/examples.md
msgid ""
@ -21265,7 +21262,7 @@ msgid ""
"considerations."
msgstr ""
"`*const T`, `*mut T`: Rust припускає, що необроблені покажчики можуть мати "
"особливі міркування щодо паралелізму."
"особливі міркування щодо одночасного використання."
#: src/concurrency/shared_state.md
msgid ""
@ -21281,9 +21278,9 @@ msgid ""
"reference counted `T`: handles sharing between threads and takes care to "
"deallocate `T` when the last reference is dropped,"
msgstr ""
"[`Arc<T>`](https://doc.rust-lang.org/std/sync/struct.Arc.html), атомарне "
"посилання з підрахунком `T`: обробляє спільний доступ між потоками та "
"піклується про звільнення `T` ` коли останнє посилання вибрано,"
"[`Arc<T>`](https://doc.rust-lang.org/std/sync/struct.Arc.html), атомарний "
"підрахунок посилань `T`: обробляє спільне використання між потоками і дбає "
"про звільнення `T` при видаленні останнього посилання,"
#: src/concurrency/shared_state.md
msgid ""
@ -21303,11 +21300,11 @@ msgstr ""
#: src/concurrency/shared_state/arc.md
msgid "\"{thread_id:?}: {v:?}\""
msgstr ""
msgstr "\"{thread_id:?}: {v:?}\""
#: src/concurrency/shared_state/arc.md src/concurrency/shared_state/example.md
msgid "\"v: {v:?}\""
msgstr ""
msgstr "\"v: {v:?}\""
#: src/concurrency/shared_state/arc.md
msgid ""
@ -21322,8 +21319,8 @@ msgid ""
"`Arc<T>` implements `Clone` whether or not `T` does. It implements `Send` "
"and `Sync` if and only if `T` implements them both."
msgstr ""
"`Arc<T>` реалізує `Clone` незалежно від того, `T` реалізує це. Він реалізує "
"`Send` і `Sync` тоді і тільки якщо `T` реалізує їх обидва."
"`Arc<T>` реалізує `Clone` незалежно від того, чи `T` реалізує це. Він "
"реалізує `Send` і `Sync` тоді і тільки тоді коли `T` реалізує їх обидва."
#: src/concurrency/shared_state/arc.md
msgid ""
@ -21338,7 +21335,7 @@ msgid ""
"Beware of reference cycles, `Arc` does not use a garbage collector to detect "
"them."
msgstr ""
"Остерігайтеся еталонних циклів, `Arc` не використовує збирач сміття для їх "
"Остерігайтеся циклів посилань, `Arc` не використовує збирач сміття для їх "
"виявлення."
#: src/concurrency/shared_state/arc.md
@ -21346,7 +21343,6 @@ msgid "`std::sync::Weak` can help."
msgstr "`std::sync::Weak` може допомогти."
#: src/concurrency/shared_state/mutex.md
#, fuzzy
msgid ""
"[`Mutex<T>`](https://doc.rust-lang.org/std/sync/struct.Mutex.html) ensures "
"mutual exclusion _and_ allows mutable access to `T` behind a read-only "
@ -21354,12 +21350,13 @@ msgid ""
"mutability)):"
msgstr ""
"[`Mutex<T>`](https://doc.rust-lang.org/std/sync/struct.Mutex.html) "
"забезпечує взаємне виключення _і_ дозволяє змінний доступ до `T` за "
"інтерфейсом лише для читання:"
"забезпечує взаємовиключення _та_ дозволяє мутабельний доступ до `T` за "
"інтерфейсом лише для читання (інша форма [внутрішньої мутабельності](../../"
"borrowing/interior-mutability)):"
#: src/concurrency/shared_state/mutex.md
msgid "\"v: {:?}\""
msgstr ""
msgstr "\"v: {:?}\""
#: src/concurrency/shared_state/mutex.md
msgid ""
@ -21368,16 +21365,15 @@ msgid ""
"implementation."
msgstr ""
"Зверніть увагу, що ми маємо [`impl<T: Send> Sync for Mutex<T>`](https://doc."
"rust-lang.org/std/sync/struct.Mutex.html#impl-Sync-for- Mutex%3CT%3E) "
"загальна реалізація."
"rust-lang.org/std/sync/struct.Mutex.html#impl-Sync-for-Mutex%3CT%3E) "
"загальну реалізацію."
#: src/concurrency/shared_state/mutex.md
#, fuzzy
msgid ""
"`Mutex` in Rust looks like a collection with just one element --- the "
"protected data."
msgstr ""
"`Mutex` у Rust виглядає як колекція лише з одним елементом захищеними "
"`Mutex` у Rust виглядає як колекція лише з одним елементом --- захищеними "
"даними."
#: src/concurrency/shared_state/mutex.md
@ -21399,18 +21395,16 @@ msgid ""
"`Mutex<T>` implements both `Send` and `Sync` iff (if and only if) `T` "
"implements `Send`."
msgstr ""
"`Mutex<T>` реалізує як `Надіслати`, так і `Синхронізувати` тоді (якщо і "
"тільки якщо) `T` реалізує `Надіслати`."
"`Mutex<T>` реалізує як `Send`, так і `Sync` тоді (тоді і тільки тоді) коли "
"`T` реалізує `Send`."
#: src/concurrency/shared_state/mutex.md
#, fuzzy
msgid "A read-write lock counterpart: `RwLock`."
msgstr "Аналог блокування читання-запису - `RwLock`."
msgstr "Аналог блокування читання-запису: `RwLock`."
#: src/concurrency/shared_state/mutex.md
#, fuzzy
msgid "Why does `lock()` return a `Result`?"
msgstr "Чому `lock()` повертає `Результат`?"
msgstr "Чому `lock()` повертає `Result`?"
#: src/concurrency/shared_state/mutex.md
msgid ""
@ -21420,10 +21414,10 @@ msgid ""
"[`PoisonError`](https://doc.rust-lang.org/std/sync/struct.PoisonError.html). "
"You can call `into_inner()` on the error to recover the data regardless."
msgstr ""
"Якщо потік, який утримував `Mutex`, панікував, `Mutex` стає \"отруєним\", "
"Якщо потік, який утримував `Mutex`, запанікував, `Mutex` стає \"отруєним\", "
"сигналізуючи про те, що дані, які він захищає, можуть перебувати в "
"неузгодженому стані. Виклик `lock()` для шкідливого м’ютексу не вдається "
"через [`PoisonError`](https://doc.rust-lang.org/std/sync/struct.PoisonError."
"неузгодженому стані. Виклик `lock()` для отруєнного м’ютексу зазнає невдачі "
"з [`PoisonError`](https://doc.rust-lang.org/std/sync/struct.PoisonError."
"html). Ви можете викликати `into_inner()` для помилки, щоб відновити дані "
"незалежно від цього."
@ -21433,7 +21427,7 @@ msgstr "Давайте подивимося на `Arc` і `Mutex` в дії:"
#: src/concurrency/shared_state/example.md
msgid "// use std::sync::{Arc, Mutex};\n"
msgstr ""
msgstr "// use std::sync::{Arc, Mutex};\n"
#: src/concurrency/shared_state/example.md
msgid "Possible solution:"
@ -21447,7 +21441,9 @@ msgstr "Визначні частини:"
msgid ""
"`v` is wrapped in both `Arc` and `Mutex`, because their concerns are "
"orthogonal."
msgstr "`v` загорнуто в `Arc` і `Mutex`, тому що їх завдання ортогональні."
msgstr ""
"`v` обертається як в `Arc`, так і в `Mutex`, тому що їхні інтереси "
"ортогональні."
#: src/concurrency/shared_state/example.md
msgid ""
@ -21462,35 +21458,38 @@ msgid ""
"`v: Arc<_>` needs to be cloned as `v2` before it can be moved into another "
"thread. Note `move` was added to the lambda signature."
msgstr ""
"`v: Arc<_>` потрібно клонувати як `v2`, перш ніж його можна буде перемістити "
"в інший потік. До лямбда-сигнатури додано примітку `move`."
"`v: Arc<_>` потрібно клонувати як `v2`, перш ніж це можна буде перемістити в "
"інший потік. Зверніть увагу, що до сигнатури лямбда було додано `move`."
#: src/concurrency/shared_state/example.md
msgid ""
"Blocks are introduced to narrow the scope of the `LockGuard` as much as "
"possible."
msgstr "Блоки вводяться, щоб максимально звузити сферу дії `LockGuard`."
msgstr ""
"Блоки вводяться для того, щоб максимально звузити область використання "
"`LockGuard`."
#: src/exercises/concurrency/morning.md
msgid "Let us practice our new concurrency skills with"
msgstr "Давайте потренуємо наші нові навички паралелізму з"
msgstr "Давайте потренуємо наші нові навички одночасного використання з"
#: src/exercises/concurrency/morning.md
msgid "Dining philosophers: a classic problem in concurrency."
msgstr "Обідні філософи: класична проблема паралельності."
msgstr "Вечеря філософів: класична проблема одночасного виконання."
#: src/exercises/concurrency/morning.md
msgid ""
"Multi-threaded link checker: a larger project where you'll use Cargo to "
"download dependencies and then check links in parallel."
msgstr ""
"Багатопотокова перевірка посилань: більший проект, у якому ви "
"Багатопотокова перевірка лінків: більший проект, у якому ви "
"використовуватимете Cargo для завантаження залежностей, а потім паралельно "
"перевірятимете посилання."
"перевірятимете лінкі."
#: src/exercises/concurrency/dining-philosophers.md
msgid "The dining philosophers problem is a classic problem in concurrency:"
msgstr "Проблема обідніх філософів є класичною проблемою паралельності:"
msgstr ""
"Проблема вечері філософів - це класична проблема одночасного виконання:"
#: src/exercises/concurrency/dining-philosophers.md
msgid ""
@ -21503,12 +21502,12 @@ msgid ""
"not eating. After an individual philosopher finishes eating, they will put "
"down both forks."
msgstr ""
"П'ятеро філософів обідають разом за одним столом. У кожного філософа своє "
"П'ятеро філософів вечеряють разом за одним столом. У кожного філософа своє "
"місце за столом. Між кожною тарілкою є виделка. Страва, що подається, являє "
"собою різновид спагетті, які потрібно їсти двома виделками. Кожен філософ "
"собою різновид спагетті, яке потрібно їсти двома виделками. Кожен філософ "
"може лише поперемінно мислити і їсти. Крім того, філософ може їсти свої "
"спагетті лише тоді, коли у них є і ліва, і права виделка. Таким чином, дві "
"виделки будуть доступні лише тоді, коли їхні найближчі сусіди думають, а не "
"спагетті лише тоді, коли у нього є і ліва, і права виделка. Таким чином, дві "
"виделки будуть доступні лише тоді, коли його найближчі сусіди думають, а не "
"їдять. Після того, як окремий філософ закінчує їсти, він кладе обидві "
"виделки."
@ -21518,7 +21517,7 @@ msgid ""
"for this exercise. Copy the code below to a file called `src/main.rs`, fill "
"out the blanks, and test that `cargo run` does not deadlock:"
msgstr ""
"Для цієї вправи вам знадобиться локальна [встановлення Cargo](../../cargo/"
"Для цієї вправи вам знадобиться локальний [встановленний Cargo](../../cargo/"
"running-locally.md). Скопіюйте наведений нижче код у файл під назвою `src/"
"main.rs`, заповніть порожні поля та перевірте, чи `cargo run` не блокує:"
@ -21529,84 +21528,86 @@ msgid ""
" // right_fork: ...\n"
" // thoughts: ...\n"
msgstr ""
"// left_fork: ...\n"
" // right_fork: ...\n"
" // thoughts: ...\n"
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/solutions-morning.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "\"Eureka! {} has a new idea!\""
msgstr ""
msgstr "\"Еврика! {} має нову ідею!\""
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "// Pick up forks...\n"
msgstr ""
msgstr "// Беремо виделки...\n"
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/solutions-morning.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "\"{} is eating...\""
msgstr ""
msgstr "\"{} їсть...\""
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/solutions-morning.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
#, fuzzy
msgid "\"Socrates\""
msgstr "Ящики HAL"
msgstr "\"Сократ\""
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/solutions-morning.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "\"Hypatia\""
msgstr ""
msgstr "\"Гіпатія\""
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/solutions-morning.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "\"Plato\""
msgstr ""
msgstr "\"Платоне\""
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/solutions-morning.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "\"Aristotle\""
msgstr ""
msgstr "\"Аристотель\""
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/solutions-morning.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "\"Pythagoras\""
msgstr ""
msgstr "\"Піфагор\""
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "// Create forks\n"
msgstr ""
msgstr "// Створюємо вилки\n"
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "// Create philosophers\n"
msgstr ""
msgstr "// Створюємо філософів\n"
#: src/exercises/concurrency/dining-philosophers.md
msgid "// Make each of them think and eat 100 times\n"
msgstr ""
msgstr "// Змусимо кожного з них подумати і з'їсти 100 разів\n"
#: src/exercises/concurrency/dining-philosophers.md
#: src/exercises/concurrency/dining-philosophers-async.md
#: src/exercises/concurrency/solutions-afternoon.md
msgid "// Output their thoughts\n"
msgstr ""
msgstr "// Вивести свої думки\n"
#: src/exercises/concurrency/dining-philosophers.md
msgid "You can use the following `Cargo.toml`:"
@ -21621,6 +21622,12 @@ msgid ""
"edition = \"2021\"\n"
"```"
msgstr ""
"```toml\n"
"[package]\n"
"name = \"dining-philosophers\"\n"
"version = \"0.1.0\"\n"
"edition = \"2021\"\n"
"```"
#: src/exercises/concurrency/link-checker.md
msgid ""
@ -21630,10 +21637,10 @@ msgid ""
"until all pages have been validated."
msgstr ""
"Давайте використаємо наші нові знання, щоб створити багатопотоковий засіб "
"перевірки посилань. Він має початися на веб-сторінці та перевірити, чи "
"посилання на сторінці дійсні. Він повинен рекурсивно перевіряти інші "
торінки в тому самому домені та продовжувати робити це, доки всі сторінки "
"не будуть перевірені."
"перевірки лінків. Він має початися з веб-сторінки та перевірити, чи лінкі на "
"сторінці дійсні. Він повинен рекурсивно перевіряти інші сторінки в тому "
"самому домені та продовжувати робити це, доки всі сторінки не будуть "
"перевірені."
#: src/exercises/concurrency/link-checker.md
msgid ""
@ -21641,8 +21648,8 @@ msgid ""
"reqwest/). Create a new Cargo project and `reqwest` it as a dependency with:"
msgstr ""
"Для цього вам знадобиться HTTP-клієнт, наприклад [`reqwest`](https://docs.rs/"
"reqwest/). Створіть новий проект Cargo та `reqwest` його як залежність за "
"допомогою:"
"reqwest/). Створіть новий проект Cargo та додайте `reqwest` до нього як "
"залежність за допомогою:"
#: src/exercises/concurrency/link-checker.md
msgid ""
@ -21658,7 +21665,7 @@ msgid ""
"You will also need a way to find links. We can use [`scraper`](https://docs."
"rs/scraper/) for that:"
msgstr ""
"Вам також знадобиться спосіб пошуку посилань. Для цього ми можемо "
"Вам також знадобиться спосіб пошуку лінків. Для цього ми можемо "
"використовувати [`scraper`](https://docs.rs/scraper/):"
#: src/exercises/concurrency/link-checker.md
@ -21690,6 +21697,19 @@ msgid ""
"thiserror = \"1.0.37\"\n"
"```"
msgstr ""
"```toml\n"
"[package]\n"
"name = \"link-checker\"\n"
"version = \"0.1.0\"\n"
"edition = \"2021\"\n"
"publish = false\n"
"\n"
"[dependencies]\n"
"reqwest = { version = \"0.11.12\", features = [\"blocking\", \"rustls-"
"tls\"] }\n"
"scraper = \"0.13.0\"\n"
"thiserror = \"1.0.37\"\n"
"```"
#: src/exercises/concurrency/link-checker.md
msgid ""
@ -21706,40 +21726,40 @@ msgstr "Ваш файл `src/main.rs` має виглядати приблизн
#: src/exercises/concurrency/link-checker.md
#: src/exercises/concurrency/solutions-morning.md
msgid "\"request error: {0}\""
msgstr ""
msgstr "\"помилка запиту: {0}\""
#: src/exercises/concurrency/link-checker.md
#: src/exercises/concurrency/solutions-morning.md
msgid "\"bad http response: {0}\""
msgstr ""
msgstr "\"погана http відповідь: {0}\""
#: src/exercises/concurrency/link-checker.md
#: src/exercises/concurrency/solutions-morning.md
msgid "\"Checking {:#}\""
msgstr ""
msgstr "\"Перевіряємо {:#}\""
#: src/exercises/concurrency/link-checker.md
#: src/exercises/concurrency/solutions-morning.md
msgid "\"href\""
msgstr ""
msgstr "\"href\""
#: src/exercises/concurrency/link-checker.md
#: src/exercises/concurrency/solutions-morning.md
msgid "\"On {base_url:#}: ignored unparsable {href:?}: {err}\""
msgstr ""
msgstr "\"На {base_url:#}: проігноровано нерозбірливий {href:?}: {err}\""
#: src/exercises/concurrency/link-checker.md
#: src/exercises/concurrency/solutions-morning.md
msgid "\"https://www.google.org\""
msgstr ""
msgstr "\"https://www.google.org\""
#: src/exercises/concurrency/link-checker.md
msgid "\"Links: {links:#?}\""
msgstr ""
msgstr "\"Лінкі: {links:#?}\""
#: src/exercises/concurrency/link-checker.md
msgid "\"Could not extract links: {err:#}\""
msgstr ""
msgstr "\"Не вдалося витягти лінки: {err:#}\""
#: src/exercises/concurrency/link-checker.md
msgid "Run the code in `src/main.rs` with"
@ -21750,9 +21770,9 @@ msgid ""
"Use threads to check the links in parallel: send the URLs to be checked to a "
"channel and let a few threads check the URLs in parallel."
msgstr ""
"Використовуйте потоки для паралельної перевірки посилань: надішліть URL-"
"адреси для перевірки на канал і дозвольте кільком потокам перевіряти URL-"
"адреси паралельно."
"Використовуйте потоки для паралельної перевірки лінків: надішліть URL-адреси "
"для перевірки на канал і дозвольте кільком потокам перевіряти URL-адреси "
"паралельно."
#: src/exercises/concurrency/link-checker.md
msgid ""
@ -21760,13 +21780,13 @@ msgid ""
"org` domain. Put an upper limit of 100 pages or so so that you don't end up "
"being blocked by the site."
msgstr ""
"Розширте це, щоб рекурсивно отримувати посилання з усіх сторінок домену `www."
"Розширте це, щоб рекурсивно отримувати лінкі з усіх сторінок домену `www."
"google.org`. Встановіть верхню межу приблизно в 100 сторінок, щоб вас не "
"заблокував сайт."
#: src/exercises/concurrency/solutions-morning.md
msgid "Concurrency Morning Exercise"
msgstr "Паралельність Ранкова зарядка"
msgstr "Ранкова вправа одночасного виконання"
#: src/exercises/concurrency/solutions-morning.md
msgid "([back to exercise](dining-philosophers.md))"
@ -21774,7 +21794,7 @@ msgstr "([назад до вправи](dining-philosophers.md))"
#: src/exercises/concurrency/solutions-morning.md
msgid "\"{} is trying to eat\""
msgstr ""
msgstr "\"{} намагається їсти\""
#: src/exercises/concurrency/solutions-morning.md
msgid ""
@ -21782,14 +21802,17 @@ msgid ""
" // somewhere. This will swap the forks without deinitializing\n"
" // either of them.\n"
msgstr ""
"// Щоб уникнути глухого кута, ми повинні порушити симетрію\n"
" // десь. Це дозволить поміняти місцями вилки без деініціалізації\n"
" // жодної з них.\n"
#: src/exercises/concurrency/solutions-morning.md
msgid "\"{thought}\""
msgstr ""
msgstr "\"{thought}\""
#: src/exercises/concurrency/solutions-morning.md
msgid "Link Checker"
msgstr "Перевірка посилань"
msgstr "Перевірка лінків"
#: src/exercises/concurrency/solutions-morning.md
msgid "([back to exercise](link-checker.md))"
@ -21798,25 +21821,27 @@ msgstr "([назад до вправи](link-checker.md))"
#: src/exercises/concurrency/solutions-morning.md
msgid ""
"/// Determine whether links within the given page should be extracted.\n"
msgstr ""
msgstr "/// Визначаємо, чи потрібно витягувати лінки на даній сторінці.\n"
#: src/exercises/concurrency/solutions-morning.md
msgid ""
"/// Mark the given page as visited, returning false if it had already\n"
" /// been visited.\n"
msgstr ""
"/// Відмітимо дану сторінку як відвідану, повернувши false, якщо вона вже\n"
" /// була відвідана.\n"
#: src/exercises/concurrency/solutions-morning.md
msgid "// The sender got dropped. No more commands coming in.\n"
msgstr ""
msgstr "// Відправника було видалено. Більше команд не надходить.\n"
#: src/exercises/concurrency/solutions-morning.md
msgid "\"Got crawling error: {:#}\""
msgstr ""
msgstr "\"Виникла помилка при скануванні: {:#}\""
#: src/exercises/concurrency/solutions-morning.md
msgid "\"Bad URLs: {:#?}\""
msgstr ""
msgstr "\"Неправильні URL-адреси: {:#?}\""
#: src/async.md
msgid "Async Rust"