diff --git a/po/fa.po b/po/fa.po index aa62fc1fbe4..cbe022e59d1 100644 --- a/po/fa.po +++ b/po/fa.po @@ -22787,4 +22787,1449 @@ msgstr "" #~ "slides):" #~ msgstr "" #~ "اینجا مکان مناسبی برای یک برنامه ریزی است.,اگر که شما این موضوع را در " -#~ "کلاس درس می دهیدما پیشنهاد \ No newline at end of file +#~ "کلاس درس می دهیدما پیشنهاد می کنیم که روز را به دو قسمت تقسیم " +#~ "کنید(اسلاید‌ها را دنبال کنید)" + +#~ msgid "Morning: 9:00 to 12:00," +#~ msgstr "صبح: ۹:۰۰ تا ۱۲:۰۰" + +#~ msgid "Afternoon: 13:00 to 16:00." +#~ msgstr "بعد از ظهر: ۱۳:۰۰ تا ۱۶:۰۰" + +#~ msgid "" +#~ "You can of course adjust this as necessary. Please make sure to include " +#~ "breaks, we recommend a break every hour!" +#~ msgstr "" +#~ "البته می‌توانید این را بر‌حسب نیاز تنظیم کنید. لطفا مطمئن شوید که استراحت‌ها " +#~ "را نیز درنظر بگیرید، ما توصیه می‌کنیم هر ساعت یک استراحت داشته باشید!" + +#~ msgid "Here is a small example program in Rust:" +#~ msgstr "یک برنامه کوچیک در Rust:" + +#~ msgid "" +#~ "```rust,editable\n" +#~ "fn main() { // Program entry point\n" +#~ " let mut x: i32 = 6; // Mutable variable binding\n" +#~ " print!(\"{x}\"); // Macro for printing, like printf\n" +#~ " while x != 1 { // No parenthesis around expression\n" +#~ " if x % 2 == 0 { // Math like in other languages\n" +#~ " x = x / 2;\n" +#~ " } else {\n" +#~ " x = 3 * x + 1;\n" +#~ " }\n" +#~ " print!(\" -> {x}\");\n" +#~ " }\n" +#~ " println!();\n" +#~ "}\n" +#~ "```" +#~ msgstr "" +#~ "```rust,editable\n" +#~ "fn main() { // نقطه ورودی برنامه\n" +#~ " let mut x: i32 = 6; //انتساب متغیر قابل تغییر\n" +#~ " print!(\"{x}\"); // ماکرویی برای چاپ‌کردن به مانند printf\n" +#~ " while x != 1 { // هیچ پرانتزی اطراف دستور نیست\n" +#~ " if x % 2 == 0 { // محاسبات مانند بقیه زبان ها \n" +#~ " x = x / 2;\n" +#~ " } else {\n" +#~ " x = 3 * x + 1;\n" +#~ " }\n" +#~ " print!(\" -> {x}\");\n" +#~ " }\n" +#~ " println!();\n" +#~ "}\n" +#~ "```" + +#~ msgid "" +#~ "The code implements the Collatz conjecture: it is believed that the loop " +#~ "will always end, but this is not yet proved. Edit the code and play with " +#~ "different inputs." +#~ msgstr "" +#~ "این کد حدس کولاتز (`Collatz conjecture`) را پیاده سازی می کند: اعتقاد بر " +#~ "این است که حلقه همیشه تمام می شود، اما این هنوز ثابت نشده است. کد را " +#~ "ویرایش کنید و با ورودی‌های مختلف بازی کنید." + +#~ msgid "" +#~ "Explain that all variables are statically typed. Try removing `i32` to " +#~ "trigger type inference. Try with `i8` instead and trigger a runtime " +#~ "integer overflow." +#~ msgstr "" +#~ "توضیح دهید که همه متغیرها از نوع استاتیک هستند. سعی کنید `i32` را حذف " +#~ "کنید تا استنتاج نوع را فعال کنید. با `i8` امتحان کنید و سرریز " +#~ "(`overflow`) عدد صحیح در زمان اجرا را فعال کنید.." + +#~ msgid "Change `let mut x` to `let x`, discuss the compiler error." +#~ msgstr "" +#~ "`let mut x` را به `let x` تغییر دهید، و خطای کامپایلر را بررسی کنید." + +#~ msgid "" +#~ "Show how `print!` gives a compilation error if the arguments don't match " +#~ "the format string." +#~ msgstr "" +#~ "نشان دهید که چگونه `print!` در صورت عدم تطابق " +#~ "آرگومان‌ها با قالب رشته (`format string`) ، خطای کامپایل می دهد." + +#~ msgid "" +#~ "Show how you need to use `{}` as a placeholder if you want to print an " +#~ "expression which is more complex than just a single variable." +#~ msgstr "" +#~ "نشان دهید که چگونه در صورت تمایل به چاپ عبارتی که پیچیده‌تر از یک متغیر " +#~ "واحد است، باید از ‍`{}` به عنوان جایگزین استفاده کنید." + +#~ msgid "" +#~ "Show the students the standard library, show them how to search for `std::" +#~ "fmt` which has the rules of the formatting mini-language. It's important " +#~ "that the students become familiar with searching in the standard library." +#~ msgstr "" +#~ "کتابخانه استاندارد را به دانشجویان نشان دهید، به آنها نشان دهید که چگونه " +#~ "`std::fmt` را که قوانین زبان-کوچک قالب‌بندی را دارد جستجو کنند. مهم است که " +#~ "دانشجویان با جستجو در کتابخانه استاندارد آشنا شوند." + +#~ msgid "" +#~ "In a shell `rustup doc std::fmt` will open a browser on the local std::" +#~ "fmt documentation" +#~ msgstr "" +#~ "در یک خط‌‌‌‌فرمان (`shell`) دستور `rustup doc std::fmt` را بزنید تا مستندات " +#~ "محلی ‍`std::fmt` را توی مرورگر باز کند." + +#~ msgid "Compile time memory safety." +#~ msgstr "ایمنی حافظه در زمان کامپایل." + +#~ msgid "Lack of undefined runtime behavior." +#~ msgstr "عدم وجود رفتار نامشخص در زمان اجرا." + +#~ msgid "Modern language features." +#~ msgstr "ویژگی‌های زبانی مدرن." + +#~ msgid "Let's consider the following \"minimum wrong example\" program in C:" +#~ msgstr "" +#~ "بیایید برنامه «نمونه ای از حداقل اشتباهات» زیر را در C در نظر بگیریم:" + +#~ msgid "How many bugs do you spot?" +#~ msgstr "چند باگ پیدا می کنید؟" + +#~ msgid "" +#~ "Despite just 29 lines of code, this C example contains serious bugs in at " +#~ "least 11:" +#~ msgstr "با وجود تنها ۲۹ خط کد، این مثال C حداقل 11 باگ جدی دارد: " + +#~ msgid "Assignment `=` instead of equality comparison `==` (line 28)" +#~ msgstr "تخصیص `=` به جای مقایسه برابری `==` (خط ۲۸)" + +#~ msgid "Excess argument to `printf` (line 23)" +#~ msgstr "ارگمان اضافی به `printf` (خط ۲۳)" + +#~ msgid "File descriptor leak (after line 26)" +#~ msgstr "نشت توصیفگر فایل (`File descriptor`) (پس از خط ۲۶)" + +#~ msgid "Forgotten braces in multi-line `if` (line 22)" +#~ msgstr "فراموشی پرانتز در `if` چند خطی (خط ۲۲)" + +#~ msgid "Forgotten `break` in a `switch` statement (line 32)" +#~ msgstr "فراموشی `break` در `switch` (خط ۳۲)" + +#~ msgid "" +#~ "Forgotten NUL-termination of the `buf` string, leading to a buffer " +#~ "overflow (line 29)" +#~ msgstr "فراموشی خاتمه `NUL` رشته `buf`، منجر به سرریز بافر (خط ۲۹) " + +#~ msgid "Memory leak by not freeing the `malloc`\\-allocated buffer (line 21)" +#~ msgstr "نشت حافظه با آزاد نکردن بافر اختصاص داده شده توسط `malloc` (خط ۲۱)" + +#~ msgid "Out-of-bounds access (line 17)" +#~ msgstr "دسترسی خارج از محدوده (خط ۱۷)" + +#~ msgid "Unchecked cases in the `switch` statement (line 11)" +#~ msgstr "حالات بررسی نشده در `switch` (خط ۱۱)" + +#~ msgid "Unchecked return values of `stat` and `fopen` (lines 18 and 26)" +#~ msgstr "مقادیر برگشتی از `stat` و `fopen` بررسی نشده (خطوط ۱۸ و ۲۶)" + +#~ msgid "" +#~ "_Shouldn't these bugs be obvious even for a C compiler?_ \n" +#~ "No, surprisingly this code compiles warning-free at the default warning " +#~ "level, even in the latest GCC version (13.2 as of writing)." +#~ msgstr "" +#~ "_آیا این باگها نباید برای یک کامپایلر C نمایان باشد؟_ \n" +#~ "نه، به طور شگفت انگیزی این کد بدون هیچ هشدار در سطح هشدار(`warning`) پیش " +#~ "فرض کامپایل می شود، حتی در آخرین نسخه GCC (۱۳.۲ این کتاب در زمان نوشتن)." + +#~ msgid "" +#~ "_Isn't this a highly unrealistic example?_ \n" +#~ "Absolutely not, these kind of bugs have lead to serious security " +#~ "vulnerabilities in the past. Some examples:" +#~ msgstr "" +#~ "_آیا این یک مثال خیلی غیر واقعی نیست؟_ \n" +#~ "ابدا نه، این نوع از باگ‌ها در گذشته منجر به آسیب‌پذیری‌های امنیتی جدی " +#~ "شده‌اند. چند نمونه:" + +#~ msgid "" +#~ "Assignment `=` instead of equality comparison `==`: [The Linux Backdoor " +#~ "Attempt of 2003](https://freedom-to-tinker.com/2013/10/09/the-linux-" +#~ "backdoor-attempt-of-2003)" +#~ msgstr "" +#~ "تخصیص `=` به جای مقایسه برابر بودن `==`: [The Linux Backdoor Attempt of " +#~ "2003](https://freedom-to-tinker.com/2013/10/09/the-linux-backdoor-attempt-" +#~ "of-2003)" + +#~ msgid "" +#~ "Forgotten braces in multi-line `if`: [The Apple goto fail vulnerability]" +#~ "(https://dwheeler.com/essays/apple-goto-fail.html)" +#~ msgstr "" +#~ "فراموشی پرانتز در `if` چند خطی: [The Apple goto fail vulnerability]" +#~ "(https://dwheeler.com/essays/apple-goto-fail.html)" + +#~ msgid "" +#~ "Forgotten `break` in a `switch` statement: [The break that broke sudo]" +#~ "(https://nakedsecurity.sophos.com/2012/05/21/anatomy-of-a-security-hole-" +#~ "the-break-that-broke-sudo)" +#~ msgstr "" +#~ "فراموشی گذاشتن `break` در `switch`: [The break that broke " +#~ "sudo](https://nakedsecurity.sophos.com/2012/05/21/anatomy-of-a-security-" +#~ "hole-the-break-that-broke-sudo) " + +#~ msgid "" +#~ "_How is Rust any better here?_ \n" +#~ "Safe Rust makes all of these bugs impossible:" +#~ msgstr "" +#~ "_چطوری زبان راست در اینجا بهتر عمل می‌کند?_ \n" +#~ "راست ایمن تمام این باگ‌ها را غیرممکن می‌کند:" + +#~ msgid "Assignments inside an `if` clause are not supported." +#~ msgstr "تخصیص‌ها در داخل یک شرط `if` پشتیبانی نمی‌شوند." + +#~ msgid "Format strings are checked at compile-time." +#~ msgstr "قالب‌بندی رشته‌ها در زمان کامپایل بررسی می‌شوند." + +#~ msgid "Resources are freed at the end of scope via the `Drop` trait." +#~ msgstr "منابع در پایان اسکوپ از طریق ویژگی `Drop` آزاد می‌شوند." + +#~ msgid "All `if` clauses require braces." +#~ msgstr "همه شرط‌های `if` نیاز به پرانتز دارند." + +#~ msgid "" +#~ "`match` (as the Rust equivalent to `switch`) does not fall-through, hence " +#~ "you can't accidentally forget a `break`." +#~ msgstr "" +#~ "دستور`match` (به عنوان معادل Rust برای `switch`) فرو نمی‌پاشد (منظور fall-" +#~ "through پذیر بودن ان است) ، بنابراین نمی‌توانید به طور تصادفی یک break را " +#~ "فراموش کنید." + +#~ msgid "Buffer slices carry their size and don't rely on a NUL terminator." +#~ msgstr "" +#~ "برش‌های بافر اندازه خود را حمل می‌کنند و به خاتمه دهنده `NUL` متکی نیستند." + +#~ msgid "" +#~ "Heap-allocated memory is freed via the `Drop` trait when the " +#~ "corresponding `Box` leaves the scope." +#~ msgstr "" +#~ "حافظه اختصاص داده شده به پشته از طریق ویژگی `Drop` زمانی آزاد می‌شود که " +#~ "`Box` مورد نظر اسکوپ مربوطه را ترک کند.‍" + +#~ msgid "" +#~ "Out-of-bounds accesses cause a panic or can be checked via the `get` " +#~ "method of a slice." +#~ msgstr "" +#~ "دسترسی‌های خارج از محدوده باعث پانیک می‌شوند یا می‌توان آنها را از طریق متد " +#~ "get یک برش (`slice`) بررسی کرد." + +#~ msgid "`match` mandates that all cases are handled." +#~ msgstr "دستور `match` الزام می‌کند که حالات بررسی شوند." + +#~ msgid "" +#~ "Fallible Rust functions return `Result` values that need to be unwrapped " +#~ "and thereby checked for success. Additionally, the compiler emits a " +#~ "warning if you miss to check the return value of a function marked with " +#~ "`#[must_use]`." +#~ msgstr "" +#~ "توابع خطا پذیر در زبان Rust مقدار Result را برمی‌گردانند که باید باز شوند " +#~ "و در نتیجه برای موفقیت بررسی شوند. علاوه بر این، اگر بررسی مقدار برگشتی " +#~ "تابعی که با `#[must_use]` علامت گذاری شده است را " +#~ "فراموش کنید، کامپایلر هشدار می‌دهد." + +#~ msgid "Static memory management at compile time:" +#~ msgstr "مدیریت حافظه ایستا در زمان کامپایل:" + +#~ msgid "No memory leaks (_mostly_, see notes)." +#~ msgstr "" +#~ "هیچ نشت حافظه‌ای وجود ندارد (_به طور کلی_، به یادداشت‌ها مراجعه کنید)." + +#~ msgid "" +#~ "It is possible to produce memory leaks in (safe) Rust. Some examples are:" +#~ msgstr "" +#~ "ایجاد نشت حافظه در Rust (ایمن) امکان‌پذیر است. برخی از نمونه‌ها عبارتند از:" + +#~ msgid "" +#~ "You can use [`Box::leak`](https://doc.rust-lang.org/std/boxed/struct.Box." +#~ "html#method.leak) to leak a pointer. A use of this could be to get " +#~ "runtime-initialized and runtime-sized static variables" +#~ msgstr "" +#~ "می توانید از [`Box::leak`](https://doc.rust-lang.org/std/" +#~ "boxed/struct.Box.html#method.leak) برای نشت دادن یک اشاره‌گر " +#~ "استفاده کنید.یک مورد استفاده از این کار می‌تواند برای بدست آوردن متغیرهای " +#~ "ایستا با مقداردهی اولیه و اندازه در زمان اجرا باشد." + +#~ msgid "" +#~ "You can use [`std::mem::forget`](https://doc.rust-lang.org/std/mem/fn." +#~ "forget.html) to make the compiler \"forget\" about a value (meaning the " +#~ "destructor is never run)." +#~ msgstr "" +#~ "می توانید از [`std::mem::forget`](https://doc.rust-lang.org/" +#~ "std/mem/fn.forget.html) استفاده کنید تا کامپایلر «مقدار» را " +#~ "فراموش کند (به این معنا که تابع مخرب (`destructor`) هرگز اجرا نمی‌شود)." + +#~ msgid "" +#~ "You can also accidentally create a [reference cycle](https://doc.rust-" +#~ "lang.org/book/ch15-06-reference-cycles.html) with `Rc` or `Arc`." +#~ msgstr "" +#~ "همچنین می‌توانید به طور تصادفی یک [چرخه ارجاع](https://doc.rust-lang.org/" +#~ "book/ch15-06-reference-cycles.html) با `Rc` یا `Arc` ایجاد کنید." + +#~ msgid "" +#~ "In fact, some will consider infinitely populating a collection a memory " +#~ "leak and Rust does not protect from those." +#~ msgstr "" +#~ "در واقع، برخی از افراد پر کردن بی نهایت یک مجموعه را به عنوان نشت حافظه " +#~ "در نظر می‌گیرند و Rust از آن محافظت نمی‌کند." + +#~ msgid "" +#~ "For the purpose of this course, \"No memory leaks\" should be understood " +#~ "as \"Pretty much no _accidental_ memory leaks\"." +#~ msgstr "" +#~ "برای این دوره، «هیچ نشت حافظه ای» باید به عنوان «تقریبا هیچ نشت حافظه " +#~ "_تصادفی_» درنظر گرفته شود." + +#~ msgid "" +#~ "Integer overflow is defined via the [`overflow-checks`](https://doc.rust-" +#~ "lang.org/rustc/codegen-options/index.html#overflow-checks) compile-time " +#~ "flag. If enabled, the program will panic (a controlled crash of the " +#~ "program), otherwise you get wrap-around semantics. By default, you get " +#~ "panics in debug mode (`cargo build`) and wrap-around in release mode " +#~ "(`cargo build --release`)." +#~ msgstr "" +#~ "سرریز عدد صحیح از طریق پرچم زمان کامپایل [`overflow-checks`](https://doc." +#~ "rust-lang.org/rustc/codegen-options/index.html#overflow-checks) تعریف شده " +#~ "است. اگر فعال باشد، برنامه خطا خواهد کرد (یک خرابی به صورت کنترل شده)، در " +#~ "غیر این صورت wrap-around خواهید داشت.به طور پیش فرض، در حالت توسعه `debug " +#~ "(cargo build)` شما خطا خواهید داشت. و در حالت گرفتن خروجی برای پروداکشن " +#~ "`release (cargo build --release)` حالت wrap-around خواهید داشت." + +#~ msgid "" +#~ "Bounds checking cannot be disabled with a compiler flag. It can also not " +#~ "be disabled directly with the `unsafe` keyword. However, `unsafe` allows " +#~ "you to call functions such as `slice::get_unchecked` which does not do " +#~ "bounds checking." +#~ msgstr "" +#~ "بررسی محدوده نمی‌تواند با پرچم کامپایل غیرفعال شود. همچنین نمی‌توان آن را " +#~ "به طور مستقیم با کلمه کلیدی `unsafe` غیرفعال کرد. با این حال، `unsafe` به " +#~ "شما امکان می‌دهد توابعی مانند `slice::get_unchecked` را صدا بزنید که بررسی " +#~ "محدوده را انجام نمی‌دهد. " + +#~ msgid "Rust is built with all the experience gained in the last decades." +#~ msgstr "" +#~ "زبان Rust با استفاده از تمام تجربیاتی که در دهه‌های گذشته به دست آمده " +#~ "ساخته شده است." + +#~ msgid "Language Features" +#~ msgstr "ویژگی‌های زبان" + +#~ msgid "Tooling" +#~ msgstr "ابزارها" + +#~ msgid "" +#~ "Zero-cost abstractions, similar to C++, means that you don't have to " +#~ "'pay' for higher-level programming constructs with memory or CPU. For " +#~ "example, writing a loop using `for` should result in roughly the same low " +#~ "level instructions as using the `.iter().fold()` construct." +#~ msgstr "" +#~ "انتزاع‌های بدون هزینه، مشابه C++، به این معنی است که " +#~ "شما مجبور نیستید برای ساختارهای برنامه‌نویسی سطح بالاتر با حافظه یا CPU " +#~ "«هزینه»‌ای پرداخت کنید. به عنوان مثال، نوشتن یک حلقه با استفاده از for " +#~ "باید تقریباً به همان دستورالعمل‌های سطح پایین به عنوان استفاده از ساختار " +#~ "`iter().fold()` منجر شود." + +#~ msgid "" +#~ "It may be worth mentioning that Rust enums are 'Algebraic Data Types', " +#~ "also known as 'sum types', which allow the type system to express things " +#~ "like `Option` and `Result`." +#~ msgstr "" +#~ "ارزش ذکر را دارد که Enum‌های زبان Rust از «انواع داده جبری» هستند که " +#~ "همچنین به عنوان «انواع جمع» شناخته می‌شوند، که به تایپ‌ سیستم اجازه می‌دهد " +#~ "چیزهایی مانند `Option` و `Result` را بیان کند." + +#~ msgid "" +#~ "Remind people to read the errors --- many developers have gotten used to " +#~ "ignore lengthy compiler output. The Rust compiler is significantly more " +#~ "talkative than other compilers. It will often provide you with " +#~ "_actionable_ feedback, ready to copy-paste into your code." +#~ msgstr "" +#~ "به افراد یادآوری کنید که خطاها را بخوانند --- بسیاری از توسعه دهندگان به " +#~ "نادیده گرفتن خروجی طولانی کامپایلر عادت کرده‌اند. کامپایلر Rust به طور " +#~ "قابل توجه‌ای پرحرف‌تر از سایر کامپایلرها است. اغلب بازخوردهای _عملیاتی_ را " +#~ "در اختیار شما قرار می‌دهد که آماده کپی و پیست کردن در کد شما هستند." + +#~ msgid "" +#~ "The Rust standard library is small compared to languages like Java, " +#~ "Python, and Go. Rust does not come with several things you might consider " +#~ "standard and essential:" +#~ msgstr "" +#~ "کتابخانه استاندارد Rust در مقایسه با زبان‌هایی مانند Java، Python و Go " +#~ "کوچک است. زبان Rust با چندین چیز که ممکن است آنها را استاندارد و ضروری " +#~ "در نظر بگیرید همراه نیست:" + +#~ msgid "a random number generator, but see [rand](https://docs.rs/rand/)." +#~ msgstr "" +#~ "یک تولید‌کننده عدد تصادفی، اما [کتابخانه `rand`](https://" +#~ "docs.rs/rand/) را ببینید." + +#~ msgid "support for SSL or TLS, but see [rusttls](https://docs.rs/rustls/)." +#~ msgstr "" +#~ "پشتیبانی از SSL یا TLS، اما میتوانید [کتابخانه `rusttls`]" +#~ "(https://docs.rs/rustls/) را ببینید." + +#~ msgid "support for JSON, but see [serde_json](https://docs.rs/serde_json/)." +#~ msgstr "" +#~ "پشتیبانی از JSON، اما [کتابخانه `serde_json`](https://docs." +#~ "rs/serde_json/) را ببینید." + +#~ msgid "" +#~ "The reasoning behind this is that functionality in the standard library " +#~ "cannot go away, so it has to be very stable. For the examples above, the " +#~ "Rust community is still working on finding the best solution --- and " +#~ "perhaps there isn't a single \"best solution\" for some of these things." +#~ msgstr "" +#~ "منطق پشت این امر این است که نمیتوان عملکردی را از کتابخانه استاندارد حذف " +#~ "کرد، بنابراین باید بسیار پایدار باشد. برای مثال‌های بالا، جامعه Rust هنوز " +#~ "در تلاش است تا بهترین راه حل را پیدا کند --- و شاید برای برخی از این " +#~ "موارد، یک «بهترین راه حل» وجود نداشته باشد. " + +#~ msgid "" +#~ "Rust comes with a built-in package manager in the form of Cargo and this " +#~ "makes it trivial to download and compile third-party crates. A " +#~ "consequence of this is that the standard library can be smaller." +#~ msgstr "" +#~ "زبان Rust همراه با یک مدیر بسته درون-ساختی به اسم Cargo ارائه می شود و " +#~ "این امر دانلود و کامپایل کردن crates شخص ثالث را بسیار آسان می کند. یکی " +#~ "از پیامدهای این امر این است که کتابخانه استاندارد می تواند کوچکتر باشد." + +#~ msgid "" +#~ "Discovering good third-party crates can be a problem. Sites like help with this by letting you compare health metrics for crates " +#~ "to find a good and trusted one." +#~ msgstr "" +#~ "یافتن crates خوب شخص ثالث می تواند مشکل باشد. سایت‌هایی مانند با اجازه مقایسه معیارهای سلامت برای " +#~ "crates به شما کمک می‌کنند تا یک مورد خوب و قابل اعتماد را پیدا کنید." + +#~ msgid "" +#~ "[rust-analyzer](https://rust-analyzer.github.io/) is a well supported LSP " +#~ "implementation used in major IDEs and text editors." +#~ msgstr "" +#~ "[rust-analyzer](https://rust-analyzer.github.io/): یک پیاده سازی LSP است " +#~ "که در IDE‌ها و ویرایشگرهای متن اصلی استفاده می‌شود." + +#~ msgid "`\"foo\"`, `\"two\\nlines\"`" +#~ msgstr "" +#~ "\"foo\", \"two\n" +#~ "lines\"" + +#~ msgid "Like C++, Rust has references:" +#~ msgstr "مانند C++، راست دارای مراجع است:" + +#~ msgid "" +#~ "We must dereference `ref_x` when assigning to it, similar to C and C++ " +#~ "pointers." +#~ msgstr "" +#~ "باید هنگام تعریف `ref_x` ارجاع دهی شود، مشابه " +#~ "اشاره‌گرهای C و C++." + +#~ msgid "" +#~ "References that are declared as `mut` can be bound to different values " +#~ "over their lifetime." +#~ msgstr "" +#~ "مراجع‌ای که به‌عنوان `mut` تعریف می‌شوند، می‌توانند در طول عمر خود به مقادیر " +#~ "مختلفی ارجاع داده شوند." + +#~ msgid "A reference is said to \"borrow\" the value it refers to." +#~ msgstr "گفته می‌شود که یک مرجع مقدار مورد اشاره خود را «قرض می‌گیرد»." + +#~ msgid "" +#~ "Rust is tracking the lifetimes of all references to ensure they live long " +#~ "enough." +#~ msgstr "" +#~ "راست برای اینکه اطمینان حاصل کند طول‌عمر همه مراجع به اندازه کافی است, " +#~ "آنها را رهگیری می‌کند." + +#~ msgid "`String` vs `str`" +#~ msgstr "`String` در مقابل `str` " + +#~ msgid "" +#~ "You can borrow `&str` slices from `String` via `&` and optionally range " +#~ "selection." +#~ msgstr "" +#~ "شما می‌توانید برش‌های &str را از `String` از طریق `&` " +#~ "و انتخاب محدوده به صورت اختیاری، قرض بگیرید." + +#~ msgid "" +#~ "A Rust version of the famous [FizzBuzz](https://en.wikipedia.org/wiki/" +#~ "Fizz_buzz) interview question:" +#~ msgstr "" +#~ "یک نسخه راست از سوال مصاحبه معروف مصاحبه [FizzBuzz](https://en.wikipedia." +#~ "org/wiki/Fizz_buzz):" + +#~ msgid "" +#~ "We refer in `main` to a function written below. Neither forward " +#~ "declarations nor headers are necessary. " +#~ msgstr "" +#~ "ما در `main` به یک تابعی که در زیرش نوشته شده است " +#~ "اشاره می‌کنیم. نیازی به اعلان از قبل تابع `main` یا " +#~ "در بخش هدر نیست. " + +#~ msgid "" +#~ "The range expression in the `for` loop in `print_fizzbuzz_to()` contains " +#~ "`=n`, which causes it to include the upper bound." +#~ msgstr "" +#~ "عبارت تعیین محدوده در حلقه `for` در `print_fizzbuzz_to()` حاوی `=n` است " +#~ "که باعث می‌شود محدوده حد بالا را هم شامل شود (آخرین عنصر)." + +#~ msgid "" +#~ "All language items in Rust can be documented using special `///` syntax." +#~ msgstr "" +#~ "همه موارد زبان در راست را می‌توان با استفاده از سینتکس ویژه `///` مستند " +#~ "کرد." + +#~ msgid "" +#~ "This course does not include rustdoc on slides, just to save space, but " +#~ "in real code they should be present." +#~ msgstr "" +#~ "این دوره برای صرفه‌جویی در نوشتار متنی rustdoc را در اسلایدها قرار نمی‌دهد، " +#~ "اما در کدهای دنیای واقعی باید وجود داشته باشد." + +#~ msgid "" +#~ "Inner doc comments are discussed later (in the page on modules) and need " +#~ "not be addressed here." +#~ msgstr "" +#~ "کامنت های داخل کد در بخش‌های بعدی (در صفحه مربوط به ماژول‌ها) مورد بحث قرار " +#~ "می‌گیرد و نیازی به پرداختن به آنها در اینجا نیست." + +#~ msgid "" +#~ "Rustdoc comments can contain code snippets that we can run and test using " +#~ "`cargo test`. We will discuss these tests in the [Testing section](../" +#~ "testing/doc-tests.html)." +#~ msgstr "" +#~ "کامنت های rustdoc می‌توانند حاوی قطعه کدهایی باشند که می‌توانیم آنها را با " +#~ "استفاده از `cargo test` اجرا و تست کنیم. ما در " +#~ "[بخش تست نویسی](../testing/doc-tests.html) در مورد این تست‌ها بحث خواهیم " +#~ "کرد." + +#~ msgid "" +#~ "Methods are functions associated with a type. The `self` argument of a " +#~ "method is an instance of the type it is associated with:" +#~ msgstr "" +#~ "متدها، تابع‌هایی مربوط به یک نوع خاص هستند. آرگومان `self` یک متد، نمونه‌ای " +#~ "از نوعی است که با آن مرتبط است:" + +#~ msgid "" +#~ "We will look much more at methods in today's exercise and in tomorrow's " +#~ "class." +#~ msgstr "در تمرین امروز و کلاس فردا بیشتر به متدها می‌پردازیم." + +#~ msgid "" +#~ "Add a static method called `Rectangle::new` and call this from `main`:" +#~ msgstr "" +#~ "یک متد استاتیک به نام `Rectangle::new` اضافه کنید و " +#~ "آن را از `main` فراخوانی کنید:" + +#~ msgid "" +#~ "While _technically_, Rust does not have custom constructors, static " +#~ "methods are commonly used to initialize structs (but don't have to). The " +#~ "actual constructor, `Rectangle { width, height }`, could be called " +#~ "directly. See the [Rustnomicon](https://doc.rust-lang.org/nomicon/" +#~ "constructors.html)." +#~ msgstr "" +#~ "در حالی که از _نظر فنی_ راست یک متد سازنده خاص ندارد، معمولاً از متدهای " +#~ "استاتیک برای مقداردهی اولیه ساختارها استفاده می‌شود (اما الزامی نیست). " +#~ "سازنده اصلی ، `Rectangle { width, height }` ، را " +#~ "می‌توان به طور مستقیم فراخوانی کرد. برای اطلاعات بیشتر [Rustnomicon]" +#~ "(https://doc.rust-lang.org/nomicon/constructors.html) را ببینید." + +#~ msgid "" +#~ "Add a `Rectangle::square(width: u32)` constructor to illustrate that such " +#~ "static methods can take arbitrary parameters." +#~ msgstr "" +#~ "برای نشان دادن اینکه چنین متدهای استاتیک می‌توانند آرگومان‌های دلخواه " +#~ "بگیرند، با ارگمان‌های یک سازنده `Rectangle::square(width: " +#~ "u32)` اضافه کنید." + +#~ msgid "Function Overloading" +#~ msgstr "سربارگذاری تابع (Function Overloading)" + +#~ msgid "Overloading is not supported:" +#~ msgstr "سربارگذاری پشتیبانی نمیشود, چون:" + +#~ msgid "Always takes a fixed number of parameters." +#~ msgstr "همیشه تعداد ثابتی از آرگومان‌ها می‌گیرد." + +#~ msgid "Default values are not supported:" +#~ msgstr "مقادیر پیش‌فرض پشتیبانی نمی‌شوند:" + +#~ msgid "All call sites have the same number of arguments." +#~ msgstr "تمام محل‌های فراخوانی دارای تعداد یکسانی از آرگومان هستند." + +#~ msgid "Macros are sometimes used as an alternative." +#~ msgstr "گاهی اوقات از ماکروها به عنوان جایگزین استفاده می‌شود." + +#~ msgid "However, function parameters can be generic:" +#~ msgstr "با این حال، پارامترهای تابع می‌توانند جنریک باشند:" + +#~ msgid "" +#~ "When using generics, the standard library's `Into` can provide a kind " +#~ "of limited polymorphism on argument types. We will see more details in a " +#~ "later section." +#~ msgstr "" +#~ "هنگام استفاده از جنریک‌ها، `Into` کتابخانه " +#~ "استاندارد می‌تواند نوعی چندشکلی (polymorphism) محدود در انواع آرگومان‌ها " +#~ "فراهم کند. جزئیات بیشتر را در بخش‌های بعدی خواهیم دید." + +#~ msgid "Day 1: Morning Exercises" +#~ msgstr "روز اول: تمرین‌های صبح" + +#~ msgid "In these exercises, we will explore two parts of Rust:" +#~ msgstr "در این تمرین‌ها، دو بخش از راست را بررسی خواهیم کرد:" + +#~ msgid "Implicit conversions between types." +#~ msgstr "تبدیل‌های ضمنی بین انواع" + +#~ msgid "Arrays and `for` loops." +#~ msgstr "آرایه‌ها و حلقه‌های `for`" + +#~ msgid "A few things to consider while solving the exercises:" +#~ msgstr "چند نکته را هنگام حل تمرین‌ها درنظر بگیرید:" + +#~ msgid "" +#~ "Use a local Rust installation, if possible. This way you can get auto-" +#~ "completion in your editor. See the page about [Using Cargo](../../cargo." +#~ "md) for details on installing Rust." +#~ msgstr "" +#~ "در صورت امکان، از نصب محلی راست استفاده کنید. از این طریق می‌توانید از " +#~ "تکمیل خودکار در ویرایشگر خود استفاده کنید. برای جزئیات بیشتر در مورد نصب " +#~ "راست، صفحه مربوط به [استفاده از کارگو](../../cargo.md) را ببینید." + +#~ msgid "Alternatively, use the Rust Playground." +#~ msgstr "در غیر این صورت از `Rust Playground` استفاده کنید." + +#~ msgid "" +#~ "The code snippets are not editable on purpose: the inline code snippets " +#~ "lose their state if you navigate away from the page." +#~ msgstr "" +#~ "قطعه کدها به صورت عمدی قابل ویرایش نیستند: قطعه کدهای درون‌خطی اگر از صفحه " +#~ "خارج شوید، به حالت پیش‌فرض بازنشانی می‌شوند و تغییرات شما درنظر گرفته " +#~ "نمی‌شود." + +#~ msgid "" +#~ "Rust will not automatically apply _implicit conversions_ between types " +#~ "([unlike C++](https://en.cppreference.com/w/cpp/language/" +#~ "implicit_conversion)). You can see this in a program like this:" +#~ msgstr "" +#~ "راست به طور خودکار تبدیل‌های صریح بین انواع را اعمال نمی‌کند ([برخلاف زبان " +#~ "`C++`](https://en.cppreference.com/w/cpp/language/" +#~ "implicit_conversion)).به عنوان مثال میتوانید این را در یک برنامه ببینید:" + +#~ msgid "" +#~ "The Rust integer types all implement the [`From`](https://doc.rust-" +#~ "lang.org/std/convert/trait.From.html) and [`Into`](https://doc.rust-" +#~ "lang.org/std/convert/trait.Into.html) traits to let us convert between " +#~ "them. The `From` trait has a single `from()` method and similarly, the " +#~ "`Into` trait has a single `into()` method. Implementing these traits " +#~ "is how a type expresses that it can be converted into another type." +#~ msgstr "" +#~ "همه انواع عدد صحیح راست، تریت‌های (Trait) [`Into`]" +#~ "(https://doc.rust-lang.org/std/convert/trait.Into.html) و [`From`](https://doc.rust-lang.org/std/convert/trait." +#~ "From.html) را پیاده‌سازی می‌کنند تا به ما امکان تبدیل بین انواع عددی صحیح " +#~ "را بدهند. با پیاده سازی ویژگی `From` همه انواع به " +#~ "صورت مشترک یک متد `from()` را دارند. با پیاده‌سازی " +#~ "تریت `Into` همه انواع یک متد مشترک به اسم `into()` را دارند. پیاده‌سازی این تریت‌ها راهی است که یک نوع " +#~ "بیان می‌کند که می‌تواند به نوع دیگری تبدیل شود." + +#~ msgid "" +#~ "The standard library has an implementation of `From for i16`, which " +#~ "means that we can convert a variable `x` of type `i8` to an `i16` by " +#~ "calling `i16::from(x)`. Or, simpler, with `x.into()`, because `From " +#~ "for i16` implementation automatically create an implementation of " +#~ "`Into for i8`." +#~ msgstr "" +#~ "کتابخانه استاندارد یک پیاده‌سازی `From for i16` " +#~ "دارد `i16` دارد، به این معنی که می‌توانیم یک متغیر " +#~ "`x` از نوع `i8` را با فراخوانی `i16::from(x)` به یک " +#~ "`i16` تبدیل کنیم. یا به شیوه ساده‌تر، با `x.into()` ، زیرا پیاده‌سازی `From` برای نوع `i16` به طور خودکار پیاده‌سازی`Into` برای نوع `i8` را ایجاد می‌کند." + +#~ msgid "" +#~ "The same applies for your own `From` implementations for your own types, " +#~ "so it is sufficient to only implement `From` to get a respective `Into` " +#~ "implementation automatically." +#~ msgstr "" +#~ "همین امر برای پیاده‌سازی‌های `From` خودتان برای انواع " +#~ "خودتان نیز صدق می‌کند، بنابراین کافیست فقط `From` را " +#~ "پیاده‌سازی کنید تا به طور خودکار پیاده‌سازی `Into` " +#~ "مربوطه را دریافت کنید." + +#~ msgid "Execute the above program and look at the compiler error." +#~ msgstr "برنامه فوق را اجرا و به خطای کامپایلر نگاه کنید." + +#~ msgid "Update the code above to use `into()` to do the conversion." +#~ msgstr "" +#~ "کد بالا را به گونه‌ای به‌روزرسانی کنید که از `into()` " +#~ "برای انجام تبدیل استفاده شود." + +#~ msgid "" +#~ "Change the types of `x` and `y` to other things (such as `f32`, `bool`, " +#~ "`i128`) to see which types you can convert to which other types. Try " +#~ "converting small types to big types and the other way around. Check the " +#~ "[standard library documentation](https://doc.rust-lang.org/std/convert/" +#~ "trait.From.html) to see if `From` is implemented for the pairs you " +#~ "check." +#~ msgstr "" +#~ "نوع داده `x` و `y` را به چیزهای دیگری (مانند `f32`, `bool`, `i128`) " +#~ "تغییر دهید تا ببینید کدام انواع را می‌توانید به کدام انواع دیگر تبدیل " +#~ "کنید. سعی کنید انواع کوچک را به انواع بزرگ تبدیل کنید و برعکس. [مستندات " +#~ "کتابخانه استاندارد](https://doc.rust-lang.org/std/convert/trait.From." +#~ "html) را بررسی کنید تا ببینید آیا `From` برای " +#~ "تبدیل انواع‌ایی که بررسی می‌کنید پیاده‌سازی شده است یا نه." + +#~ msgid "Arrays and `for` Loops" +#~ msgstr "آرایه‌ها و حلقه‌های `for`" + +#~ msgid "We saw that an array can be declared like this:" +#~ msgstr "دیدیم که یک آرایه را می‌توان به صورت زیر تعریف کرد: " + +#~ msgid "" +#~ "You can print such an array by asking for its debug representation with " +#~ "`{:?}`:" +#~ msgstr "" +#~ "می‌توانید چنین آرایه‌ای را با درخواست نمایش اشکال‌زدایی آن با `{:?}` چاپ کنید:" + +#~ msgid "" +#~ "Rust lets you iterate over things like arrays and ranges using the `for` " +#~ "keyword:" +#~ msgstr "" +#~ "راست به شما این امکان را می‌دهد تا با استفاده از کلمه کلیدی `for` بر روی " +#~ "چیزهایی مانند آرایه‌ها و رنج‌ها پیمایش کنید:" + +#~ msgid "Bonus Question" +#~ msgstr "سوال جایزه‌دار" + +#~ msgid "" +#~ "Could you use `&[i32]` slices instead of hard-coded 3 × 3 matrices for " +#~ "your argument and return types? Something like `&[&[i32]]` for a two-" +#~ "dimensional slice-of-slices. Why or why not?" +#~ msgstr "" +#~ "آیا می‌توانید به جای ماتریس‌های 3 × 3 هاردکد شده از برش‌های `&[i32]` برای آرگومان و انواع برگشتی تابع خود استفاده " +#~ "کنید؟ چیزی شبیه `&[&[i32]]` برای برش-از-برش دو بعدی. " +#~ "آیا امکان پذیر هست؟ چرا اره و چرا نه؟" + +#~ msgid "" +#~ "See the [`ndarray` crate](https://docs.rs/ndarray/) for a production " +#~ "quality implementation." +#~ msgstr "" +#~ "برای دیدن یک پیاده‌سازی با کیفیت پروداکشن به جعبه [`ndarray`](https://docs.rs/ndarray/) سر بزنید." + +#~ msgid "" +#~ "The solution and the answer to the bonus section are available in the " +#~ "[Solution](solutions-morning.md#arrays-and-for-loops) section." +#~ msgstr "" +#~ "راه‌حل‌ها و پاسخ به بخش جایزه در بخش جواب‌ها](solutions-morning.md#arrays-" +#~ "and-for-loops) موجود است." + +#~ msgid "" +#~ "The use of the reference `&array` within `for n in &array` is a subtle " +#~ "preview of issues of ownership that will come later in the afternoon." +#~ msgstr "" +#~ "استفاده از ارجاع `&array` در بخش `for " +#~ "n in &array` پیش‌نمایشی کوچکی از مسئله مالکیت است در قسمت عصر که " +#~ "بعداً به ان خواهیم پرداخت." + +#~ msgid "Without the `&`..." +#~ msgstr "بدون استفاده از `&` ..." + +#~ msgid "" +#~ "The loop would have been one that consumes the array. This is a change " +#~ "[introduced in the 2021 Edition](https://doc.rust-lang.org/edition-guide/" +#~ "rust-2021/IntoIterator-for-arrays.html)." +#~ msgstr "" +#~ "حلقه به گونه‌ای می‌بود که آرایه را مصرف می‌کند. این تغییری [در ویرایش سال " +#~ "۲۰۲۱ معرفی شده است.](https://doc.rust-lang.org/edition-guide/rust-2021/" +#~ "IntoIterator-for-arrays.html)" + +#~ msgid "" +#~ "An implicit array copy would have occurred. Since `i32` is a copy type, " +#~ "then `[i32; 3]` is also a copy type." +#~ msgstr "" +#~ "یک کپی آرایه ضمنی رخ می‌داد. از آنجایی که `i32` یک نوع کپی است، پس `[i32; 3]` نیز یک نوع کپی است." + +#~ msgid "" +#~ "As we have seen, `if` is an expression in Rust. It is used to " +#~ "conditionally evaluate one of two blocks, but the blocks can have a value " +#~ "which then becomes the value of the `if` expression. Other control flow " +#~ "expressions work similarly in Rust." +#~ msgstr "" +#~ "همانطور که دیدیم، `if` در Rust یک عبارت است. عبارت `if` برای آن استفاده " +#~ "می‌شود که یکی از ۲ بلوک شرطی را در راست ایجاد کند. توجه داشته باشید که در " +#~ "راست این بلاک های `if` میتوانند یک مقدار را برگرداند و در اصطلاح یک " +#~ "مقدار داشته باشند. بقیه عبارات کنترل جریان نیز مشابه این کار میکنند." + +#~ msgid "" +#~ "The same rule is used for functions: the value of the function body is " +#~ "the return value:" +#~ msgstr "" +#~ "قانون مشابه‌ای برای توابع نیز صدق می‌کند: آخرین مقدار در بلاک تابع مقدار " +#~ "برگشتی است: " + +#~ msgid "" +#~ "The point of this slide is to show that blocks have a type and value in " +#~ "Rust. " +#~ msgstr "" +#~ "هدف از این اسلاید نشان دادن این است که بلوک ها در Rust دارای نوع و مقدار " +#~ "هستند. " + +#~ msgid "" +#~ "The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) is " +#~ "closely related to the [`while let` loop](while-let-expressions.md). It " +#~ "will automatically call `into_iter()` on the expression and then iterate " +#~ "over it:" +#~ msgstr "" +#~ "[حلقه `for`](https://doc.rust-lang.org/std/keyword.for.html) به طور " +#~ "نزدیکی به حلقه [حلقه `while let` ](while-let-expressions.md) مرتبط است. " +#~ "حلقه `for` به طور خودکار `into_iter()` را روی " +#~ "عبارت فراخوانی می‌کند و سپس روی آن پیشمایش انجام می‌دهد:" + +#~ msgid "You can use `break` and `continue` here as usual." +#~ msgstr "" +#~ "مثل بقیه زبان‌ها می‌توانید از `break` و `continue` به صورت عادی استفاده " +#~ "کنید." + +#~ msgid "Index iteration is not a special syntax in Rust for just that case." +#~ msgstr "پیشمایش اندیس در زبان راست دارای سینتکس خاصی نمی‌باشد." + +#~ msgid "`(0..10)` is a range that implements an `Iterator` trait. " +#~ msgstr "" +#~ "(0..10) یک محدوده است که " +#~ "ویژگی `Iterator` را پیاده‌سازی می‌کند." + +#~ msgid "" +#~ "`step_by` is a method that returns another `Iterator` that skips every " +#~ "other element. " +#~ msgstr "" +#~ "متد `step_by`, متدی است که یک `Iterator` دیگر با قابلیت در نظر نگرفتن " +#~ "بقیه عناصر را برمی‌گرداند." + +#~ msgid "" +#~ "Modify the elements in the vector and explain the compiler errors. Change " +#~ "vector `v` to be mutable and the for loop to `for x in v.iter_mut()`." +#~ msgstr "" +#~ "عناصر را در بردار تغییر دهید و خطاهای کامپایلر را توضیح دهید. بردار v را " +#~ "قابل تغییر کنید (با اضافه کردن `mut`) و حلقه `for` را به `for x in v.iter_mut()` تغییر دهید." + +#~ msgid "`loop` expressions" +#~ msgstr "عبارات `loop`" + +#~ msgid "" +#~ "Finally, there is a [`loop` keyword](https://doc.rust-lang.org/reference/" +#~ "expressions/loop-expr.html#infinite-loops) which creates an endless loop." +#~ msgstr "" +#~ "در نهایت، [کلمه کلیدی `loop`](https://doc.rust-lang.org/reference/" +#~ "expressions/loop-expr.html#infinite-loops) وجود دارد که یک حلقه بی‌پایان " +#~ "ایجاد می‌کند." + +#~ msgid "Here you must either `break` or `return` to stop the loop:" +#~ msgstr "" +#~ "اینجا باید از `break` یا `return` برای توقف حلقه و خروج از آن استفاده " +#~ "کنید:" + +#~ msgid "Break the `loop` with a value (e.g. `break 8`) and print it out." +#~ msgstr "" +#~ "حلقه `loop` را با یک مقدار متوقف کنید (به عنوان مثال `break " +#~ "8` ) و آن را چاپ کنید." + +#~ msgid "" +#~ "Due to type inference the `i32` is optional. We will gradually show the " +#~ "types less and less as the course progresses." +#~ msgstr "" +#~ "به دلیل تعیین نوع ضمنی گذاشتن `i32` اختیاریست. با جلو رفتن در این دوره " +#~ "کمتر و کمتر آن را نشان خواهیم داد." + +#~ msgid "" +#~ "The following code tells the compiler to copy into a certain generic " +#~ "container without the code ever explicitly specifying the contained type, " +#~ "using `_` as a placeholder:" +#~ msgstr "" +#~ "کد زیر به کامپایلر می‌گوید که بدون اینکه کد به صراحت نوع داده را مشخص کند، " +#~ "در یک کانتینر عمومی (generic container) خاص کپی کند، با استفاده از _ به " +#~ "عنوان یک جایگزین برای اعلام نوع داده: " + +#~ msgid "" +#~ "[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator." +#~ "html#method.collect) relies on [`FromIterator`](https://doc.rust-lang.org/" +#~ "std/iter/trait.FromIterator.html), which [`HashSet`](https://doc.rust-" +#~ "lang.org/std/collections/struct.HashSet.html#impl-FromIterator%3CT%3E-for-" +#~ "HashSet%3CT,+S%3E) implements." +#~ msgstr "" +#~ "[`collect`](https://doc.rust-lang.org/stable/std/iter/trait.Iterator." +#~ "html#method.collect) به [`FromIterator`](https://doc.rust-lang.org/std/" +#~ "iter/trait.FromIterator.html) متکی است که [`HashSet`](https://doc.rust-" +#~ "lang.org/std/collections/struct.HashSet.html#impl-FromIterator%3CT%3E-for-" +#~ "HashSet%3CT,+S%3E) آن را پیاده‌سازی می‌کند." + +#~ msgid "Static and Constant Variables" +#~ msgstr "متغیر‌های ایستا و ثابت" + +#~ msgid "" +#~ "The following code demonstrates why the compiler can't simply reuse " +#~ "memory locations when shadowing an immutable variable in a scope, even if " +#~ "the type does not change." +#~ msgstr "" +#~ "کد زیر نشان می دهد که چرا کامپایلر نمی تواند به سادگی از مکان های حافظه " +#~ "که قبلا برای یک متغییر در نظر گرفته است به صورت مجدد وقتی که یک متغییر " +#~ "غیر قابل تغییر داریم استفاده کند. حتی اگر چه نوع داده تغییر نکند." + +#~ msgid "" +#~ "This page offers an enum type `CoinFlip` with two variants `Heads` and " +#~ "`Tails`. You might note the namespace when using variants." +#~ msgstr "" +#~ "در این صفحه نوع`Enum`به اسم `CoinFlip` که دارای `Heads` و `Tails` می‌باشد. " +#~ "هنگام استفاده از `Enum`ها، به این اینگونه نام‌ها توجه کنید." + +#~ msgid "In both, associated functions are defined within an `impl` block." +#~ msgstr "در هر دو، توابع مورد نیازشون در داخل یک بلاک `impl` تعریف می‌شوند." + +#~ msgid "" +#~ "You can define richer enums where the variants carry data. You can then " +#~ "use the `match` statement to extract the data from each variant:" +#~ msgstr "" +#~ "می توانید شمارش های غنی تری را تعریف کنید که در آن انواع مختلف داده " +#~ "باشند. سپس می‌توانید از دستور `match` برای استخراج داده‌ها از هر فیلد " +#~ "استفاده کنید:" + +#~ msgid "" +#~ "The expression is matched against the patterns from top to bottom. There " +#~ "is no fall-through like in C or C++." +#~ msgstr "" +#~ "بر خلاف زبان‌های برخلاف C یا `C++` طبیق الگو به صورت " +#~ "از بالا به پایین نمی‌باشد." + +#~ msgid "" +#~ "The match expression has a value. The value is the last expression in the " +#~ "match arm which was executed." +#~ msgstr "" +#~ "عبارت `match` دارای یک مقدار بازگشتی است. این مقدار آخرین عبارت در بازوی " +#~ "`match` ای است که اجرا شده است." + +#~ msgid "" +#~ "Starting from the top we look for what pattern matches the value then run " +#~ "the code following the arrow. Once we find a match, we stop. " +#~ msgstr "" +#~ "از بالا شروع می‌کنیم و به دنبال الگویی هستیم که با مقدار مطابقت داشته " +#~ "باشد، سپس کد پس از `=>` را اجرا می‌کنیم. بعد از اینکه " +#~ "توی match اولین طبیق الگو انجام شد جستجو متوقف میشود." + +#~ msgid "`match` inspects a hidden discriminant field in the `enum`." +#~ msgstr "" +#~ "دستور `match` یک فیلد تشخیصی پنهان (hidden discriminant field) در `enum` " +#~ "را بررسی می کند." + +#~ msgid "" +#~ "It is possible to retrieve the discriminant by calling `std::mem::" +#~ "discriminant()`" +#~ msgstr "" +#~ "می توان با فراخوانی `std::mem::discriminant()` فیلد " +#~ "تشخیصی پنهان را دریافت کرد." + +#~ msgid "" +#~ "This is useful, for example, if implementing `PartialEq` for structs " +#~ "where comparing field values doesn't affect equality." +#~ msgstr "" +#~ "بهتره بدانیم که اگر `PartialEq` را برای ساختارهایی پیاده سازی کنیم. " +#~ "قابلیت `PartialEq` بر برابری تأثیر نمی‌گذارد." + +#~ msgid "" +#~ "`WebEvent::Click { ... }` is not exactly the same as `WebEvent::" +#~ "Click(Click)` with a top level `struct Click { ... }`. The inlined " +#~ "version cannot implement traits, for example." +#~ msgstr "" +#~ "`WebEvent::Click { ... }` دقیقاً مانند `WebEvent::Click(Click)` با `struct Click " +#~ "{ ... }` در سطح بالا نیست.برای مثال, نسخه درون‌خطی نمی‌تواند ویژگی‌ها " +#~ "را پیاده‌سازی کند." + +#~ msgid "" +#~ "Rust enums are packed tightly, taking constraints due to alignment into " +#~ "account:" +#~ msgstr "" +#~ "`enum`ها در Rust به صورت فشرده بسته بندی شده اند، با در نظر گرفتن محدودیت " +#~ "های ناشی از هم ترازی:" + +#~ msgid "" +#~ "Internally Rust is using a field (discriminant) to keep track of the enum " +#~ "variant." +#~ msgstr "" +#~ "زبان Rust, به صورت داخلی از یک فیلد (discriminant) برای رهگیری نوع " +#~ "فیلدهای `enum` استفاده می کند." + +#~ msgid "Try out other types such as" +#~ msgstr "سایر انواع‌داده را امتحان کنید، مانند:" + +#~ msgid "`dbg_size!(bool)`: size 1 bytes, align: 1 bytes," +#~ msgstr "" +#~ "dbg_size!(bool): اندازه توی " +#~ "حافظه 1 بایت، فضای مورد نیاز برای align نیز 1 بایت است," + +#~ msgid "" +#~ "`dbg_size!(Option)`: size 1 bytes, align: 1 bytes (niche " +#~ "optimization, see below)," +#~ msgstr "" +#~ "dbg_size!(Option): " +#~ "اندازه توی حافظه 1 بایت، ، فضای مورد نیاز برای align نیز 1 بایت است " +#~ "(بهینه‌سازی خاص، در زیر ببینید)" + +#~ msgid "" +#~ "`dbg_size!(&i32)`: size 8 bytes, align: 8 bytes (on a 64-bit machine)," +#~ msgstr "" +#~ "dbg_size!(&i32): اندازه توی " +#~ "حافظه ۸ بایت، ، فضای مورد نیاز برای align نیز ۸ بایت است (روی ماشین ۶۴ " +#~ "بیتی)" + +#~ msgid "" +#~ "`dbg_size!(Option<&i32>)`: size 8 bytes, align: 8 bytes (null pointer " +#~ "optimization, see below)." +#~ msgstr "" +#~ "dbg_size!(Option<&i32>): " +#~ "اندازه توی حافظه ۸ بایت، ، فضای مورد نیاز برای align نیز ۸ بایت است " +#~ "(بهینه‌سازی اشاره‌گر NULL را در زیر ببینید)" + +#~ msgid "" +#~ "Niche optimization: Rust will merge unused bit patterns for the enum " +#~ "discriminant." +#~ msgstr "" +#~ "بهینه‌سازی خاص: Rust الگوهای بیتی استفاده نشده را برای discriminant نوع " +#~ "`Enum` ادغام می‌کند." + +#~ msgid "" +#~ "More complex example if you want to discuss what happens when we chain " +#~ "more than 256 `Option`s together." +#~ msgstr "" +#~ "مثال پیچیده‌تر اگر می‌خواهید در مورد اتفاقی که می‌افتد زمانی که بیش از ۲۶۵ " +#~ "عدد `Option` را به صورت تو در تو صدا بزنیم بحث کنید." + +#~ msgid "" +#~ "Since 1.65, a similar [let-else](https://doc.rust-lang.org/rust-by-" +#~ "example/flow_control/let_else.html) construct allows to do a " +#~ "destructuring assignment, or if it fails, execute a block which is " +#~ "required to abort normal control flow (with `panic`/`return`/`break`/" +#~ "`continue`):" +#~ msgstr "" +#~ "از نسخه 1.65، یک کلیدواژه مشابه به اسم [`let-else`](https://doc.rust-" +#~ "lang.org/rust-by-example/flow_control/let_else.html) اجازه می‌دهد تا یک " +#~ "انتساب به صورت destructuring انجام شود، یا اگر شکست خورد، یک بلوک را اجرا " +#~ "کند که برای خاتمه دادن به جریان کنترل عادی (با panic/return/break/" +#~ "continue) ضروری است:" + +#~ msgid "" +#~ "The [`match` keyword](https://doc.rust-lang.org/reference/expressions/" +#~ "match-expr.html) is used to match a value against one or more patterns. " +#~ "In that sense, it works like a series of `if let` expressions:" +#~ msgstr "" +#~ "[کلمه‌کلیدی `match`](https://doc.rust-lang.org/reference/expressions/match-" +#~ "expr.html) برای مطابقت یک مقدار در برابر یک یا چند الگو استفاده می‌شود. از " +#~ "این نظر، مانند یک سری عبارات `if let` عمل می‌کند:" + +#~ msgid "Save the match expression to a variable and print it out." +#~ msgstr "" +#~ "مقادر بازگشتی از دستور `match` را در متغییری ذخیره کنید و آن را چاپ کنید." + +#~ msgid "Remove `.as_deref()` and explain the error." +#~ msgstr "" +#~ ".as_deref() را حذف کنید و " +#~ "خطا را توضیح دهید." + +#~ msgid "" +#~ "`std::env::args().next()` returns an `Option`, but we cannot " +#~ "match against `String`." +#~ msgstr "" +#~ "std::env::args().next() یک " +#~ "`Option` را برمی‌گرداند،چرا نمی توانیم به " +#~ "عنوان `String` تطبیق الگو کنیم؟" + +#~ msgid "" +#~ "`as_deref()` transforms an `Option` to `Option<&T::Target>`. In our " +#~ "case, this turns `Option` into `Option<&str>`." +#~ msgstr "" +#~ "as_deref() یک `Option` را به `Option<&T::Target>` تبدیل می‌کند. در مورد ما، این `Option` " +#~ "را به `Option<&str>` تبدیل می‌کند." + +#~ msgid "" +#~ "We can now use pattern matching to match against the `&str` inside " +#~ "`Option`." +#~ msgstr "" +#~ "اکنون می‌توانیم از تطبیق الگو برای مطابقت با `&str` " +#~ "داخل `Option` استفاده کنیم." + +#~ msgid "The `_` pattern is a wildcard pattern which matches any value." +#~ msgstr "" +#~ "الگوی _ یک الگوی wildcard (هر حالتی) است که با هر مقداری مطابقت دارد." + +#~ msgid "" +#~ "It can be useful to show how binding works, by for instance replacing a " +#~ "wildcard character with a variable, or removing the quotes around `q`." +#~ msgstr "" +#~ "می‌توان با جایگزینی یک کاراکتر`_` با یک متغیر، یا حذف نقل قول ها در اطراف " +#~ "`q`، به نمایش نحوه کارکرد انتساب کمک کرد." + +#~ msgid "You can demonstrate matching on a reference." +#~ msgstr "می‌توانید تطبیق الگو را با یک ارجاع را نشان دهید." + +#~ msgid "" +#~ "This might be a good time to bring up the concept of irrefutable " +#~ "patterns, as the term can show up in error messages." +#~ msgstr "" +#~ "این ممکن است زمان خوبی برای مطرح کردن مفهوم الگوهای غیرقابل انکار " +#~ "(irrefutable patterns) باشد، زیرا این اصطلاح می تواند در پیام های خطا " +#~ "ظاهر شود." + +#~ msgid "You can also destructure `structs`:" +#~ msgstr "همچنین می‌توانید `structs` را destructure کنید:" + +#~ msgid "" +#~ "Destructuring of slices of unknown length also works with patterns of " +#~ "fixed length." +#~ msgstr "" +#~ "برای destructure کردن برش هایی با طول ناشناخته نیز با الگوهای طول ثابت " +#~ "کار می کند." + +#~ msgid "" +#~ "When matching, you can add a _guard_ to a pattern. This is an arbitrary " +#~ "Boolean expression which will be executed if the pattern matches:" +#~ msgstr "" +#~ "هنگام تطابق، می توانید یک _guard_ به یک الگو اضافه کنید. این یک عبارت " +#~ "بولین دلخواه است که در صورت مطابقت الگو اجرا می شود." + +#~ msgid "" +#~ "You can use the variables defined in the pattern in your if expression." +#~ msgstr "" +#~ "می توانید از متغیرهای تعریف شده در الگو در عبارت `if` خود استفاده کنید." + +#~ msgid "Day 1: Afternoon Exercises" +#~ msgstr "روز ۱: تمرین‌های عصر" + +#~ msgid "We will look at two things:" +#~ msgstr "ما روی ۲ تا چیز نگاهی می‌اندازیم:" + +#~ msgid "The Luhn algorithm," +#~ msgstr "الگوریتم Luhn" + +#~ msgid "An exercise on pattern matching." +#~ msgstr "تمرینی درباره تطبیق الگو" + +#~ msgid "" +#~ "Try to solve the problem the \"simple\" way first, using `for` loops and " +#~ "integers. Then, revisit the solution and try to implement it with " +#~ "iterators." +#~ msgstr "" +#~ "ابتدا سعی کنید مشکل را به روش «ساده» با استفاده از حلقه‌های `for` و اعداد " +#~ "صحیح حل کنید. سپس، سعی کنید آن را با استفاده از `iterator`ها پیاده‌سازی " +#~ "کنید." + +#~ msgid "" +#~ "Memory management: stack vs heap, manual memory management, scope-based " +#~ "memory management, and garbage collection." +#~ msgstr "" +#~ "مدیریت حافظه: پشته (Stack) در مقابل انباشت (Heap)، مدیریت دستی حافظه، " +#~ "مدیریت حافظه مبتنی بر اسکوپ و جمع آوری زباله. " + +#~ msgid "" +#~ "Ownership: move semantics, copying and cloning, borrowing, and lifetimes." +#~ msgstr "" +#~ "Ownership: حرکت semantics،copying و cloning, borrowing و lifetimes." + +#~ msgid "Structs and methods." +#~ msgstr "ساختارها و متدها." + +#~ msgid "" +#~ "The Standard Library: `String`, `Option` and `Result`, `Vec`, `HashMap`, " +#~ "`Rc` and `Arc`." +#~ msgstr "" +#~ "کتابخانه استاندارد: `String`, `Option` و `Result`, `Vec`, `HashMap`, " +#~ "`Rc` و `Arc`." + +#~ msgid "Modules: visibility, paths, and filesystem hierarchy." +#~ msgstr "ماژول‌ها: قابل دیدن بودن, مسیرها و مدیریت سلسله مراتبی فایل‌سیستم" + +#~ msgid "First, let's refresh how memory management works." +#~ msgstr "" +#~ "قبل از هر چیزی, آنچه درباره مدیریت حافظه میدونیم رو بروز رسانی کنیم." + +#~ msgid "The Stack vs The Heap" +#~ msgstr "پشته (Stack) در مقابل انباشت (Heap)" + +#~ msgid "Stack and Heap Example" +#~ msgstr "یک مثال از پشته و انباشت" + +#~ msgid "You allocate and deallocate heap memory yourself." +#~ msgstr "شما خودتان حافظه انباشت را تخصیص داده و تخصیص‌زدایی می‌کنید." + +#~ msgid "" +#~ "If not done with care, this can lead to crashes, bugs, security " +#~ "vulnerabilities, and memory leaks." +#~ msgstr "" +#~ "اگر با دقت انجام نشود، این می تواند منجر به خرابی، اشکال، آسیب‌پذیری‌های " +#~ "امنیتی و نشتی حافظه شود." + +#~ msgid "C Example" +#~ msgstr "مثالی در زبان C" + +#~ msgid "You must call `free` on every pointer you allocate with `malloc`:" +#~ msgstr "" +#~ "باید `free` را برای هر اشاره‌گری که با `malloc` تخصیص می‌دهید، فراخوانی " +#~ "کنید:" + +#~ msgid "" +#~ "Memory is leaked if the function returns early between `malloc` and " +#~ "`free`: the pointer is lost and we cannot deallocate the memory. Worse, " +#~ "freeing the pointer twice, or accessing a freed pointer can lead to " +#~ "exploitable security vulnerabilities." +#~ msgstr "" +#~ "اگر تابع بین `malloc` و `free` مقداری را بازگرداند و از تابع خارج شویم، " +#~ "حافظه نشت می‌کند: اشاره گر گم می‌شود و نمی‌توانیم حافظه را تخصیص‌زدایی کنیم. " +#~ "بدتر از آن، آزاد کردن مجدد اشاره گر یا دسترسی به یک اشاره گر که قبلا آزاد " +#~ "شده می‌تواند منجر به آسیب‌پذیری‌های امنیتی قابل سوءاستفاده شود." + +#~ msgid "" +#~ "Constructors and destructors let you hook into the lifetime of an object." +#~ msgstr "" +#~ "سازنده‌ها و مخرب‌ها به شما امکان می‌دهند تا به طول‌عمر یک شیء متصل (hook) " +#~ "شوید." + +#~ msgid "" +#~ "By wrapping a pointer in an object, you can free memory when the object " +#~ "is destroyed. The compiler guarantees that this happens, even if an " +#~ "exception is raised." +#~ msgstr "" +#~ "با پیچیدن (wrapping) یک اشاره گر در یک شیء، می‌توانید هنگام تخریب شیء، " +#~ "حافظه را آزاد کنید. کامپایلر تضمین می‌کند که این اتفاق می‌افتد، حتی اگر یک " +#~ "exception ایجاد شود." + +#~ msgid "" +#~ "This is often called _resource acquisition is initialization_ (RAII) and " +#~ "gives you smart pointers." +#~ msgstr "" +#~ "این اغلب به عنوان _resource acquisition is initialization_ (RAII) نامیده " +#~ "می‌شود و به شما اشاره گرهای هوشمند می‌دهد." + +#~ msgid "" +#~ "The `std::unique_ptr` object is allocated on the stack, and points to " +#~ "memory allocated on the heap." +#~ msgstr "" +#~ "ابجکت `std::unique_ptr` در پشته تخصیص داده می‌شود و " +#~ "به حافظه‌ای که روی انباشت تخصیص داده شده اشاره می‌کند." + +#~ msgid "" +#~ "At the end of `say_hello`, the `std::unique_ptr` destructor will run." +#~ msgstr "" +#~ "در پایان `say_hello`، تابع مخرب `std::unique_ptr` " +#~ "اجرا می‌شود." + +#~ msgid "The destructor frees the `Person` object it points to." +#~ msgstr "مخرب شیء `Person` را که به آن اشاره می‌کند، آزاد می‌کند." + +#~ msgid "" +#~ "Special move constructors are used when passing ownership to a function:" +#~ msgstr "" +#~ "هنگام انتقال مالکیت به یک تابع از سازنده‌های مخصوص انتقال استفاده می‌شود:" + +#~ msgid "" +#~ "An alternative to manual and scope-based memory management is automatic " +#~ "memory management:" +#~ msgstr "" +#~ "یک جایگزین برای مدیریت حافظه دستی و مبتنی بر اسکوپ، مدیریت حافظه خودکار " +#~ "است:" + +#~ msgid "The programmer never allocates or deallocates memory explicitly." +#~ msgstr "برنامه نویس هیچ وقت به صورت صریح حافظه را تخصیص یا آزاد نمیکند." + +#~ msgid "" +#~ "A garbage collector finds unused memory and deallocates it for the " +#~ "programmer." +#~ msgstr "" +#~ "یک جمع‌آوری زباله حافظه استفاده نشده را پیدا می‌کند و آن را برای برنامه‌نویس " +#~ "تخصیص‌زدایی (آزاد) می‌کند." + +#~ msgid "Java Example" +#~ msgstr "مثالی در Java" + +#~ msgid "The `person` object is not deallocated after `sayHello` returns:" +#~ msgstr "شیء `person` پس از بازگشت `sayHello` تخصیص‌زدایی نمی‌شود:" + +#~ msgid "Memory Management in Rust" +#~ msgstr "مدیریت حافظه در Rust" + +#~ msgid "Memory management in Rust is a mix:" +#~ msgstr "مدیریت حافظه در Rust ترکیبی از موارد زیر است:" + +#~ msgid "Safe and correct like Java, but without a garbage collector." +#~ msgstr "ایمن و صحیح مانند جاوا، اما بدون جمع‌آوری زباله." + +#~ msgid "Scope-based like C++, but the compiler enforces full adherence." +#~ msgstr "" +#~ "مبتنی بر اسکوپ مانند C++، اما کامپایلر همه موارد را " +#~ "رعایت می‌کند." + +#~ msgid "" +#~ "A Rust user can choose the right abstraction for the situation, some even " +#~ "have no cost at runtime like C." +#~ msgstr "" +#~ "کاربر Rust می‌تواند انتخاب کند که کدام انتزاع برای وضعیت مورد نظر مناسب " +#~ "است، برخی مانند C هزینه‌ای در زمان اجرا ندارند." + +#~ msgid "Rust achieves this by modeling _ownership_ explicitly." +#~ msgstr "زبان Rust این کار را با مدل‌سازی صریح مالکیت انجام می‌دهد." + +#~ msgid "" +#~ "If asked how at this point, you can mention that in Rust this is usually " +#~ "handled by RAII wrapper types such as [Box](https://doc.rust-lang.org/std/" +#~ "boxed/struct.Box.html), [Vec](https://doc.rust-lang.org/std/vec/struct." +#~ "Vec.html), [Rc](https://doc.rust-lang.org/std/rc/struct.Rc.html), or [Arc]" +#~ "(https://doc.rust-lang.org/std/sync/struct.Arc.html). These encapsulate " +#~ "ownership and memory allocation via various means, and prevent the " +#~ "potential errors in C." +#~ msgstr "" +#~ "اگر توی این مرحله از شما پرسیده شد که چطوری این کار انجام می‌شود, میتوانید " +#~ "به این موضوع که زبان راست معمولاً توسط انواع `wrapper RAII` مانند [`Box`]" +#~ "(https://doc.rust-lang.org/std/boxed/struct.Box.html), [`Vec`](https://" +#~ "doc.rust-lang.org/std/vec/struct.Vec.html), [`Rc`](https://doc.rust-lang." +#~ "org/std/rc/struct.Rc.html), یا [`Arc`](https://doc.rust-lang.org/std/sync/" +#~ "struct.Arc.html) مدیریت را انجام میدهد. این‌ها مالکیت و تخصیص حافظه را از " +#~ "طریق روش‌های مختلف دربرمی‌گیرند و از خطاهای بالقوه در C جلوگیری می‌کنند." + +#~ msgid "" +#~ "You may be asked about destructors here, the [Drop](https://doc.rust-lang." +#~ "org/std/ops/trait.Drop.html) trait is the Rust equivalent." +#~ msgstr "" +#~ "اگر درباره مخرب‌ها (destructors) از شما پرسیدند, مخرب ها معادل پیاده‌سازی " +#~ "[Drop](https://doc.rust-lang.org/std/ops/trait.Drop.html) هستند." + +#~ msgid "A destructor can run here to free up resources." +#~ msgstr "یک مخرب می‌تواند در اینجا اجرا شود تا منابع را آزاد کند." + +#~ msgid "There is always _exactly_ one variable binding which owns a value." +#~ msgstr "همیشه مالکیت یک مقدار را یک متغییر که بهش انتساب میدیم دارد" + +#~ msgid "The heap data from `s1` is reused for `s2`." +#~ msgstr "داده‌های انباشت از `s1` دوباره برای `s2` استفاده می‌شود." + +#~ msgid "" +#~ "When `s1` goes out of scope, nothing happens (it has been moved from)." +#~ msgstr "وقتی از اسکوپ `s1` خارج می‌شویم، هیچ اتفاقی نمی‌افتد." + +#~ msgid "" +#~ "If students ask about `derive`, it is sufficient to say that this is a " +#~ "way to generate code in Rust at compile time. In this case the default " +#~ "implementations of `Copy` and `Clone` traits are generated." +#~ msgstr "" +#~ "اگر دانشجویان در مورد `derive` پرسیدند، کافی است بگوییم که این راهی برای " +#~ "تولید کد در`Rust` در زمان کامپایل است. در این مورد، پیاده‌سازی‌های پیش‌فرض " +#~ "صفت‌های `Copy` و `Clone` تولید می‌شوند." + +#, fuzzy +#~ msgid "Drawing A Simple GUI" +#~ msgstr "یک کتابخانه GUI ساده" + +#, fuzzy +#~ msgid "concurrency:" +#~ msgstr "همزمانی" + +#, fuzzy +#~ msgid "control flow:" +#~ msgstr "کنترل جریان" + +#, fuzzy +#~ msgid "error handling:" +#~ msgstr "مدیریت خطا (Error Handling)" + +#, fuzzy +#~ msgid "garbage collector:" +#~ msgstr "Garbage Collection" + +#, fuzzy +#~ msgid "generics:" +#~ msgstr "Generics" + +#, fuzzy +#~ msgid "integration test:" +#~ msgstr "Integration Tests" + +#, fuzzy +#~ msgid "main function:" +#~ msgstr "فراخوانی متدهای ناامن" + +#, fuzzy +#~ msgid "method:" +#~ msgstr "متدها" + +#, fuzzy +#~ msgid "module:" +#~ msgstr "ماژول‌ها" + +#, fuzzy +#~ msgid "ownership:" +#~ msgstr "مالکیت" + +#, fuzzy +#~ msgid "panic:" +#~ msgstr "Panics" + +#, fuzzy +#~ msgid "receiver:" +#~ msgstr "درایور" + +#, fuzzy +#~ msgid "standard library:" +#~ msgstr "کتابخانه‌های استاندارد" + +#, fuzzy +#~ msgid "struct:" +#~ msgstr "ساختارها" + +#, fuzzy +#~ msgid "thread:" +#~ msgstr "تردها" + +#, fuzzy +#~ msgid "trait:" +#~ msgstr "trait:" + +#, fuzzy +#~ msgid "union:" +#~ msgstr "Unions" + +#, fuzzy +#~ msgid "unit test:" +#~ msgstr "تست‌های واحد (Unit Tests)" + +#, fuzzy +#~ msgid "variable:\\" +#~ msgstr "متغیرها" + +#, fuzzy +#~ msgid "Pattern matching" +#~ msgstr "تطبیق الگو"