مصطفی جعفری
مصطفی جعفری
خواندن ۷ دقیقه·۲ سال پیش

چرا راست اینقدر محبوبه؟

سال 2022 هفتمین سال متوالی بود که زبان راست در نظرسنجی سایت stackoverflow به عنوان محبوب‌ترین زبان برنامه‌نویسی انتخاب می‌شد و 86 درصد از توسعه‌دهندگان علاقه‌مندی خود را به ادامه با این زبان نشان می‌دادند.

راست نه تنها ترکیب خاصی از کارایی و امنیت را برای توسعه‌دهندگان فراهم می‌کند بلکه ابزارهایی را نیز در اختیار آنان‎ قرار می‌دهد تا کد را سریع‌تر به محیط محصول انتقال دهند.

راست به‌طور رسمی در سال 2015 منتشر شد و از آن زمان تا به امروز تغییرات و به‌روزرسانی‌های زیادی را از سر گذرانده تا تبدیل به محبوب‌ترین زبان برنامه‌نویسان شود. در این مقاله، بحث می‌کنیم که زبان راست چیست و چه مزیت‌هایی دارد و همچنین در چه نوع پروژه‌هایی بیشتر مورد استفاده قرار می‌گیرید.

راست یک زبان برنامه‌نویسی چند الگویی و از نوع ایستایی است که متمرکز بر ایمنی و کارایی است. راست از ابتدا با ذهنیت مبتنی بر سرعت، ایمنی و بازدهی بالا ساخته شد.

این زبان انتزاع بدون-هزینه، جنریک‌ و یک سری ویژگی‌های کاربردی را ارائه می‌دهد که بیشتر مشکلات دیگر زبان‌های سطح-پایین، مانند خطا‌های حافظه و ساخت برنامه‌های هم‌زمان، را برای توسعه‌دهندگان حل کند.

از زبان راست برای توسعه محصولات و وب‌سایت‌های خیلی معروف و بزرگی مانند Password1, Figma, NPM Coursera, Mozilla, Atlassian, Dropbox استفاده شده است.

اگر علاقه‌مندید که محصولات شگفت‌انگیز دیگری که با این زبان توسعه پیدا کرده‌اند را ببینید، می‌توانید این لینک را، در سایت رسمی راست، بررسی کنید.

توسعه‌دهندگان بیشتر از زبان راست به عنوان یک انتخاب برای برنامه‌نویسی سیستمی یاد می‌کنند زیرا که بیشترین امکان سرعت را با استفاده از منابع بسیار کم ممکن می‌سازد و درعین‌حال ایمنی را در حد یک زبان سروری فراهم می‌کند. این نکته قابل توجه است که راست مشکلات موجود در زبان‌های سی و سی‌پلاس‌پلاس مانند ایمنی (حافظه) و زباله‌روبی را نیز حل می‌کند.

خب بیاییم صحبت کنیم که چرا راست در سال‌های اخیر این‌قدر محبوب شده است.

مزیت‌های راست

انتزاعات بدون-هزینه (zero-cost abstractions)

یکی از بهترین ویژگی‌های راست داشتن انتزاعات بدون-هزینه است. به این معنا که شما برای ویژگی‌هایی که استفاده نمی‌کنید هزینه‌ای نمی‌پردازید، پس چه از انتزاعات برای پیاده‌سازی کدتان استفاده کنید یا به‌طور دستی این کار را انجام دهید، هزینه سرعت، مصرف حافظه و ... یکسان است.

راست با داشتن انتزاعات بدون-هزینه، بررسی‌‌های حافظه در زمان کامپایل و استفاده از زباله‌روب‌ها، دیگر حافظه را در زمان‌اجرا (Runtime) بررسی و جمع‎‌آوری نمی‌کند، بلکه طول ‌عمر کد را در زمان کامپایل (compiletime) ردیابی می‌کند.

برای مهندسین نرم‌افزار، بسیاری از مسائل مربوط به برنامه‌نویسی سیستم‌ها، خطاهای حافظه هستند. هدف آن‌ها طراحی یک پروژه با مدیریت کیفیت کد، خوانایی و کیفیت کارایی در زمان‌اجرا است.

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

پشتیبانی ذاتی از هم‌زمانی (concurrency)

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

راست از ویژگی چند نخی (multi-threading) به‌طور ذاتی و درونی پشتیبانی می‌کند و با استفاده از قواعد «مالکیت (ownership)» و «قرض‌گرفتن (borrowing)» توسعه‌دهندگان را قادر می‌سازد که کد‌های هم‌زمان بهتری بنویسند. این نکته مهم است بدانید که تمامی این‌ها بخاطر این است که راست در زمان کامپایل اجازه به وجود آمدن داده رقابتی (data races) را نمی‌دهد.

ارائه مالکیت (ownership) و امنیت

به‌جرئت می‌توان گفت که «مالکیت» منحصربه‌فرد‌ترین ویژگی زبان راست است. این ویژگی، راست را قادر می‌سازد تا ایمنی حافظه (memory safety) را بدون نیاز به زباله‌روب تضمین کند. وقتی در مورد حافظه در زبان‌های برنامه‌نویسی بخصوص از نوع سطح-پایین صبحت می‌کنیم، دو نوع حافظه مورد توجه است: اِستَک (Stack) و هیپ (Heap).

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

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

در چارچوب بحث امنیت و ایمنی، همیشه از راست به عنوان یکی از برترین زبان‌های متمرکز-بر-ایمنی یاد می‌شود. برخلاف دیگر زبان‌ها، راست مدیریت حافظه را در زمان کامپایل انجام می‌دهد که اغلب از بروز باگ‌ها و خطاهایی که ممکن است بخاطر مدیریت ضعیف حافظه باشد، جلوگیری می‌کند. بنابراین وجود زباله‌روب، در یک برنامه راست، ضرورتی ندارد.

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

داشتن مستندات کامل و جامع

معمولاً راست جز آن دسته از زبان‌های قرار می‌گیرد که فراگیریش کمی دشوار و زمان‌بر است. باوجوداین، توسعه‌دهندگان زیادی از مستندات کامل و جامع راست به عنوان دلیلی برای فراگیری این زبان یاد کردند.

تعدادی از افرادی که در نظرسنجی StackOverflow شرکت کرده بودند، برنامه نویسان متوسطی بودند که تازه وارد دنیای راست شده بودند. آن‌ها بیان می‌کردند که استفاده از مستندات، راهی بوده که باعث بهبود و افزایش دانش آن‌ها در مورد این زبان شده است.

جامعه در حال رشد

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

در چه پروژه‌هایی از راست استفاده کنیم؟

راست برای موارد زیر مناسب است:

ساخت سیستم‌های تعبیه‌شده: راست زبانی فوق‌العاده برای ساخت سیستم‌های تعبیه‌شده است بخاطر اینکه ترکیبی از ایمنی، کارایی، کنترل سطح-پایین و پشتیبانی چند سکویی را فراهم می‌کند. مهم‌ترین پروژه‌هایی که با زبان راست در این حوزه توسعه‌ پیدا کرده‌اند، بدین ترتب‌اند:

سیستم‌عامل Tock OS: سیستم‌عاملی متن‌باز برای سیستم‌های تعبیه‌شده

ابزارهای Dronecode SDK: مجموعه از ابزارهای و کتابخانه‌ها برای توسعه نرم‌افزارهای پهبادی

سیستم‌عامل ferrOS: سیستم‌عاملی بلادرنگ برای سیستم‌های تعبیه‌شده

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

پلتفرم Polkadot: پلتفرمی بلاک‌چینی که از راست برای هسته توسعه خود استفاده کرده است.

پلتفرم Parity Ethereum: پیاده‌سازی پروتکل اتریوم با زبان راست.

پلفرم Substrate: یک پلتفرم توسعه بلاک‌چین است که کاملا با راست نوشته شده و به توسعه‌دهندگان کمک می‌کند تا پلتفرم بلاک‌چینی سفارشی شده خود را بسازند.

موتور مرورگرهای وب: شرکت Mozilla برای نوشتن Servo، موتور مرورگر برای رندرینگ صفحات وب، از راست استفاده کرده است.

سیستم‌عامل ها: چند سسیستم‌عامل کامپیوتری کاملاً با راست نوشته‌شده است ازجمله ردوکس، که یک سیستم‌عامل میکروکرنل شبه یونیکس است و FireCracker، یک ابزار مجازی‌سازی متن-باز است که برای ساخت کانتینرهای با امنیت بالا و ماشین‌های مجازی، برای رایانش‌های بی‌سرور، استفاده می‌شود.

ساخت پروژهای وبی: از راست برای توسعه پروژهای مبتنی بر وب بسیار جالبی استفاده شده و از وب فریم‌ورک های rocket و gotham برای پروژهای در سطح Dropbox و Coursera استفاده شده است.

ساخت ابزارهای خط-فرمان: راست بخاطر سرعت، ایمنی و پشتیبانی چند سکویی یک زبان بسیار خوب برای ساخت برنامه‌های خط-فرمان است.

جمع‌بندی

از قابلیت استفاده تا نیاز روزافزون به ویژگی‌هایی که ارائه می‌کند، می‌توانیم ببینیم که چرا محبوبیت راست در حال افزایش است و به این زودی‌ها از بین نخواهد رفت.

انجمن راست به‌طور باورنکردنی فعال است و همچنان به انتشار به‌روزرسانی‌ها و ابزارهایی برای قوی‌تر شدن زبان راست ادامه می‌دهد. راست به دلیل توانایی و شهرتش در ایجاد سیستم‌های ایمن، در سال‌های آینده محبوبیت خود را حفظ خواهد کرد.

ایمنی، سرعت و کارایی (یعنی توانایی آن در کمک به توسعه‌دهندگان برای نوشتن سرعت‌تر کدهای کارمدتر) دلایلی هستند که در سال‌های آینده راست همچنان موردعلاقه جامعه توسعه‌دهندگان خواهد بود.

مقاله اصلی


rustبرنامه نویسیبلاک‌چینزبان برنامه نویسیراست
علاقه‌مند به مباحث مهندسی نرم‌افزار
شاید از این پست‌ها خوشتان بیاید