From 3ff1061c5ff7d70b9b3474ef396d828b0832280f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:05:28 +0100 Subject: [PATCH 01/11] cargo: bump cc from 1.1.14 to 1.1.15 in /src/bare-metal/aps/examples in the patch group (#2340) Bumps the patch group in /src/bare-metal/aps/examples with 1 update: [cc](https://github.com/rust-lang/cc-rs). Updates `cc` from 1.1.14 to 1.1.15
Release notes

Sourced from cc's releases.

cc-v1.1.15

Other

Changelog

Sourced from cc's changelog.

1.1.15 - 2024-08-26

Other

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.1.14&new-version=1.1.15)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/bare-metal/aps/examples/Cargo.lock | 4 ++-- src/bare-metal/aps/examples/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bare-metal/aps/examples/Cargo.lock b/src/bare-metal/aps/examples/Cargo.lock index 497d761ff2a..1e73a454eeb 100644 --- a/src/bare-metal/aps/examples/Cargo.lock +++ b/src/bare-metal/aps/examples/Cargo.lock @@ -27,9 +27,9 @@ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "cc" -version = "1.1.14" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d2eb3cd3d1bf4529e31c215ee6f93ec5a3d536d9f578f93d9d33ee19562932" +checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" dependencies = [ "shlex", ] diff --git a/src/bare-metal/aps/examples/Cargo.toml b/src/bare-metal/aps/examples/Cargo.toml index 25ae962494c..d90ac0fbf2d 100644 --- a/src/bare-metal/aps/examples/Cargo.toml +++ b/src/bare-metal/aps/examples/Cargo.toml @@ -13,7 +13,7 @@ smccc = "0.1.1" spin = "0.9.8" [build-dependencies] -cc = "1.1.14" +cc = "1.1.15" [[bin]] name = "improved" From 44bd72fa3427673319e685329f811c94ef8edd4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:06:07 +0100 Subject: [PATCH 02/11] cargo: bump cc from 1.1.14 to 1.1.15 in /src/exercises/bare-metal/rtc in the patch group (#2341) Bumps the patch group in /src/exercises/bare-metal/rtc with 1 update: [cc](https://github.com/rust-lang/cc-rs). Updates `cc` from 1.1.14 to 1.1.15 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/exercises/bare-metal/rtc/Cargo.lock | 4 ++-- src/exercises/bare-metal/rtc/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/exercises/bare-metal/rtc/Cargo.lock b/src/exercises/bare-metal/rtc/Cargo.lock index 5b72f2a0ba4..81bfb9f653a 100644 --- a/src/exercises/bare-metal/rtc/Cargo.lock +++ b/src/exercises/bare-metal/rtc/Cargo.lock @@ -25,9 +25,9 @@ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "cc" -version = "1.1.14" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d2eb3cd3d1bf4529e31c215ee6f93ec5a3d536d9f578f93d9d33ee19562932" +checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" dependencies = [ "shlex", ] diff --git a/src/exercises/bare-metal/rtc/Cargo.toml b/src/exercises/bare-metal/rtc/Cargo.toml index 96078ce4bdd..b522792d3af 100644 --- a/src/exercises/bare-metal/rtc/Cargo.toml +++ b/src/exercises/bare-metal/rtc/Cargo.toml @@ -15,4 +15,4 @@ smccc = "0.1.1" spin = "0.9.8" [build-dependencies] -cc = "1.1.14" +cc = "1.1.15" From 5f51537c3ef0b3c49c7ed608d6ff454a7b9318c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:06:33 +0100 Subject: [PATCH 03/11] build(deps): bump crate-ci/typos from 1.24.1 to 1.24.3 (#2342) Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.24.1 to 1.24.3. Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d36327e44fb..3ebb627a967 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,7 +37,7 @@ jobs: uses: actions/checkout@v4 - name: Check for typos - uses: crate-ci/typos@v1.24.1 + uses: crate-ci/typos@v1.24.3 with: config: ./.github/typos.toml From 5615b996aa3e13c0463812f72d05f3060e387e8f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:07:21 +0100 Subject: [PATCH 04/11] cargo: bump tokio from 1.39.3 to 1.40.0 in the minor group (#2343) Bumps the minor group with 1 update: [tokio](https://github.com/tokio-rs/tokio). Updates `tokio` from 1.39.3 to 1.40.0 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- mdbook-slide-evaluator/Cargo.toml | 2 +- src/concurrency/async-exercises/chat-async/Cargo.toml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bb3d2819a96..b237e6bb29c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2825,9 +2825,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.3" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", diff --git a/mdbook-slide-evaluator/Cargo.toml b/mdbook-slide-evaluator/Cargo.toml index 827f0274904..8ca3fc74b09 100644 --- a/mdbook-slide-evaluator/Cargo.toml +++ b/mdbook-slide-evaluator/Cargo.toml @@ -17,6 +17,6 @@ log = "0.4.22" pretty_env_logger = "0.5.0" serde = { version = "1.0.209", features = ["derive"] } strum = { version = "0.26.3", features = ["derive"] } -tokio = { version = "1.38.1", features = ["full"] } +tokio = { version = "1.40.0", features = ["full"] } tokio-util = "0.7.11" url = "2.5.2" diff --git a/src/concurrency/async-exercises/chat-async/Cargo.toml b/src/concurrency/async-exercises/chat-async/Cargo.toml index a42a63b04b6..ad4a4318756 100644 --- a/src/concurrency/async-exercises/chat-async/Cargo.toml +++ b/src/concurrency/async-exercises/chat-async/Cargo.toml @@ -6,5 +6,5 @@ edition = "2021" [dependencies] futures-util = { version = "0.3.30", features = ["sink"] } http = "1.1.0" -tokio = { version = "1.39.3", features = ["full"] } +tokio = { version = "1.40.0", features = ["full"] } tokio-websockets = { version = "0.9.0", features = ["client", "fastrand", "server", "sha1_smol"] } From 8e976ca734ff0df8716313802c531374606cbc6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:07:29 +0100 Subject: [PATCH 05/11] cargo: bump the patch group with 3 updates (#2344) Bumps the patch group with 3 updates: [fantoccini](https://github.com/jonhoo/fantoccini), [cxx](https://github.com/dtolnay/cxx) and [cxx-build](https://github.com/dtolnay/cxx). Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 20 ++++++++++---------- mdbook-slide-evaluator/Cargo.toml | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b237e6bb29c..b3eeb332b02 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -483,9 +483,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.126" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c4eae4b7fc8dcb0032eb3b1beee46b38d371cdeaf2d0c64b9944f6f69ad7755" +checksum = "54ccead7d199d584d139148b04b4a368d1ec7556a1d9ea2548febb1b9d49f9a4" dependencies = [ "cc", "cxxbridge-flags", @@ -495,9 +495,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.126" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c822bf7fb755d97328d6c337120b6f843678178751cba33c9da25cf522272e0" +checksum = "c77953e99f01508f89f55c494bfa867171ef3a6c8cea03d26975368f2121a5c1" dependencies = [ "cc", "codespan-reporting", @@ -510,15 +510,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.126" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719d6197dc016c88744aff3c0d0340a01ecce12e8939fc282e7c8f583ee64bc6" +checksum = "65777e06cc48f0cb0152024c77d6cf9e4bdb4408e7b48bea993d42fa0f5b02b6" [[package]] name = "cxxbridge-macro" -version = "1.0.126" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35de3b547387863c8f82013c4f79f1c2162edee956383e4089e1d04c18c4f16c" +checksum = "98532a60dedaebc4848cb2cba5023337cc9ea3af16a5b062633fabfd9f18fb60" dependencies = [ "proc-macro2", "quote", @@ -696,9 +696,9 @@ dependencies = [ [[package]] name = "fantoccini" -version = "0.21.1" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871139c015d646c5fbe287b85876fa060c9d7870ccc388e989c056b303d8462a" +checksum = "dd52b63e98251013cd5a9e881b9d460fc530e5df4eec58930c9694d6497c53e5" dependencies = [ "base64 0.22.0", "cookie 0.18.1", diff --git a/mdbook-slide-evaluator/Cargo.toml b/mdbook-slide-evaluator/Cargo.toml index 8ca3fc74b09..d94e41abbcc 100644 --- a/mdbook-slide-evaluator/Cargo.toml +++ b/mdbook-slide-evaluator/Cargo.toml @@ -11,7 +11,7 @@ description = "A tool for evaluating mdbook slides by rendering the html pages a anyhow = "1.0.86" clap = { version = "4.5.9", features = ["derive"] } csv = "1.3.0" -fantoccini = "0.21.1" +fantoccini = "0.21.2" glob = "0.3.1" log = "0.4.22" pretty_env_logger = "0.5.0" From 6110074d1386a58fcd7708047ef62acea494ea22 Mon Sep 17 00:00:00 2001 From: Danny Khosravi Date: Mon, 2 Sep 2024 14:05:38 +0330 Subject: [PATCH 06/11] fa: android fa 3/4 translated (#2345) fa: android fa 3/4 translated --------- Co-authored-by: javad-jafari Co-authored-by: javad-jafari <65780584+javad-jafari@users.noreply.github.com> --- po/fa.po | 259 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 192 insertions(+), 67 deletions(-) diff --git a/po/fa.po b/po/fa.po index 611dd017cb7..d67c042c251 100644 --- a/po/fa.po +++ b/po/fa.po @@ -12702,78 +12702,97 @@ msgid "// Create a binder object for the `IBirthdayInfoProvider` interface.\n" msgstr "// Create a binder object for the `IBirthdayInfoProvider` interface.\n" #: src/android/aidl/types/objects.md:62 +#, fuzzy msgid "// Send the binder object to the service.\n" -msgstr "" +msgstr "// SAFETY: `abs` doesn't have any safety requirements.\n" #: src/android/aidl/types/objects.md:65 +#, fuzzy msgid "" "// Perform the same operation but passing the provider as an `SpIBinder`.\n" msgstr "" +"// Perform the same operation but passing the provider as an `SpIBinder`.\n" #: src/android/aidl/types/objects.md:72 msgid "" "Note the usage of `BnBirthdayInfoProvider`. This serves the same purpose as " "`BnBirthdayService` that we saw previously." msgstr "" +"به استفاده از `BnBirthdayInfoProvider` توجه کنید. این همان هدف " +"`BnBirthdayService` است که قبلاً دیدیم." #: src/android/aidl/types/parcelables.md:3 +#, fuzzy msgid "Binder for Rust supports sending parcelables directly:" -msgstr "" +msgstr "‏ Binder برای Rust از ارسال مستقیم بسته‌بندی‌ها پشتیبانی می‌کند:" #: src/android/aidl/types/parcelables.md:5 msgid "" "**birthday_service/aidl/com/example/birthdayservice/BirthdayInfo.aidl**:" msgstr "" +"**birthday_service/aidl/com/example/birthdayservice/BirthdayInfo.aidl**:" #: src/android/aidl/types/parcelables.md:22 +#, fuzzy msgid "/** The same thing, but with a parcelable. */" -msgstr "" +msgstr "/** The same thing, but with a parcelable. */" #: src/android/aidl/types/file-descriptor.md:3 msgid "" "Files can be sent between Binder clients/servers using the " "`ParcelFileDescriptor` type:" msgstr "" +"فایل‌ها را می‌توان با استفاده از نوع `ParcelFileDescriptor` بین کلاینت‌ها/" +"سرورهای Binder ارسال کرد:" #: src/android/aidl/types/file-descriptor.md:10 +#, fuzzy msgid "/** The same thing, but loads info from a file. */" -msgstr "" +msgstr "/** The same thing, but loads info from a file. */" #: src/android/aidl/types/file-descriptor.md:22 +#, fuzzy msgid "// Open a file and put the birthday info in it.\n" -msgstr "" +msgstr "// Open a file and put the birthday info in it.\n" #: src/android/aidl/types/file-descriptor.md:23 msgid "\"/data/local/tmp/birthday.info\"" -msgstr "" +msgstr "\"/data/local/tmp/birthday.info\"" #: src/android/aidl/types/file-descriptor.md:24 msgid "\"{name}\"" -msgstr "" +msgstr "\"{name}\"" #: src/android/aidl/types/file-descriptor.md:25 msgid "\"{years}\"" -msgstr "" +msgstr "\"{years}\"" #: src/android/aidl/types/file-descriptor.md:27 +#, fuzzy msgid "// Create a `ParcelFileDescriptor` from the file and send it.\n" -msgstr "" +msgstr "// Create a `ParcelFileDescriptor` from the file and send it.\n" #: src/android/aidl/types/file-descriptor.md:33 msgid "**birthday_service/src/lib.rs**:" -msgstr "" +msgstr "**birthday_service/src/lib.rs**:" #: src/android/aidl/types/file-descriptor.md:41 +#, fuzzy msgid "" "// Convert the file descriptor to a `File`. `ParcelFileDescriptor` wraps\n" " // an `OwnedFd`, which can be cloned and then used to create a " "`File`\n" " // object.\n" msgstr "" +"// Convert the file descriptor to a `File`. `ParcelFileDescriptor` wraps\n" +" // an `OwnedFd`, which can be cloned and then used to create a " +"`File`\n" +" // object.\n" #: src/android/aidl/types/file-descriptor.md:48 +#, fuzzy msgid "\"Invalid file handle\"" -msgstr "" +msgstr "\"Invalid file handle\"" #: src/android/aidl/types/file-descriptor.md:64 msgid "" @@ -12781,80 +12800,89 @@ msgid "" "`File` (or any other type that wraps an `OwnedFd`), and can be used to " "create a new `File` handle on the other side." msgstr "" +"‏ `ParcelFileDescriptor` یک `OwnedFd` را احاطه می‌کند و بنابراین می‌تواند از یک " +"`File` (یا هر نوع دیگری که یک `OwnedFd` را احاطه می‌کند) ایجاد کند و می‌تواند " +"برای ایجاد یک دسته `File` جدید در طرف دیگر استفاده شود." #: src/android/aidl/types/file-descriptor.md:67 msgid "" "Other types of file descriptors can be wrapped and sent, e.g. TCP, UDP, and " "UNIX sockets." msgstr "" +"انواع دیگر توصیف‌گرهای فایل را می توان بسته‌بندی و ارسال کرد، به‌عنوان‌مثال. " +"سوکت های TCP، UDP و UNIX." #: src/android/testing.md -#, fuzzy msgid "Testing in Android" -msgstr "Rust در اندروید" +msgstr "تست‌کردن در Android" #: src/android/testing.md msgid "" "Building on [Testing](../testing.md), we will now look at how unit tests " "work in AOSP. Use the `rust_test` module for your unit tests:" msgstr "" +"بر اساس [Testing](../testing.md)، اکنون به نحوه عملکرد unit testها در AOSP " +"خواهیم پرداخت. از ماژول `rust_test` برای تست های واحد خود استفاده کنید:" #: src/android/testing.md -#, fuzzy msgid "_testing/Android.bp_:" -msgstr "Rust در اندروید" +msgstr "_testing/Android.bp_:" #: src/android/testing.md msgid "\"libleftpad\"" -msgstr "" +msgstr "\"libleftpad\"" #: src/android/testing.md +#, fuzzy msgid "\"leftpad\"" -msgstr "" +msgstr "leftpad\"" #: src/android/testing.md msgid "\"libleftpad_test\"" -msgstr "" +msgstr "\"libleftpad_test\"" #: src/android/testing.md +#, fuzzy msgid "\"leftpad_test\"" -msgstr "" +msgstr "\"leftpad_test\"" #: src/android/testing.md src/android/interoperability/with-c/bindgen.md:116 msgid "\"general-tests\"" -msgstr "" +msgstr "\"general-tests\"" #: src/android/testing.md msgid "_testing/src/lib.rs_:" -msgstr "" +msgstr "_testing/src/lib.rs_:" #: src/android/testing.md +#, fuzzy msgid "//! Left-padding library.\n" -msgstr "" +msgstr "//! Left-padding library.\n" #: src/android/testing.md +#, fuzzy msgid "/// Left-pad `s` to `width`.\n" -msgstr "" +msgstr "/// Left-pad `s` to `width`.\n" #: src/android/testing.md msgid "\"{s:>width$}\"" -msgstr "" +msgstr "\"{s:>width$}\"" #: src/android/testing.md msgid "\" foo\"" -msgstr "" +msgstr "\" foo\"" #: src/android/testing.md msgid "\"foobar\"" -msgstr "" +msgstr "\"foobar\"" #: src/android/testing.md msgid "You can now run the test with" -msgstr "" +msgstr "اکنون می توانید تست را با" #: src/android/testing.md msgid "The output looks like this:" -msgstr "" +msgstr "خروجی به شکل زیر است:" #: src/android/testing.md msgid "" @@ -12869,32 +12897,48 @@ msgid "" "Test cases: finished with 2 passing and 0 failing out of 2 test cases\n" "```" msgstr "" +"```text\n" +"INFO: Elapsed time: 2.666s, Critical Path: 2.40s\n" +"INFO: 3 processes: 2 internal, 1 linux-sandbox.\n" +"INFO: Build completed successfully, 3 total actions\n" +"//comprehensive-rust-android/testing:libleftpad_test_host PASSED " +"in 2.3s\n" +" PASSED libleftpad_test.tests::long_string (0.0s)\n" +" PASSED libleftpad_test.tests::short_string (0.0s)\n" +"Test cases: finished with 2 passing and 0 failing out of 2 test cases\n" +"```" #: src/android/testing.md msgid "" "Notice how you only mention the root of the library crate. Tests are found " "recursively in nested modules." msgstr "" +"توجه کنید که چگونه فقط ریشه crate کتابخانه را ذکر می‌کنید. تست‌ها به صورت " +"بازگشتی در ماژول‌های تودرتو یافت می‌شوند." #: src/android/testing/googletest.md:3 msgid "" "The [GoogleTest](https://docs.rs/googletest/) crate allows for flexible test " "assertions using _matchers_:" msgstr "" +"جعبه [GoogleTest](https://docs.rs/googletest/) با استفاده از _matchers_ " +"اجازه می‌دهد تا assertهای آزمایشی انعطاف‌پذیر را انجام دهید:" #: src/android/testing/googletest.md:11 msgid "\"baz\"" -msgstr "" +msgstr "\"baz\"" #: src/android/testing/googletest.md:12 msgid "\"xyz\"" -msgstr "" +msgstr "\"xyz\"" #: src/android/testing/googletest.md:16 msgid "" "If we change the last element to `\"!\"`, the test fails with a structured " "error message pin-pointing the error:" msgstr "" +"اگر آخرین عنصر را به`\"!\"`تغییر دهیم، آزمایش با یک پیغام خطای ساختار یافته " +"که خطا را pin-pointing می‌کند، شکست می خورد:" #: src/android/testing/googletest.md:37 msgid "" @@ -12902,6 +12946,9 @@ msgid "" "example in a local environment. Use `cargo add googletest` to quickly add it " "to an existing Cargo project." msgstr "" +"‏ GoogleTest بخشی از Rust Playground نیست، بنابراین باید این مثال را در یک " +"محیط local اجرا کنید. برای افزودن سریع آن به پروژه Cargo موجود، از `cargo " +"add googletest` استفاده کنید." #: src/android/testing/googletest.md:41 msgid "" @@ -12909,6 +12956,9 @@ msgid "" "macros and types](https://docs.rs/googletest/latest/googletest/prelude/index." "html)." msgstr "" +"خط `use googletest::prelude::*;` تعدادی از [ماکروها و typeهای پرکاربرد]" +"(https://docs.rs/googletest/latest/googletest/prelude/index.html) را وارد " +"می‌کند." #: src/android/testing/googletest.md:44 msgid "" @@ -12919,12 +12969,19 @@ msgid "" "the library, with exercises to help you get comfortable with `googletest` " "macros, its matchers and its overall philosophy." msgstr "" +"این فقط سطح را نشان می‌دهد، تطبیق‌های داخلی زیادی وجود دارد. فصل اول [‌آزمایش " +"پیشرفته برای برنامه های Rust]‌(https://github.com/mainmatter/rust-advanced-" +"testing-workshop)، یک دوره آموزشی Rust را در نظر بگیرید: این یک مقدمه " +"راهنمایی برای کتابخانه با تمرین‌هایی که به شما کمک می‌کند با ماکروهای " +"`googletest` و مطابقت‌های آن و فلسفه کلی آن راحت باشید." #: src/android/testing/googletest.md:51 msgid "" "A particularly nice feature is that mismatches in multi-line strings are " "shown as a diff:" msgstr "" +"یک ویژگی خاص خوب این است که عدم تطابق در string‌های چند خطی به صورت یک تفاوت " +"نشان داده می شود:" #: src/android/testing/googletest.md:57 msgid "" @@ -12932,6 +12989,9 @@ msgid "" " Rust's strong typing guides the way,\\n\\\n" " Secure code you'll write.\"" msgstr "" +"\"Memory safety found,\\n\\\n" +" Rust's strong typing guides the way,\\n\\\n" +" Secure code you'll write.\"" #: src/android/testing/googletest.md:62 msgid "" @@ -12939,16 +12999,21 @@ msgid "" " Rust's silly humor guides the way,\\n\\\n" " Secure code you'll write.\"" msgstr "" +"\"Memory safety found,\\n\\\n" +" Rust's silly humor guides the way,\\n\\\n" +" Secure code you'll write.\"" #: src/android/testing/googletest.md:69 msgid "shows a color-coded diff (colors not shown here):" -msgstr "" +msgstr "تفاوت رنگی را نشان می‌دهد (رنگ ها در اینجا نشان‌داده نمی‌شوند):" #: src/android/testing/googletest.md:86 msgid "" "The crate is a Rust port of [GoogleTest for C++](https://google.github.io/" "googletest/)." msgstr "" +"این crate یک پورت [GoogleTest for C++]‌(https://google.github.io/googletest/) " +"در Rust است." #: src/android/testing/mocking.md:3 msgid "" @@ -12956,6 +13021,9 @@ msgid "" "You need to refactor your code to use traits, which you can then quickly " "mock:" msgstr "" +"برای mocking از [Mockall](https://docs.rs/mockall/) که یک کتابخانه محبوب " +"بوده استفاده شده است. برای استفاده از traitها، باید کد خود را مجدداً تغییر " +"دهید، سپس می‌توانید به سرعت آنها را mock کنید:" #: src/android/testing/mocking.md:27 msgid "" @@ -12965,6 +13033,11 @@ msgid "" "libraries work in a similar fashion as Mockall, meaning that they make it " "easy to get a mock implementation of a given trait." msgstr "" +"‏ Mockall کتابخانه mocking توصیه شده در Android (AOSP) است. [کتابخانه‌های " +"mocking دیگری در crates.io](https://crates.io/keywords/mock) در دسترس هستند، " +"به‌ویژه در زمینه سرویس‌های mocking HTTP. سایر کتابخانه‌های mocking به روشی " +"مشابه Mockall کار می‌کنند، به این معنی که اجرای ساختگی یا mock یک ویژگی خاص " +"را آسان می‌کنند." #: src/android/testing/mocking.md:33 msgid "" @@ -12973,14 +13046,25 @@ msgid "" "more stable test execution. On the other hand, the mocks can be configured " "wrongly and return output different from what the real dependencies would do." msgstr "" +"توجه داشته باشید که mocking تا حدودی _جنجال_برانگیز_ است: mockها به شما این " +"امکان را می‌دهند که آزمون را کاملاً از وابستگی‌های آن جدا کنید. نتیجه فوری آن، " +"اجرای سریع‌تر و پایدارتر تست است. از طرف دیگر، mockها را می توان به اشتباه " +"پیکربندی کرد و خروجی متفاوتی با آنچه وابستگی های واقعی انجام می دادند را " +"برگرداند." #: src/android/testing/mocking.md:38 +#, fuzzy msgid "" "If at all possible, it is recommended that you use the real dependencies. As " "an example, many databases allow you to configure an in-memory backend. This " "means that you get the correct behavior in your tests, plus they are fast " "and will automatically clean up after themselves." msgstr "" +"در صورت امکان، توصیه می‌شود از وابستگی‌های واقعی استفاده کنید. به عنوان مثال، " +"بسیاری از پایگاه‌داده‌ها به شما اجازه می‌دهند تا یک in-memory backend را " +"پیکربندی کنید. این به این معنی است که شما در تست های خود رفتار صحیح را " +"دریافت می کنید، به علاوه آنها سریع هستند و به طور خودکار پس از اجرای عملیات " +"مخصوص به خود پاک می شوند." #: src/android/testing/mocking.md:43 msgid "" @@ -12988,6 +13072,10 @@ msgid "" "binds to a random port on `localhost`. Always prefer this over mocking away " "the framework since it helps you test your code in the real environment." msgstr "" +"به‌طور‌ مشابه، بسیاری از frameworkهای وب به شما اجازه می‌دهند یک سرور در یک " +"process دیگر راه‌اندازی کنید که به یک پورت تصادفی در `localhost` متصل می‌شود. " +"همیشه این را به mock کردن framework ترجیح دهید زیرا به شما کمک می‌کند کد خود " +"را در محیط واقعی آزمایش کنید." #: src/android/testing/mocking.md:47 msgid "" @@ -12995,6 +13083,9 @@ msgid "" "in a local environment. Use `cargo add mockall` to quickly add Mockall to an " "existing Cargo project." msgstr "" +"‏ Mockall بخشی از Rust Playground نیست، بنابراین باید این مثال را در یک محیط " +"local اجرا کنید. از `cargo add mockall` برای اضافه کردن سریع Mockall به " +"پروژه Cargo موجود استفاده کنید." #: src/android/testing/mocking.md:51 msgid "" @@ -13002,6 +13093,10 @@ msgid "" "expectations which depend on the arguments passed. Here we use this to mock " "a cat which becomes hungry 3 hours after the last time it was fed:" msgstr "" +"‏ Mockall عملکرد بسیار بیشتری دارد. به ویژه، می‌توانید انتظاراتی را تنظیم کنید " +"که به استدلال های ارائه شده بستگی دارد. در اینجا ما از این برای mock کردن " +"عملکرد cat استفاده می‌کنیم که 3 ساعت پس از آخرین باری که به آن غذا داده شده " +"گرسنه می‌شود:" #: src/android/testing/mocking.md:69 msgid "" @@ -13009,61 +13104,71 @@ msgid "" "called to `n` --- the mock will automatically panic when dropped if this " "isn't satisfied." msgstr "" +"می‌توانید از `.times(n)` برای محدود‌کردن تعداد دفعاتی که یک mock method " +"می‌تواند به`n` فراخوانی شود استفاده کنید --- در صورت عدم ارضای این روش، زمانی " +"که آن را حذف کنید به‌طور خودکار دچار panic می‌شود." #: src/android/logging.md msgid "" "You should use the `log` crate to automatically log to `logcat` (on-device) " "or `stdout` (on-host):" msgstr "" +"باید از `log` crate برای ورود خودکار به`logcat` (روی دستگاه) یا `stdout` " +"(روی host) استفاده کنید:" #: src/android/logging.md msgid "_hello_rust_logs/Android.bp_:" -msgstr "" +msgstr "_hello_rust_logs/Android.bp_:" #: src/android/logging.md msgid "\"hello_rust_logs\"" -msgstr "" +msgstr "\"hello_rust_logs\"" #: src/android/logging.md msgid "\"liblog_rust\"" -msgstr "" +msgstr "\"liblog_rust\"" #: src/android/logging.md msgid "\"liblogger\"" -msgstr "" +msgstr "\"liblogger\"" #: src/android/logging.md msgid "_hello_rust_logs/src/main.rs_:" -msgstr "" +msgstr "_hello_rust_logs/src/main.rs_:" #: src/android/logging.md +#, fuzzy msgid "//! Rust logging demo.\n" -msgstr "" +msgstr "//! Rust logging demo.\n" #: src/android/logging.md +#, fuzzy msgid "/// Logs a greeting.\n" -msgstr "" +msgstr "/// Logs a greeting.\n" #: src/android/logging.md msgid "\"rust\"" -msgstr "" +msgstr "\"rust\"" #: src/android/logging.md +#, fuzzy msgid "\"Starting program.\"" -msgstr "" +msgstr "\"Starting program.\"" #: src/android/logging.md +#, fuzzy msgid "\"Things are going fine.\"" -msgstr "" +msgstr "\"Things are going fine.\"" #: src/android/logging.md +#, fuzzy msgid "\"Something went wrong!\"" -msgstr "" +msgstr "\"Something went wrong!\"" #: src/android/logging.md src/android/interoperability/with-c/bindgen.md:99 #: src/android/interoperability/with-c/rust.md:72 msgid "Build, push, and run the binary on your device:" -msgstr "" +msgstr "ساخت، push و اجرای باینری‌ها روی یک ماشین." #: src/android/logging.md msgid "" @@ -13074,132 +13179,152 @@ msgid "" "adb shell /data/local/tmp/hello_rust_logs\n" "```" msgstr "" +"```shell\n" +"m hello_rust_logs\n" +"adb push \"$ANDROID_PRODUCT_OUT/system/bin/hello_rust_logs\" /data/local/" +"tmp\n" +"adb shell /data/local/tmp/hello_rust_logs\n" +"```" #: src/android/logging.md msgid "The logs show up in `adb logcat`:" -msgstr "" +msgstr "لاگ‌ها در `adb logcat` نشان‌داده می‌شوند:" #: src/android/interoperability.md msgid "" "Rust has excellent support for interoperability with other languages. This " "means that you can:" msgstr "" +"‏‌Rust از قابلیت همکاری با زبان‌های دیگر پشتیبانی می‌کند. این بدان معنی است که " +"شما می‌توانید:" #: src/android/interoperability.md msgid "Call Rust functions from other languages." -msgstr "" +msgstr "توابع Rust را از زبان های دیگر فراخوانی کنید." #: src/android/interoperability.md msgid "Call functions written in other languages from Rust." -msgstr "" +msgstr "فراخوانی توابع نوشته شده به زبان های دیگر از Rust." #: src/android/interoperability.md msgid "" "When you call functions in a foreign language we say that you're using a " "_foreign function interface_, also known as FFI." msgstr "" +"وقتی توابعی را به‌ یک زبان خارجی فراخوانی می‌کنید، می‌گوییم که از یک رابط تابع " +"خارج( _foreign function interface_) که به نام FFI نیز شناخته می‌شود، استفاده " +"می‌کنید." #: src/android/interoperability/with-c.md:1 msgid "Interoperability with C" -msgstr "" +msgstr "قابلیت همکاری با C" #: src/android/interoperability/with-c.md:3 msgid "" "Rust has full support for linking object files with a C calling convention. " "Similarly, you can export Rust functions and call them from C." msgstr "" +"‏ Rust پشتیبانی کاملی برای link دادن object fileهایی با یک فراخوانی C دارد. " +"به طور مشابه، می توانید توابع Rust را export کرده و آنها را از C فراخوانی " +"کنید." #: src/android/interoperability/with-c.md:6 msgid "You can do it by hand if you want:" -msgstr "" +msgstr "در صورت تمایل می‌توانید این کار را دستی انجام دهید:" #: src/android/interoperability/with-c.md:15 +#, fuzzy msgid "// SAFETY: `abs` doesn't have any safety requirements.\n" -msgstr "" +msgstr "// SAFETY: `abs` doesn't have any safety requirements.\n" #: src/android/interoperability/with-c.md:17 msgid "\"{x}, {abs_x}\"" -msgstr "" +msgstr "\"{x}, {abs_x}\"" #: src/android/interoperability/with-c.md:21 msgid "" "We already saw this in the [Safe FFI Wrapper exercise](../../unsafe-rust/" "exercise.md)." msgstr "" +"ما قبلاً این را در [تمرین Safe FFI Wrapper](../../unsafe-rust/exercise.md) " +"دیدیم." #: src/android/interoperability/with-c.md:24 msgid "" "This assumes full knowledge of the target platform. Not recommended for " "production." msgstr "" +"این مستلزم آگاهی کامل از پلتفرم هدف است و برای production توصیه نمی‌شود." #: src/android/interoperability/with-c.md:27 msgid "We will look at better options next." -msgstr "" +msgstr "در ادامه گزینه‌های بهتر را بررسی خواهیم کرد." #: src/android/interoperability/with-c/bindgen.md:1 msgid "Using Bindgen" -msgstr "" +msgstr "با استفاده از Bindgen" #: src/android/interoperability/with-c/bindgen.md:3 msgid "" "The [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) " "tool can auto-generate bindings from a C header file." msgstr "" +"ابزار [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) " +"می‌تواند اتصالات را از یک فایل هدر C به طور خودکار ایجاد کند." #: src/android/interoperability/with-c/bindgen.md:6 msgid "First create a small C library:" -msgstr "" +msgstr "ابتدا یک کتابخانه کوچک C ایجاد کنید:" #: src/android/interoperability/with-c/bindgen.md:8 msgid "_interoperability/bindgen/libbirthday.h_:" -msgstr "" +msgstr "_interoperability/bindgen/libbirthday.h_:" #: src/android/interoperability/with-c/bindgen.md:19 msgid "_interoperability/bindgen/libbirthday.c_:" -msgstr "" +msgstr "_interoperability/bindgen/libbirthday.c_:" #: src/android/interoperability/with-c/bindgen.md:22 msgid "" -msgstr "" +msgstr "" #: src/android/interoperability/with-c/bindgen.md:23 #: src/android/interoperability/with-c/bindgen.md:50 msgid "\"libbirthday.h\"" -msgstr "" +msgstr "\"libbirthday.h\"" #: src/android/interoperability/with-c/bindgen.md:26 #: src/android/interoperability/with-c/bindgen.md:29 msgid "\"+--------------\\n\"" -msgstr "" +msgstr "\"+--------------\\n\"" #: src/android/interoperability/with-c/bindgen.md:27 msgid "\"| Happy Birthday %s!\\n\"" -msgstr "" +msgstr "\"| Happy Birthday %s!\\n\"" #: src/android/interoperability/with-c/bindgen.md:28 msgid "\"| Congratulations with the %i years!\\n\"" -msgstr "" +msgstr "\"| Congratulations with the %i years!\\n\"" #: src/android/interoperability/with-c/bindgen.md:33 msgid "Add this to your `Android.bp` file:" -msgstr "" +msgstr "این را به فایل `Android.bp` خود اضافه کنید:" #: src/android/interoperability/with-c/bindgen.md:35 #: src/android/interoperability/with-c/bindgen.md:55 #: src/android/interoperability/with-c/bindgen.md:69 #: src/android/interoperability/with-c/bindgen.md:109 msgid "_interoperability/bindgen/Android.bp_:" -msgstr "" +msgstr "_interoperability/bindgen/Android.bp_:" #: src/android/interoperability/with-c/bindgen.md:39 #: src/android/interoperability/with-c/bindgen.md:63 msgid "\"libbirthday\"" -msgstr "" +msgstr "\"libbirthday\"" #: src/android/interoperability/with-c/bindgen.md:40 msgid "\"libbirthday.c\"" -msgstr "" +msgstr "\"libbirthday.c\"" #: src/android/interoperability/with-c/bindgen.md:44 msgid "" @@ -18234,7 +18359,7 @@ msgid "" "the RTC match. You can use the driver provided in the [`arm-gic`](https://" "docs.rs/arm-gic/) crate to configure the Arm Generic Interrupt Controller." msgstr "" -"ء _افزونه‌ها اگر زمان دارید:_ وقفه ایجاد شده توسط تطبیق RTC را فعال کرده و آن " +"‏ _افزونه‌ها اگر زمان دارید:_ وقفه ایجاد شده توسط تطبیق RTC را فعال کرده و آن " "را مدیریت کنید. می‌توانید از درایور ارائه شده در crate [`arm-gic`](https://" "docs.rs/arm-gic/) برای پیکربندی Arm Generic Interrupt Controller استفاده " "کنید." @@ -18265,11 +18390,11 @@ msgid "" "_src/exceptions.rs_ (you should only need to change this for the 3rd part of " "the exercise):" msgstr "" -"ء _src/exceptions.rs_ (شما فقط باید این را برای بخش سوم تمرین تغییر دهید):" +"‏ _src/exceptions.rs_ (شما فقط باید این را برای بخش سوم تمرین تغییر دهید):" #: src/exercises/bare-metal/rtc.md:156 msgid "_src/logger.rs_ (you shouldn't need to change this):" -msgstr "ء _src/logger.rs_ (نیازی نیست این مورد را تغییر دهید):" +msgstr "‏ _src/logger.rs_ (نیازی نیست این مورد را تغییر دهید):" #: src/exercises/bare-metal/rtc.md:216 msgid "_src/pl011.rs_ (you shouldn't need to change this):" From a1e7f728c426199ff1cbfe39beab99286e84c64a Mon Sep 17 00:00:00 2001 From: Martin Geisler Date: Mon, 2 Sep 2024 17:21:02 +0200 Subject: [PATCH 07/11] Lower dependabot frequency to monthly (#2329) We are not super dependent on using the latest patch releases of every crate, so a monthly update frequency should be more than enough. Note that we still get PRs if/when there is a [security update](https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#scheduleinterval). --- .github/dependabot.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d8926ee116c..79cd0241ec4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,7 +6,7 @@ updates: - package-ecosystem: cargo directory: / schedule: - interval: weekly + interval: monthly reviewers: - djmitche - mgeisler @@ -23,7 +23,7 @@ updates: - package-ecosystem: cargo directory: /src/bare-metal/alloc-example/ schedule: - interval: weekly + interval: monthly reviewers: - djmitche - mgeisler @@ -40,7 +40,7 @@ updates: - package-ecosystem: cargo directory: /src/bare-metal/aps/examples/ schedule: - interval: weekly + interval: monthly reviewers: - djmitche - mgeisler @@ -57,7 +57,7 @@ updates: - package-ecosystem: cargo directory: /src/bare-metal/microcontrollers/examples/ schedule: - interval: weekly + interval: monthly reviewers: - djmitche - mgeisler @@ -74,7 +74,7 @@ updates: - package-ecosystem: cargo directory: /src/exercises/bare-metal/compass/ schedule: - interval: weekly + interval: monthly reviewers: - djmitche - mgeisler @@ -91,7 +91,7 @@ updates: - package-ecosystem: cargo directory: /src/exercises/bare-metal/rtc/ schedule: - interval: weekly + interval: monthly reviewers: - djmitche - mgeisler @@ -108,7 +108,7 @@ updates: - package-ecosystem: github-actions directory: / schedule: - interval: weekly + interval: monthly reviewers: - djmitche - mgeisler From 30ae1f4f0d8427d083024fe5c58411b91c1d0b75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=B5=20Ho=C3=A0ng=20Long?= <78085736+vohoanglong0107@users.noreply.github.com> Date: Tue, 3 Sep 2024 00:17:48 +0845 Subject: [PATCH 08/11] Add "associated type" to glossary (#2331) # Why For example, while reading [this line](https://github.com/google/comprehensive-rust/blob/3269cb9e4c2a2f1728851b60d1e516a3efca9876/src/std-traits/operators.md?plain=1#L39), a user may want to quickly look up what an "associated type" is. This also helps with translations. In Vietnamese, there isn't a good translation for this term, so keeping the original term and providing a description of it in the glossary would be very helpful. --- src/glossary.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/glossary.md b/src/glossary.md index c00c255ebb9..1d5ea923d09 100644 --- a/src/glossary.md +++ b/src/glossary.md @@ -32,6 +32,9 @@ h1#glossary ~ ul > li:first-line { Dynamic memory allocation on [the heap](memory-management/review.md). - argument:\ Information that is passed into a function or method. +- associated type:\ + A type associated with a specific trait. Useful for defining the relationship + between types. - Bare-metal Rust:\ Low-level Rust development, often deployed to a system without an operating system. See [Bare-metal Rust](bare-metal.md). From cab287849b59ea6e99d889707e9d4eda1ab2440f Mon Sep 17 00:00:00 2001 From: vegetabledogdog Date: Tue, 3 Sep 2024 21:42:12 +0800 Subject: [PATCH 09/11] fix an error in hashmap.md (#2339) There is a small syntax error. --- src/std-types/hashmap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/std-types/hashmap.md b/src/std-types/hashmap.md index 587977c0982..6399bc15e89 100644 --- a/src/std-types/hashmap.md +++ b/src/std-types/hashmap.md @@ -51,7 +51,7 @@ fn main() { .get("Harry Potter and the Sorcerer's Stone") .unwrap_or(&336); let pc2 = page_counts - .entry("The Hunger Games".to_string()) + .entry("The Hunger Games") .or_insert(374); ``` - Unlike `vec!`, there is unfortunately no standard `hashmap!` macro. From 345e782bdd76de3f20f477b67578ff23e8dbe011 Mon Sep 17 00:00:00 2001 From: Frances Wingerter <91758128+fw-immunant@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:42:42 +0000 Subject: [PATCH 10/11] testing: fix cfg(never) warning (#2334) See . --- src/testing/Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/testing/Cargo.toml b/src/testing/Cargo.toml index 049f999caef..a4eaf5fc0ad 100644 --- a/src/testing/Cargo.toml +++ b/src/testing/Cargo.toml @@ -4,6 +4,9 @@ version = "0.1.0" edition = "2021" publish = false +[lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(never)'] } + [[bin]] name = "luhn" path = "exercise.rs" From c223257016c32c4596e045c7bd29c5c20e36e70f Mon Sep 17 00:00:00 2001 From: Frances Wingerter <91758128+fw-immunant@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:43:00 +0000 Subject: [PATCH 11/11] Clarify how `MutexGuard` is 'thread-safe' (avoiding the vague term) (#2336) Fixes the last outstanding point of #1640. --- src/concurrency/send-sync/examples.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/concurrency/send-sync/examples.md b/src/concurrency/send-sync/examples.md index d3074df3283..0a45ba82991 100644 --- a/src/concurrency/send-sync/examples.md +++ b/src/concurrency/send-sync/examples.md @@ -30,10 +30,12 @@ Typically because of interior mutability: ## `!Send + Sync` -These types are thread-safe, but they cannot be moved to another thread: +These types are safe to access (via shared references) from multiple threads, +but they cannot be moved to another thread: - `MutexGuard`: Uses OS level primitives which must be deallocated on - the thread which created them. + the thread which created them. However, an already-locked mutex can have its + guarded variable read by any thread with which the guard is shared. ## `!Send + !Sync`