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:
parent
a8fc72ef2f
commit
634258ccf0
327
po/uk.po
327
po/uk.po
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user