کتاب Design Patterns and Best Practices in Rust: Enhance your Rust skills by applying idiomatic approaches to real-world software design 1st Edition (الگوهای طراحی و بهترین روشها در Rust: مهارتهای خود را در Rust با بهکارگیری رویکردهای اصیل (idiomatic) در طراحی نرمافزار دنیای واقعی ارتقا دهید – ویرایش اول) به توسعهدهندگان Rust کمک میکند تا با کنار گذاشتن الگوهای سنتی و شیءگرا که اغلب با مدل ownership و borrow checker این زبان سازگاری ندارند، به طراحی نرمافزارهایی کارآمد، ایمن و قابل نگهداری بپردازند.
در ادامه مقدمهای از کتاب Design Patterns and Best Practices in Rust را از زبان نویسنده شرح خواهیم داد.
مقدمهای بر کتاب Design Patterns and Best Practices in Rust:
راست طوری است که آدم را به خود جذب میکند. میدانید که شعارش چیست: ایمنی حافظه، همزمانی بدون ترس، انتزاعات با هزینه صفر، و چندین ویژگی دیگر. شهرتی تا حدودی موجه دارد بهعنوان زبانی که «اگر کامپایل شود، کار میکند». فراتر از آن، اگر این کتاب را میخوانید، احتمالاً تجربه کردهاید که چقدر میتواند سرگرمکننده باشد. کار کردن با این زبان حس تجربهای متفاوت و گاهی لذتبخش دارد.
احتمالاً لحظات نهچندان سرگرمکنندهای هم داشتهاید. کدی که در جاوا یا پایتون ساده بود، ناگهان کامپایل نمیشود. borrow checker طرحهای بهظاهر منطقی را رد میکند. سراغ الگوهای آشنا از برنامهنویسی شیءگرا میروید و میبینید که به بنبستهای frustrating ختم میشوند: جنگیدن با lifetimeها، پراکندن کلون (clone()) در همه جا، یا محصور کردن همه چیز در Rc<RefCell<T>> فقط برای اینکه کامپایلر از اعتراض دست بردارد. کد کامپایل میشود، اما حس غلطی دارد. میدانید که راه بهتری وجود دارد.
راه بهتری وجود دارد. اما به چیزی بیش از یادگیری نحو جدید یا به خاطر سپردن مجموعهای متفاوت از قوانین نیاز دارد. توسعه واقعاً مؤثر در Rust نیازمند دگرگونی در نحوه برخورد شما با طراحی نرمافزار است. الگوها و تکنیکهایی که در زبانهای دیگر به کارتان میآیند، در Rust نه تنها از نظر نحوی متفاوت هستند، بلکه از نظر مفهومی نیز تفاوت دارند. درونی کردن فلسفه Rust و اجازه دادن به آن برای شکلدهی به تفکر شما، از هر الگو یا تکنیک منفردی مهمتر است.
به عنوان یک توسعهدهنده با تجربه، شما از قبل جعبه ابزاری پر از رویکردهایی دارید که همیشه جواب دادهاند. در Rust، به یک جعبه ابزار جدید نیاز دارید. برخی از ابزارها آشنا خواهند بود. برخی نیاز به سازگاری دارند. برخی کاملاً جدید خواهند بود. و شاید شگفتانگیزترین نکته این باشد که محدودیتهایی که در ابتدا محدودکننده به نظر میرسند – مالکیت (ownership)، قرضگیری (borrowing) و طول عمرها (lifetimes) – در نهایت شما را به سمت طراحیهای بهتر راهنمایی میکنند. وقتی جنگ با کامپایلر را متوقف کنید و شروع به گوش دادن به آن کنید، کشف میکنید که او همکارترین همکاری است که تا به حال داشتهاید.
کتاب Design Patterns and Best Practices in Rust این دگرگونی را از طریق سه پروژه عملی ترسیم میکند. ما با یک «ماشین حساب بد» (Bad Calculator) که عمداً خراب است شروع میکنیم تا نشان دهیم وقتی سعی میکنید جاوا یا ++C را با نحو Rust بنویسید، چه اشتباهاتی رخ میدهد.
سپس آن را از صفر به عنوان «ماشین حساب درست» (Correct Calculator) بازسازی میکنیم، و الگوهای طراحی کلاسیک چهارتایی گنگ (Gang of Four) را تطبیق میدهیم تا با مدل مالکیت و سیستم نوع Rust کار کنند، نه علیه آنها. در نهایت، «سامسا» (Samsa) را میسازیم، یک میکروسرویس نشر/اشتراک (publish/subscribe)، با استفاده از الگوهایی که منحصر به Rust هستند: الگوهایی که از سیستم نوع برای شناسایی خطاها در زمان کامپایل استفاده میکنند، از اصطلاحات برنامهنویسی تابعی به عنوان بخشی طبیعی از زبان بهره میبرند، و ویژگیهای منحصربهفرد Rust را به مزیتهای معماری تبدیل میکنند. در پایان، نه تنها میدانید که چگونه الگوها را در Rust به کار ببرید، بلکه به زبان Rust فکر خواهید کرد.
آنچه کتاب Design Patterns and Best Practices in Rust پوشش نمیدهد
این کتاب بر الگوهای طراحی، تصمیمات معماری و Rust اصیل (idiomatic) تمرکز دارد. چندین موضوع مهم خارج از این حیطه قرار میگیرند، از جمله استراتژیهای تست، بنچمارک، یکپارچهسازی مداوم (CI)، استقرار (deployment) و انتخاب زمان اجرای ناهمگام (async runtime). اینها موضوعات قابل توجهی هستند که به جای پوشش سطحی، نیاز به برخورد تخصصی دارند.
مخزن کدی که همراه کتاب Design Patterns and Best Practices in Rust است شامل مجموعه تستهایی برای مثالهای هر فصل است و خوانندگان را تشویق میکنیم که آنها را در کنار متن مطالعه کنند. جایی که یک الگو پیامدهای خاصی برای تستپذیری دارد، به طور خلاصه به آن اشاره میکنیم، اما کاوش کامل تست در Rust فراتر از چیزی است که در اینجا قصد انجام آن را داریم.
کتاب Design Patterns and Best Practices in Rust برای چه کسانی است؟
این کتاب برای برنامهنویسان با تجربه Rust است که دانش زبان، ابزارها و نحو آن را دارند. اگر میتوانید برنامههای پایه Rust بسازید و مفاهیمی مانند مالکیت، قرضگیری و طول عمرها را درک میکنید، این کتاب به شما کمک میکند گام بعدی را بردارید: ساختاردهی کد خود برای انجام وظایف رایج و غلبه بر چالشهای رایج به روشی اصیل (idiomatic) و «Rusty».
نیازی به دانش قبلی الگوهای طراحی ندارید، هرچند آشنایی با مفاهیم برنامهنویسی شیءگرا از زبانهایی مانند جاوا، ++C یا پایتون به شما کمک میکند تا تفاوت رویکرد Rust را درک کنید. کتاب Design Patterns and Best Practices in Rust به شما کمک میکند از اشتباهات رایج ناشی از به کار بردن الگوهایی که در Rust کار نمیکنند اجتناب کنید و شما را به سوی جایگزینهای مؤثر راهنمایی میکند.
آنچه کتاب Design Patterns and Best Practices in Rust پوشش میدهد:
فصل ۱، چرا Rust متفاوت است؟، به بررسی آنچه Rust را منحصربهفرد میکند و چرا الگوهای آشنا از زبانهای دیگر اغلب آنطور که انتظار میرود کار نمیکنند، میپردازد. پروژه «ماشین حساب بد» را معرفی میکند که در چهار فصل اول به عنوان داستان عبرتآموز ما عمل خواهد کرد، و تجربه رایج برخورد به دیوار را هنگام حرکت از برنامههای ساده Rust به طرحهای پیچیدهتر بررسی میکند.
فصل ۲، ضدالگو: طراحی برای شیءگرایی، رایجترین تله برای توسعهدهندگانی که از زبانهای شیءگرا میآیند را بررسی میکند: تلاش برای بازآفرینی سلسلهمراتب وراثت در Rust. بررسی میکنیم که چرا تکنیکهایی مانند سوء استفاده از Deref برای شبیهسازی وراثت، استفاده نادرست از traits به عنوان رابطها (interfaces) و ساختن سلسلهمراتب عمیق نوع به کدهای شکننده و غیراصیل منجر میشوند. یاد میگیرید این الگوها را در کد خود تشخیص دهید و بفهمید چرا شکست میخورند.
فصل ۳ کتاب Design Patterns and Best Practices in Rust، ضدالگو: استفاده از Clone و Rc در همه جا، به وسوسه دور زدن مالکیت با کلون کردن همه چیز یا محصور کردن مقادیر در تغییرپذیری درونی با شمارش ارجاع (reference-counted interior mutability) میپردازد. در حالی که این ابزارها کاربردهای مشروعی دارند، استفاده پیشفرض از آنها منجر به کدی میشود که کند، شکننده و دشوار برای استدلال است. میبینیم که چگونه کلون کردن بیش از حد، مشکلات عمیقتر طراحی را پنهان میکند و چگونه Rc<RefCell<T>> دوباره همان باگهایی را معرفی میکند که مدل مالکیت Rust برای جلوگیری از آنها طراحی شده است.
فصل ۴، با borrow checker نجنگید، به ناامیدی ناشی از کار کردن علیه برجستهترین ویژگی Rust میپردازد. راهحلهای جایگزین مانند کد unsafe بیش از حد، استاتیکهای mutable، و حرکات ژیمناستیک annotation lifetime را بررسی میکنیم و نشان میدهیم که چرا هر کدام مشکلات بیشتری را نسبت به راهحلهایشان ایجاد میکنند. مهمتر اینکه، میبینیم چگونه به بازخورد borrow checker گوش دهیم و ساختارهای داده را طوری بازطراحی کنیم که مالکیت به طور طبیعی جریان یابد.
فصل ۵ کتاب Design Patterns and Best Practices in Rust، الگوهای ایجاد (Creational): ساختن چیزها، دومین پروژه اصلی را آغاز میکند: بازسازی صحیح ماشین حساب خود با استفاده از الگوهای طراحی اثباتشده. ما متدهای کارخانه (Factory Methods)، کارخانههای انتزاعی (Abstract Factories)، سازندهها (Builders)، تکنمونهها (Singletons) و نمونههای اولیه (Prototypes) را پوشش میدهیم و نشان میدهیم که چگونه مدل مالکیت، سیستم traits و دید ماژولها در Rust پیادهسازی برخی از این الگوها را پیشپاافتاده و برخی دیگر را کاملاً غیرضروری میکند.
فصل ۶، الگوهای ساختاری (Structural): اتصال و تجمیع مؤلفهها، نحوه ترکیب اشیاء و ساخت رابطهای انعطافپذیر با استفاده از تزئینکنندهها (Decorators)، تطبیقدهندهها (Adapters)، نماها (Facades)، کامپوزیتها (Composites) و الگوی پل (Bridge) را بررسی میکند. بررسی میکنیم که چگونه اشیاء trait در Rust چندریختی زمان اجرا را برای الگوهای ساختاری امکانپذیر میسازند، چرا Proxy و Flyweight عمدتاً توسط ویژگیهای داخلی Rust مدیریت میشوند، و چگونه مدل مالکیت پیادهسازی هر الگو را شکل میدهد.
فصل ۷ کتاب Design Patterns and Best Practices in Rust، الگوهای رفتاری ۱ (Behavioral): اقدام کردن، الگوهای انجام اقدامات، پردازش درخواستها و انتخاب الگوریتمها در زمان اجرا را پوشش میدهد. ما Command، زنجیره مسئولیت (Chain of Responsibility)، استراتژی (Strategy)، میانجی (Mediator) و متد الگو (Template Method) را پیادهسازی میکنیم و نشان میدهیم که چگونه بستهشدنها (closures)، enumها و سیستم traits در Rust جایگزینهای قدرتمندی برای پیادهسازیهای مبتنی بر کلاس در زبانهای دیگر ارائه میدهند.
فصل ۸ کتاب Design Patterns and Best Practices in Rust، الگوهای رفتاری ۲ (Behavioral): پیگیری وضعیت ، ماشین حساب درست را با الگوهای حفظ و بازرسی وضعیت کامل میکند. ما Iterator، ماشینهای حالت (State Machines)، یادگار (Memento) برای خنثی/انجام مجدد (undo/redo)، ناظر (Observer) برای مدیریت رویداد، و بازدیدکننده (Visitor) برای پیمایش عبارت را پیادهسازی میکنیم. چندین مورد از این الگوها از ویژگیهای داخلی Rust بهره میبرند: trait iterator، تطبیق الگو (pattern matching) و ماشینهای حالت مبتنی بر enum.
فصل ۹ کتاب Design Patterns and Best Practices in Rust، الگوهای معماری (Architectural) ، سومین و بلندپروازانهترین پروژه را آغاز میکند: سامسا (Samsa)، یک میکروسرویس نشر/اشتراک. ما اصول طراحی سطح بالا برای ساختاردهی برنامههای Rust را تعیین میکنیم، از جمله معماری جریان داده، محدود کردن تغییرپذیری در مرزهای سیستم، بهرهگیری از ماژولها برای کپسولهسازی، و ساختاردهی دادهها به گونهای که مالکیت و قرضگیری به تمیزی کار کنند.
فصل ۱۰ کتاب Design Patterns and Best Practices in Rust، الگوهایی که از سیستم نوع بهره میبرند، الگوهای منحصربهفرد Rust را معرفی میکند که از سیستم نوع به عنوان یک ابزار توسعه فعال استفاده میکنند. بستهبندهای NewType (NewType wrappers) بدون هزینه زمان اجرا، معنای معنایی اضافه میکنند. «تجزیه کن، اعتبارسنجی نکن» (Parse, Don’t Validate) اعتبار داده را در نوع کدگذاری میکند. الگوی TypeState انتقالهای حالت غیرمجاز را در زمان کامپایل غیرممکن میسازد. Traits مهر و موم شده (Sealed Traits) پیادهسازی trait را به مجموعههای کنترلشده از انواع محدود میکند.
فصل ۱۱ کتاب Design Patterns and Best Practices in Rust، الگوهای برنامهنویسی تابعی، قابلیتهای برنامهنویسی تابعی Rust را به عنوان ابزارهای طراحی عملی بررسی میکند. ترکیب توابع و پایپلاینها، استفاده از جنریکها به عنوان کلاسهای نوع، تطبیق الگوی پیشرفته برای تبدیل دادههای پیچیده، و بستهشدنها به عنوان مؤلفههای معماری درجه یک را پوشش میدهیم.
فصل ۱۲ کتاب Design Patterns and Best Practices in Rust، الگوهای نوظهور از ویژگیهای اصلی Rust، الگوهای ساخته شده بر روی ویژگیهایی را بررسی میکند که معادل مستقیمی در زبانهای دیگر ندارند. ترکیب پیشرفته Result و Option، عبارتهای بلوکی به عنوان ابزارهای محدودهسازی، الگوهای RAII برای مدیریت منابع از طریق trait Drop در Rust، و تکنیکهایی برای نوشتن کدی که هم ایمن و هم مختصر است.
فصل ۱۳ کتاب Design Patterns and Best Practices in Rust، تکیه بر Rust ، از الگوهای خاص فاصله میگیرد تا در مورد دگرگونی در هر سه پروژه تأمل کند. بررسی میکنیم که ماشین حساب بد، ماشین حساب درست و سامسا به ما درباره کار کردن با Rust به جای کار کردن علیه آن چه آموختند، و اصول تفکر بومی Rust را که از این سفر ظهور میکند، بیان میکنیم.
سرفصلهای کتاب Design Patterns and Best Practices in Rust:
- Preface
- Part 1: Thinking in Rust
- Chapter 1: Why Is Rust Different?
- Chapter 2: Anti-Pattern: Designing for Object Orientation
- Chapter 3: Anti-Pattern: Using Clone and Rc Everywhere
- Chapter 4: Don’t Fight the Borrow Checker
- Part 2: Replacing Traditional Design Patterns
- Chapter 5: Creational Patterns: Making Things
- Chapter 6: Structural Patterns: Connecting and Aggregating Components
- Chapter 7: Behavioral Patterns 1: Taking Action
- Chapter 8: Behavioral Patterns 2: Keeping Track
- Part 3: New Patterns for Rust
- Chapter 9: Architectural Patterns
- Chapter 10: Patterns That Leverage the Type System
- Chapter 11: Patterns from Functional Programming
- Chapter 12: Patterns Emerging from Rust’s Core Features
- Chapter 13: Leaning into Rust
- Chapter 14: Unlock Your Exclusive Benefits
- Other Books You May Enjoy
- Index
جهت دانلود کتاب Design Patterns and Best Practices in Rust میتوانید پس از پرداخت، دریافت کنید.

دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.