دوره آموزش Rust
زبان برنامهنویسی Rust به توانمندسازی برنامهنویسان کمک میکند و میتواند مهارتهای برنامهنویسی آنها را تقویت کند. در حقیقت، فارغ از نوعِ کدی که مینویسیم، این زبان ما را قادر میسازد که برنامههایی بهتر و با قابلیت اطمینان بالاتر (more reliable) و در حوزههایی گستردهتر از گذشته بنویسیم. به عنوان نمونه، برنامهنویسی سطح سیستم را در نظر بگیرید که با جزئیات سطح پایینی مانند مدیریت حافظه، نمایش دادهها و مسئلهی همزمانی (concurrency) سر و کار دارد. این قلمروهای برنامهنویسی چندان سرراست و ساده نیستند و کار کردن در این حوزهها منحصر به برنامهنویسان با تجربهای است که به واسطهی سالها صرف زمان و آزمایش، با مشکلات و خطاهای مرسوم در این قلمروها و نیز با مخاطرات امنیتی بالقوه در این حوزهها آشنایی دارند. اما حتی این افراد باتجربه هم هنگام کار در این قلمروها جانب احتیاط را کاملاً نگه داشته و مراقبند که کد آنها به واسطهی حفرههای امنیتی در معرض سوء استفاده و خرابکاری نباشد.
Rust با از بین بردن مشکلات و دامهای قدیمی، این محدودیتها را از میان برداشته و با استفاده از یک مجموعه ابزار ایدهآل در این مسیر به ما کمک میکند. برنامهنویسانی که به کنترل و مدیریت جزئیات سطح پایین برنامه نیاز دارند، میتوانند این کار را با استفاده از Rust انجام دهند، بدون اینکه با ریسک ناشی از حفرههای امنیتی و دامهای معمول مواجه باشند و یا نیازی به یادگیری دقیق یک مجموعه ابزار پیچیده داشته باشند. ارزش واقعی Rust در این است که این زبان طوری طراحی شده که ما را به طور طبیعی به سمت نوشتن کد قابل اطمینان و کارآمد از نظر سرعت و میزان استفاده از حافظه، هدایت کند.
Rust برای برنامهنویسانی که سابقهی کار با زبانهای سطح پایین و برنامهنویسی در سطح سیستم را داشتهاند یک انتخاب جاهطلبانه محسوب میشود که میتواند بلندپروازیهای آنها را جامهی عمل بپوشاند. یک نمونه از این دست بلندپروازیها موازیسازی بدون خطر است. در واقع، موازیسازی (parallelism) در Rust از اینرو یک فرایند کمخطر محسوب میشود که کامپایلر این زبان قادر است تا اشتباهات و خطاهای سنتی مرسوم در این حوزه را به دام اندازد. به این ترتیب، ما میتوانیم بدون نگرانی از بسیاری از آسیبپذیریهای معمول، بهینهسازیهای تهاجمیتری را در کد خود انجام دهیم.
اما Rust به برنامهنویسی سیستم و سطح پایین محدود نمیشود. این زبان به اندازهی کافی ارگونومیک هست که تولید برنامههای CLI (Command Line Interface) و ساخت وبسرورها و تولید بسیاری از برنامههای دیگر را بدون پیچیدگی به انجام برساند. کار کردن با Rust به ما امکان میدهد که مهارتهایی کسب کنیم که در حوزههای مختلف قابل استفاده باشند. به عنوان مثال، میتوانیم Rust را با نوشتن یک اپلیکیشن وب یاد بگیریم و سپس همان مهارت را برای برنامهنویسی Raspberry Pi به کار بگیریم.
این دوره به شما کمک میکند که نه فقط دانش خود در ارتباط با Rust بلکه مهارتهای کلی خود در برنامهنویسی را نیز افزایش دهید. پیش از شروع کار، ورود شما را به جامعهی برنامهنویسان Rust خوشامد میگوییم.
زبان Rust به کار چه کسانی میآید؟
زبان برنامهنویسی Rust به ما کمک میکند که نرمافزارهایی بنویسیم که از قابلیت اطمینان بالایی برخوردار بوده و سرعت بسیار خوبی داشته باشند. در طراحی یک زبان برنامهنویسی تعدادی تعارض (conflict) وجود دارد و طراحان زبان در مواجهه با این تعارضات ناچاراً باید دست به مصالحه (trade off) بزنند. تعارض در اینجا به این معناست که تقویت یک ویژگی مثبت در یک زبان موجب تضعیف ویژگی دیگری میشود و مصالحه به این معناست که طراح زبان باید بین این دو ویژگی متعارض تعادل ایجاد کند و تصمیم بگیرد که هر کدام از این ویژگیهای متعارض را در چه سطحی نگهدارد و یا احتمالاً کدام یک از این ویژگیها را ملاک اصلی طراحی قرار دهد و کدام یک را (لااقل تا حدی) فدای دیگری کند.
یکی از تعارضات موجود در طراحی زبانهای برنامهنویسی، بین راحتی استفاده و ارگونومی سطح بالا از یک سو و کنترل سطح پایین از سوی دیگر رخ میدهد. هر چقدر سطح انتزاع زبان را بالاتر ببریم، به زبان انسانی نزدیکتر شده و برنامهنویسی با آن راحتتر و سریع تر است. اما در عوض، چنین زبانی برای نوشتن برنامههایی که باید از کارایی (performance) و سرعت اجرای مناسبی برخوردار باشند، گزینهی ایدهآلی نخواهد بود.
اما زبان Rust این تعارض را که سالهاست توسط برنامهنویسان و طراحان زبان پذیرفته شده، به چالش میکشد. به عبارت دیگر، سازندگان Rust بر این باورند که میتوان زبانی ساخت که به برنامهنویس امکان بدهد که جزئیات سطح پایینی مانند مدیریت حافظه را کنترل کند بدون اینکه با دشواریها و مشکلات سنتی مربوط به این گونه کنترلها مواجه شود.
گروههای متعددی از مردم میتوانند به دلایل مختلف زبان Rust را انتخاب کنند و از آن استفاده کنند. در اینجا به تعدادی از مهمترین این گروهها اشاره میکنیم.
تیمهای توسعه
زبان برنامهنویسی Rust یک ابزار مفید و سازنده برای همکاری در تیمهای توسعهی بزرگی است که سطح دانش اعضای آنها متفاوت است. اساساً کد سطح پایین مستعد ابتلا به خطاها و باگهای مختلف است و در سایر زبانهای برنامهنویسی تنها از طریق انجام تستهای گسترده و بررسی دقیق کدها توسط افراد باتجربه میتوان از بروز این خطاها جلوگیری کرد. اما کامپایلر Rust مانند یک دروازهبان از عبور کدهای مستعد خطا از جمله باگهای مربوط به مسئلهی همزمانی (concurrency) جلوگیری میکند. با اتکا به چنین کامپایلر هوشمندی برنامهنویسان تیم میتوانند اکثر زمان خود را به جای ردیابی باگها به منطق برنامه اختصاص دهند.
علاوه بر این، Rust ابزارهای توسعهی پیشرفتهای را برای دنیای برنامهنویسی سیستم به ارمغان آورده است. برای نمونه میتوانیم به سه ابزار کلیدی زیر اشاره کنیم:
- Cargo: ابزاری که هم برای مدیریت وابستگیها و هم برای ساخت برنامهها کاربرد دارد. به بیان فنی، کارگو هم یک dependency manager و هم یک build tool است.
- Rustfmt: به لطف این ابزار که بخشی از پکیج نصب Rust است و به همراه کامپایلر این زبان روی سیستم نصب میشود، یکسان بودن سبک یا استایل کدنویسی در بین برنامهنویسان Rust تضمین میشود. این ابزار به طور خودکار قوانین و قراردادهای استایل کدنویسی از قبیل میزان تورفتگی خطوط را تنظیم میکند.
- Rust Language Server: این ابزار یکپارچگی IDE را برای تکمیل کدها و برخی کارهای دیگر افزایش میدهد.
این ابزارها به برنامهنویسان Rust امکان میدهند که از سختیهای مربوط به کدنویسی سطح پایین فاصله بگیرند و به عبارتی دیگر، با هزینهی زبانهای سطح بالا کد سطح پایین بنویسند.
دانشجویان و دانشآموزان
زبان برنامهنویسی Rust برای دانشجویان و افرادی که به یادگیری مفاهیم مربوط به سیستمها علاقمند هستند، بسیار مفید است. افراد زیادی با استفاده از این زبان با مواردی مثل توسعهی سیستمعاملها آشنا شده و میشوند. جامعهی توسعهدهندگان Rust مشتاقانه به سوالات دانشجویان پاسخ میدهد و به دنبال این است که هر چقدر ممکن است افراد بیشتری را با مفاهیم مربوط به سیستمها آشنا کند.
شرکتها
صدها شرکت بزرگ و کوچک از Rust برای انجام کارهای مختلفی از قبیل ساخت ابزارهای خط فرمان، وبسرویسها، ابزارهای DevOps، دستگاههای embedded، آنالیز ویدیو و صدا، رمزارزها، بیوانفورماتیک، موتورهای جستجو، اپلیکیشنهای اینترنت اشیاء (IoT)، اپلیکیشنهای مبتنی بر یادگیری ماشین (machine learning) و حتی ساخت بخشهای اصلی مرورگر Firefox استفاده میکنند.
توسعهدهندگان متنباز
افرادی که مایلند میتوانند در توسعهی زبان Rust و نیز ابزارهای توسعه و کتابخانههای این زبان با توسعهدهندگان Rust همکاری داشته باشند.
کسانی که برای سرعت و پایداری ارزش قائلند
زبان Rust برای افرادی که از یک زبان برنامهنویسی توقع سرعت و پایداری دارند، گزینهای ایدهآل است. وقتی از سرعت صحبت میکنیم، منظورمان سرعت تولید یا نوشتن برنامه و نیز سرعت اجرای برنامه است. کامپایلر Rust با بررسیهای استاتیکی که در زمان کامپایل روی کدها انجام میدهد، پایداری (stability) را تضمین میکند. این امر کاملاً در تضاد با رویکرد قدیمی در زبانهایی است که فاقد چنین بررسیهای استاتیکی هستند. سازندگان زبان Rust با تلاش برای به صفر رساندن هزینههای بالا بردن سطح انتزاع و ارائهی ویژگیهای سطح بالایی که با سرعت بسیار بالا به کدهای سطح پایین تبدیل میشوند (به طوری که گویی این کدهای سطح پایین به صورت دستی نوشته شدهاند و تبدیلی در کار نیست) زبانی را توسعه دادهاند که هم امن است و هم سریع.
دوره آموزش Rust برای چه کسانی مناسب است؟
در این دوره، فرض ما بر این است که شما تجربهی کدنویسی با یک زبان برنامهنویسی دیگر (مهم نیست چه زبانی) را دارید. ما سعی کردهایم مطالب را طوری ارائه دهیم که برای طیف وسیعی از افراد با پسزمینههای مختلف از برنامهنویسی قابل استفاده و مناسب باشد. البته ما زمان زیادی را صرف صحبت در مورد برنامهنویسی و شیوهی تفکر برنامهنویسی نمیکنیم. بنابراین، اگر کاملاً تازهکار هستید و هیچ تجربهای در برنامهنویسی ندارید، شاید بهتر باشد که ابتدا کتابی را که به طور خاص در ارتباط با مقدمات برنامهنویسی است، مطالعه کنید.
هر فصل از این کتاب یا یک فصل مفهومی است و یا یک فصل پروژهمحور. در هر فصل مفهومی شما را با یکی از جنبههای زبان Rust آشنا میکنیم و در هر فصل پروژهمحور برنامهای را با استفاده از مطالب آموزش داده شده خواهیم ساخت. فصلهای 2 و 12 و 20 فصول پروژهمحور و مابقی فصول مفهومی هستند.