"توسعه دهندگان Rust را دوست دارند" این نتیجه ای است که در آخرین نظرسنجی Stack Overflow منتشر شده است.


بنیان گذار موزیلا که با مرورگر وب محبوب فایرفاکس و ایمیل کلاینت Thunderbird شناخته شده است از مدتی پیش تا به الان درحال کار روی زبان برنامه نویسی open source Rust است. بسیاری از توسعه دهندگان زبان Rust را پیش بینی می کردند و منتظر بودند تا پس از معرفی شروع به کار با آن کنند.


مانند هر زبان یا ابزار دیگری باید مشکلاتی که در Rust وجود دارد و برای حل معرفی شده اند و همچنین بهترین راه حل آن ها را نیز بشناسیم.

شباهت زیاد به C++ و GO و شباهت کمتر به Node و Ruby


از آنجایی که Rust یک زبان همه منظوره است شما می توانید وب اپلیکیشن بعدی خود را در Rust بنویسید اما تجربه های خوبی با Rust نخواهید داشت. Rust یک زبان سطح پایین است و بیشتر برای سیستم ها، embedded ها و دیگر کد های حیاتی عملکرد مناسب است. درحالی که قابل تصور است روزی افراد می توانند جدیدترین video game های سه بعدی را با Rust بنویسند . بعید است که یک وب framework داشته باشیم که با Ruby on Rails مقابله کند.


امن تر از C/C++


بارزترین – و برخی می گویند حیاتی ترین – تفاوت بین Rust و C++ تاکید آن روی نوشتن کد امن است.


با "کد امن"اشیاء از ابتدا تا انتها با زبان برنامه نویسی مدیریت می شوند. توسعه دهندگان هیچ محاسبات اشاره گر یا مدیریت حافظه که انجام آن ها در برنامه های C یا C++ الزامی است، انجام نمی دهند.


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


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


با این حال کد های خطرناک و ناامن در مواقع دستیابی به عملکرد مفید هستند. Rust به برنامه نویسان این امکان را می دهد که کد های ناامن نیز بنویسند اما به صورت پیش فرض می توان کد های امن نوشت و درحالی که در C و C++ حالت پیش فرض کد های نا امن هستند. در Rust باید با کلمات کلیدی صراحتا حالت ناامن را انتخاب کنید.


پیچیده تر از GO


GO یک زبان مدرن دیگر است که به برنامه نویسان امکان نوشتن کد های سطح پایین که از لحاظ حافظه امن هستند و ویژگی های عملکردی زبان های سطح پایین را دارد می دهد. هدف دیگر زبان برنامه نویسیGO شامل پشتیبانی قدرتمند از همزمانی با ساختار کانال های GO و همچنین سادگی آن می باشد اما GO در کدهای آسنکرون تقریبا شبیه Node.js است و شما نمی توانید در کد GO همزمانی را در آن نادیده بگیرید.


Rust در برنامه نویسی همزمان نیز عالی است و این یک هدف موقت این زبان نیست. درحالی که Rust روی پیچیده بودن تلاش نمی کند مانند GO نیز روی سادگی تمرکز نمیکند. برای مثال GO معمولا ویژگی هایی که توسط دیگر زبان ها ضروری درنظر گرفته می شوند مانند نوع های generic را رها می کند تا با هدف سادگی این زبان منطبق شود از طرفی دیگر Rust تقریبا زبان پیچیده ای است و بیشتر شبیه C++ میباشد.


هدف زبان Rust برنامه نویسی سریع، کارا و امن از لحاظ حافظه است و سادگی هیچگاه یکی از اصول طراحی این زبان نبوده است. هیچ کدام از این دیدگاه ها به لحاظ اصولی، نسبت به دیگری بهتر نیستند اما تقریبا دیدگاه های متفاوتی برای ساخت زبان هستند بنابراین من تصور می کنم که اکثر برنامه نویسان قویا این دسته یا دسته ی دیگر را ترجیح می دهند.


وابستگی مدرن و ساخت مدیریت با بارگذاری


یک ویژگی کلیدی اکثر زبان های برنامه نویسی مدرن پکیج ابزار های مدیریتی قوی است Ruby ، gems و bundler ، پایتون pip و PyPi و Node موارد محبوب زیادی دارد. – اگرچه اخیرا NPM از بین رفته و Perl ، CPAN اعتبار دارد- زبان های C و C++ هیچگاه هیچ استاندارد واقعی – یا مسلما حتی استاندارد بالفعل – از پکیج ابزار های مدیریتی ندارد.


یک زبان با سیستم پکیج همراه مزایایی دارد که دیگر زبان ها ندارند. برای مبتدیان اکثر این زبان ها حجم زیادی از کتابخانه های open source و framework هایی که باید آن ها را بیاموزند، دارد. اگر شما یک توسعه دهنده ی Ruby/Rails هستید محیط آن بسیار کامل است و یک gem مناسب برای هرکاری که میخواهید انجام دهید دارد.


کتابخانه ها و framework ها نه تنها به توسعه دهندگان امکان ساخت سریع تر با استفاده ی مجدد از کار دیگران را می دهند بلکه اغلب منجر به تست بهتر و کد های مقاوم تر نیز می شوند یک کتابخانه ی JSON که توسط بیش از 10000 کاربر دانلود شده است و 3000 موضوع را پوشش داده و بیش از 100 قسمت تست دارد به طور، معمول بسیار قویتر از کتابخانه داخلی JSON است.


مزیت دیگر پکیج های مدیریتی این است که توزیع کد خود بین کاربران نهایی را بسیار آسان تر می کند. در بسیاری از موارد تایپ کردن “gem install sometool” یا “pip install sometool” از دانلود کردن تعدادی کد C ، نصب همه ی وابستگی های آن ها بطور درست، کامپایل کردن آن ها و لینک کردن آن ها به مکانی درست در سیستم خودتان، آسان تر است. این روش می تواند نرم افزار شما را مستقیما به کاربران نهایی بیشتری ترجمه کند و باعث شود زمان نصب به مشکلات کمتری برخورد کنید.


آینده و پروژه های فعلی


درحالی که Rustهنوز درحال تکامل است اما یک جامعه ی قوی وجود دارد که از آن پشتیبانی می کند