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