رکورد تصمیم معماری: زبان برنامهنویسی Rust
شمارهٔ تصمیم: AR-001
عنوان تصمیم: اتخاذ زبان برنامهنویسی Rust
تاریخ: 1 دسامبر 2021
وضعیت: پذیرفتهشده
بیان مسئله
با ادامهٔ توسعهٔ برنامههای نرمافزاری، مشاهده کردهایم که کاهش آسیبپذیریهای امنیتی بالقوه و جلوگیری از خطاهای زمان اجرا روزبهروز چالشبرانگیزتر میشود. با زبانهای برنامهنویسی موجود، مانند C و C++، همچنان با مسائلی مانند سرریز بافر، نشت حافظه و رفتار تعریفنشده روبهرو هستیم که به از کار افتادن برنامهها میانجامد. به زبان برنامهنویسیای نیاز داریم که تضمینهای ایمنی حافظه ارائه دهد و برای پشتیبانی از برنامههای حساس به کارایی بهاندازهٔ کافی کارآمد باشد.
ملاحظات
چندین زبان برنامهنویسی برای پرداختن به مشکلات موجود طراحی شدهاند. در میان آنها، زبان برنامهنویسی Rust به دلیل ویژگیهای طراحی منحصربهفردش توجه چشمگیری از جامعهٔ توسعهدهندگان جلب کرده است. ملاحظات شامل موارد زیر است؛
ایمنی حافظه و امنیت
کارایی و بهرهوری
پشتیبانی جامعه و پذیرش
منحنی یادگیری
ابزارها و اکوسیستم
سازگاری با سیستمهای نرمافزاری موجود.
قیود
اتخاذ یک زبان برنامهنویسی جدید مستلزم آموزش مجدد توسعهدهندگان است که زمان و منابع میبرد. ادغام زبان در گردش کار توسعهٔ موجود ممکن است چالش باشد. باید سازگاری با سیستمهای موجود را تضمین کنیم و از تغییرات شکننده برای حفظ پیوستگی پرهیز کنیم.
پیادهسازی
تیم توسعهٔ ما آموزش خواهد دید تا زبان برنامهنویسی Rust را بیاموزد و با آن آشنا شود.
یک پروژهٔ جدید را بهصورت آزمایشی با Rust ایجاد خواهیم کرد تا سازگاری و تناسب آن را برای اهداف توسعهٔ خود ارزیابی کنیم.
بهتدریج سیستمهای موجود نوشتهشده با C و C++ را به Rust مهاجرت خواهیم داد.
با جامعهٔ Rust همکاری خواهیم کرد تا ابزارها و کتابخانههای موجودی را که میتوانند گردش کار توسعهٔ ما را بهبود دهند کاوش کنیم.
کارایی Rust را پایش خواهیم کرد و آن را بهطور منظم با کارایی زبانهای برنامهنویسی موجود مقایسه خواهیم کرد.
رویکردی بلندمدت اتخاذ خواهیم کرد که میان هزینههای آموزش، یکپارچهسازی و مزایای بالقوهٔ استفاده از Rust توازن برقرار کند.
دلیل و منطق
Rust را به دلیل ویژگیهای منحصربهفردش که برای ارائهٔ تضمینهای ایمنی حافظه و امنیت ضمن حفظ کارایی و بهرهوری طراحی شدهاند اتخاذ کردهایم. سیستم نوع قدرتمند Rust، borrow checker و مفاهیم ایمنی حافظه آن را برای توسعهٔ برنامههای حساس به کارایی و حساس به ایمنی بسیار مناسب میکند. علاوه بر این، Rust جامعهٔ بزرگی از توسعهدهندگان دارد که به ما امکان دسترسی به طیف وسیعی از ابزارها، کتابخانهها و اکوسیستم را میدهد که از گردش کار توسعهٔ ما پشتیبانی میکنند. هرچند Rust منحنی یادگیری دارد، باور داریم مزایای اتخاذ Rust بر هزینهها میچربد و فرصتی عالی برای رشد و نوآوری مستمر فراهم میکند.
پیامدها
اتخاذ Rust نیازمند سرمایهگذاری قابلتوجه در زمان و منابع برای آموزش توسعهدهندگان و ادغام زبان در گردش کار توسعهٔ موجود خواهد بود.
اتخاذ Rust ممکن است تا حدی مشکلات سازگاری با سیستمهای موجود ایجاد کند و بازآرایی و اصلاحاتی را ایجاب کند.
اتخاذ Rust ممکن است با جذب توسعهدهندگان Rust که میخواهند روی پروژههای هیجانانگیز کار کنند، تعداد توسعهدهندگانی را که میتوانند در پروژهٔ ما مشارکت کنند افزایش دهد.
این اتخاذ میتواند در مقایسه با زبانهای موجود به بهبود کارایی، بهرهوری و ایمنی بینجامد.
در نهایت، اتخاذ Rust مزیت بالقوهٔ کاهش آسیبپذیریهای امنیتی در برنامههای ما را به همراه دارد.