مقدمه

به زبان برنامه‌نویسی Rust، کتابی برای معرفی زبان Rust خوش‌آمدید. این زبان به شما کمک می‌کند که برنامه‌های سریع‌تر و قابل اتکا بنویسید. انعطاف پذیری برنامه‌نویسی سطح بالا و قدرت کنترل سطح پایین معمولاً در طراحی زبان‌های برنامه‌نویسی با هم در تضاد هستند. Rust این تضاد را به چالش می‌کشد. با ایجاد تعادل در ظرفیت تکنیکی و تجربه راحت توسعه دهنده، Rust اجازه می‌دهد بدون دردسر های شایع در این سطح به کنترل جزئیات سطح پایین(مثل مدیریت حافظه) بپردازید.

Rust به درد چه کسانی می‌خورد؟

Rust برای دلایل متنوعی برای بسیاری از افراد ایدآل است. به چند دلیل اصلی می‌پردازیم.

گروه‌های توسعه دهندگان

زبان Rust نشان داده که ابزاری پربار برای همکاری بین گروه‌های بزرگ توسعه دهندگان با سطوح مختلف دانش و تسط بر برنامه‌نویسی سیستم است. کد سطح پایین در برابر خطا‌های نامحسوس بسیاری آسیب پذیر است که در اکثر زبان‌های دیگر فقط با تست‌های زیاد و فراگیر، بررسی دقیق و بازبینی توسعه دهندگان با تجربه قابل برطرف کردن است. در Rust کامپایلر نقش دروازه‌بانی را ایفا می‌کند که از کامپایل شدن کد‌های شامل چنین خطاهایی مثل خطا‌های همزمانی (Concurrency) جلوگیری می‌کند. گروهی که از چنین قابلیتی استفاده کند می‌تواند به جای درگیری با این خطاها وقت خود را صرف ساختن منطق برنامه کند.

Rust همچنین ابزار‌های مرسوم توسعه نرم‌افزار امروزی را به دنیای برنامه‌نویسی سیستم می‌آورد:

  • کارگو(Cargo)، مدیربسته و ابزار ساخت فایل اجرایی، اضافه کردن، کامپایل کردن و مدیریت پیشنیاز‌ها را ساده و بی‌دردسر می‌کند و به آنها در اکوسیستم Rust یکپارچگی می‌بخشد.
  • Rustfmt ثبات نحوه کد نویسی بین توسعه‌دهندگان را تضمین می‌کند.
  • سرور زبان Rust ادغام زبان را با محیط‌های توسعه (IDE) برای کامل کردن خودکار کد و نشان دادن خطا‌ها را ممکن می‌سازد.

با استفاده از این ابزار‌ها و سایر ابزار‌های اکوسیستم Rust، توسعه‌دهندگان در نوشتن کد‌های سطح سیستم پربار خواهند بود.

دانشجویان

Rust برای دانشجویان و کسانی که یادگیری مفاهیم سیستم برایشان جالب است نیز ساخته شده است. با استفاده از Rust، افراد بسیاری مباحثی مانند توسعه سیستم‌های عامل را فراگرفته‌اند. جامعه نیز استقبال بسیاری برای پاسخگویی به سوالات دانشجویان دارد. با تلاش‌هایی مثل تألیف این کتاب، تیم‌های Rust درنظر دارند مباحث سیستم را برای افراد بیشتری، به ویژه برنامه‌نویسان تازه کار، قابل دسترسی کنند.

شرکت‌ها

صد‌ها شرکت بزرگ و کوچک از Rust برای تولید ابزارهای مختلف استفاده می‌کنند. ابزار‌هایی مثل ابزار خط فرمان، وب سرویس‌ها، ابزار DevOps، دستگاه‌های سیار، آنالیز صدا و تصویر، کدگذاری، رمزارز‌ها، بیوانفورماتیک، موتور‌های جستجو، برنامه‌های مربوط به اینترنت چیز‌ها ، یادگیری ماشین و حتی قسمت‌های مهمی از مرورگر فایرفاکس.

توسعه‌دهندگان نرم‌افزار‌های متن‌باز

Rust متعلق به کسانی است که علاقه‌مند به مشارکت در ساخت زبان، جامعه، ابزار توسعه و کتابخانه ها باشند. اگر در ساخت زبان Rust کمک کنید بسیار خوشحال خواهیم شد.

افرادی که به سرعت و پایداری اهمیت می‌دهند

Rust برای کسانی مناسب است که در یک زبان برنامه‌نویسی سرعت و پایداری را مدنظر دارند. منظور از سرعت فقط سرعت اجرای برنامه‌هایی که با Rust می‌سازید نیست؛ بلکه سرعتی که Rust به شما اجازه می‌دهد برنامه بنویسید نیز مدنظر است. بررسی‌های کامپایلر Rust، پایداری را حین افزودن امکانات و ویژگی‌های جدید و بهینه‌سازی یک برنامه تضمین می‌کند. این دقیقا برعکس کد های ناپایدار قدیمی در زبان‌هایی که این بررسی‌هارا انجام نمی‌دهند و معمولاً باعث ایجاد وحشت هنگام تغییر قسمتی از برنامه می‌شوند. با تاکید روی انتزاعی‌سازی بدون هزینه (zero-cost)، امکانات سطح بالاتر که به کد سطح پایین با سرعت قبلی کامپایل می‌شوند، Rust علاوه بر پایداری سرعت را نیز تضمین می‌کند.

زبان Rust پشتیبانی از کاربران بیشتری را هم در نظر دارد؛ موارد ذکر شده بالا تنها بخش کوچکی از ذینفعان هستند. درکل می‌توان گفت که بزرگ‌ترین بلند پروازی Rust از بین بردن معامله ایست که برنامه‌نویس‌ها سالهاست که پذیرفته‌اند. مبادله سرعت و سازندگی و امنیت و انعطاف پذیری که Rust همراه با هم ارائه می‌دهد. Rust را امتحان کنید و ببینید که آیا این ویژگی‌ها برای شما مناسب است یا خیر.

این کتاب برای چه کسی مناسب است

این کتاب در نظر می‌گیرد که حداقل از یکی از زبان‌های برنامه‌نویسی دیگر استفاده کرده‌اید بدون اینکه زبان خاصی را در نظر داشته باشد. تلاش کرده‌ایم که محتوای کتاب برای افرادی که از پس‌زمینه‌های مختلف می‌آیند قابل استفاده باشد. وقت زیادی صرف اینکه برنامه‌نویسی چیست یا اینکه چطور باید درباره آن فکر کرد نمی‌کنیم. اگر در برنامه‌نویسی تازه‌کار هستید بهتر است از کتابی استفاده کنید که مقدمه‌ای از برنامه‌نویسی ارائه دهد.

چگونه از کتاب استفاده کنم

فرض بر این است که کتاب را از اول به آخر می‌خوانید. فصل‌های عقب‌تر از مفاهیم فصل‌های قبل از خودشان در طرح مباحث جدید استفاده می‌کنند و فصل‌هایی نیز ممکن است وارد جزئیات موضوعی نشوند؛ معمولاً به جزئیات بیشتر در فصل‌های بعد پرداخته می‌شود.

دو نوع فصل در این کتاب خواهید دید: فصل‌های مفهومی و فصل‌های پروژه محور. در فصول مفهومی، مبحثی را از زبان Rust می‌آموزید. در فصول پروژه محور اما برنامه‌های کوچکی با استفاده از مباحثی که آموخته‌اید می‌سازیم. فصول ۲، ۱۲ و ۲۰ فصول پروژه محور هستند و باقی مفهمومی می‌باشند.

فصل ۱ نحوه نصب Rust و نوشتن برنامه "Hello World"، استفاده از کارگو مدیربسته و ابزار توسعه Rust را نشان می‌دهد. فصل ۲ یک مقدمه عملی به زبان Rust ارائه می‌کند. این فصل مفاهیم را در سطح بالا پوشش می‌دهد که فصل‌های بعد جزئیات بیشتری ارائه می‌دهند. اگر می‌خواهید فوراً دست‌به‌کار شوید، می‌توانید از فصل ۲ شروع کنید. شاید بخواهید از فصل ۳ رد شوید که مربوط به قابلیت‌های Rust که مشابه زبان‌های دیگر هستند است و به فصل ۴ بروید تا «سیستم مالکیت» Rust را یاد بگیرید. اگر در یاد گرفتن وسواس دارید و روی یادگیری جزئیات هر موضوعی قبل از شروع موضوع بعد تاکید دارید، ممکن است بخواهید از فصل ۲ رد شده و فصل ۳ را قبل از آن تمام کنید و با بازگشت به فصل ۲ جزئیاتی را که یادگرفته اید روی یک پروژه عملی کنید.

فصل ۵ در مورد structها و متود‌ها صحبت می‌کند. فصل ۶ حاوی enumها، عبارت‌های match و کنترل if let می‌باشد. از struct و enum برای ساخت تایپ‌های جدید استفاده می‌کنید.

در فصل ۷، درمورد سیستم ماژول‌های Rust یادمی‌گیرید و با قوانین حریم‌خصوصی برای سازمان دادن کد‌ها و رابط برنامه‌نویسی عمومی(API) آن آشنا می‌شوید. فصل ۸ در مورد برخی ساختمان‌داده‌ها صحبت می‌کنیم که در کتابخانه استاندارد ارائه می‌شوند. مانند بردارها(vectors)، رشته‌ها و جدول hash. فصل ۹ فلسفه و تکنیک رسیدگی به خطاها در Rust را بررسی می‌کند.

فصل ۱۰ وارد مباحث generic، خصیصه‌ها و طول عمر می‌شود که شما را قادر می‌سازد کد‌هایی که با تایپ‌های متفاوت کار ‌کنند بنویسید. فصل ۱۱ درباره تست است. حتی با وجود تضمین امنیت Rust باید مطمئن شوید که منطق برنامه‌تان صحیح است. در فصل ۱۲ برخی از قابلیت‌های برنامه تحت خط‌فرمان grep را پیاده‌سازی می‌کنیم. grep برنامه‌ای است که با استفاده از آن می‌توان متون را درون فایل‌ها جستجو کرد لذا، بسیاری از مفاهیمی که در فصول پیش بررسی کرده‌ایم را به کار‌ خواهیم برد.

فصل ۱۳ Closure‌ها و iteratorها را واشکافی می‌کند: قابلیت‌هایی در Rust که از برنامه‌نویسی تابعی (Functional) نشئت می‌گیرد. در فصل ۱۴ عمیق تر کارگو را بررسی خواهیم کرد و درباره بهترین شیوه‌ها برای به اشتراک‌گذاری کتابخانه‌ها با دیگران صحبت می‌کنیم. فصل ۱۵ نیز اشاره‌گر‌های هوشمند را در کتابخانه استاندارد بررسی می‌کند و خصیصه‌هایی را فراهم ‌می‌سازد که از عملکرد آنها استفاده کنیم.

در فصل ۱۶ مدل‌های برنامه‌نویسی هم‌زمان(Concurrent) را بررسی می کنیم و درباره اینکه چطور Rust به شما کمک می‌کند که بدون ترس از چند رشته پردازنده در برنامه خود بهره ببرید. فصل ۱۷ اصطلاحات Rust را با اصول برنامه‌نویسی شیء گرا که با آنها آشنا هستید مقایسه می‌کند.

فصل ۱۸ مرجعی از الگو‌ها و پیدا کردن آنها می‌باشد که روش‌های قدرتمندی برای مطرح کردن ایده‌ها در برنامه‌های Rust هستند. فصل ۱۹ مجموعه‌ای از مباحث پیشرفته جالب شامل کد ناامن Rust، ماکرو‌ها، و اطلاعات بیشتر از طول عمر، خصیصه‌ها، تایپ‌ها، توابع و Closure‌ها می‌باشد.

در فصل ۲۰ پروژه‌ای شامل یک وب‌سرور سطح پایین با پردازش چند‌رشته‌ای پیاده‌سازی خواهیم کرد!

درنهایت، چند ضمیمه اطلاعاتd مفید درباره زبان به ‌شکل مرجع ارائه می‌کند. ضمیمه الف در مورد کلمات کلیدی Rust، ضمیمه ب درمورد اپراتور‌ها و نماد‌ها، ضمیمه پ در مورد خصیصه‌های قابل اشتقاق از کتابخانه استاندارد، ضمیمه ت درباره چند ابزار توسعه مفید و ضمیمه ث درمورد نسخه‌های مختلف Rust توضیح می‌دهند

هیچ روشی ‌در خواندن این کتاب اشتباه نیست: اگر می‌خواهید قسمت‌هایی را رد کنید راحت باشید! اگر در فهم مطلبی گیج شدید، ممکن است بخواهید به فصل های قبلی برگردید. هر طور که راحتید از کتاب استفاده کنید.

یک بخش مهم از روند یادگیری Rust، یادگرفتن خواندن خطا‌های کامپایلر است: خطاها شما را به رسیدن به برنامه خوب راهنمایی ‌می‌کنند. به این دلیل، مثال های زیادی که کامپایل نمی‌شوند به همراه پیام‌های خطای خروجی کامپایلر در هر مورد را به شما نشان می‌دهیم. توجه داشته باشید که اگر مثالی تصادفی را انتخاب و کامپایل کنید ممکن است موفق نشوید. مطمئن شوید که متن اطراف مثال را بخوانید تا مشخص شود که آیا آن مثال به صورت عمدی با خطا نوشته شده است یا خیر. «فریس» هم به شما کمک می‌کند که کدی که قرار نیست کامپایل شود را بشناسید:

فریسمعنی
کد کامپایل نمی‌شود!
کد پنیک می‌کند!
این بلاک کد حاوی کد نا‌امن است.
این کد نتیجه مورد نظر را ندارد.

در اکثر مواقع، شما را به نسخه درست کدی که کامپایل نمی‌شود راهنمایی خواهیم کرد.

کد منبع

کد منبع این کتاب به زبان اصلی در آدرس زیر موجود است. گیت‌هاب.