یودمیایران بزرگترین مرجع ویدئوهای های یودمی با دوبله فارسی
زبان Rust چیست و آیا کارآمدی لازم را دارد؟
زبان Rust چیست؟ مزایای زبان برنامه نویسی Rust و معایب زبان برنامه نویسی Rust و آینده آن را با هم در این مقاله بررسی می کنیم.
زبان Rust چیست؟
سریع ، ایمن ، نوشتن آسان .فقط دو مورد را می توانید انتخاب کنید. مدتهاست که این وضعیت توسعه نرم افزار است. زبانهایی که بر راحتی و ایمنی تأکید دارند ، کند هستند (مانند پایتون ). زبانهایی که بر عملکرد تأکید دارند کار با آنها دشوار است و به راحتی می توانند شما را خسته کنند. (مانند C و C ++).
آیا می توان هر سه ویژگی را به یک زبان واحد انتقال داد؟ مهمتراز آن ، آیا می توانید دنیا را وادار کنید تا با آن کار کند؟ زبان Rust ، که در اصل توسط Graydon Hoare ایجاد شده و در حال حاضر توسط Mozilla Research حمایت مالی می شود ، تلاشی برای انجام همین موارد است. ( زبان گوگل Go نیز جاه طلبی های مشابهی دارد ، اما Rust قصد دارد تا حد امکان امتیازات عملکردی را کسب کند.)
راست بدین منظور طراحی شده است که سریع ، ایمن و به راحتی قابل نوشتن باشد. همچنین این مورد در نظر گرفته شده است که به طور گسترده مورد استفاده قرار گیرد و در نهایت به عنوان یک زبان که فقط برای کنجکاوی و بازیگوشی مناسب است شناخته نشود . دلایل خوبی برای نولید زبانی وجود دارد که در آن امنیت هم پا با سرعت و قدرت توسعه جلو می رود. به هر حال ، تعداد بسیار زیادی نرم افزار وجود دارد . (بعضی از آنها زیرساخت های بسیار مهمی را هدایت می کنند) .که با زبانهایی ساخته شده است که امنیت اولیت آن نبوده.
مزایای زبان برنامه نویسی Rust
زبان Rust به عنوان یک پروژه تحقیقاتی موزیلا شروع شد. بیشتر به منظور اجرای component های اصلی مرورگر Firefox . چند دلیل اساسی باعث این تصمیم شد: Firefox لیاقت استفاده بهتر از پردازنده های مدرن و چند هسته ای را داشت. و گستردگی استفاده از مرورگرهای وب به این معنی است که استفاده از آنها باید ایمن باشد.
اما این مزایا توسط همه نرم افزارها و نه فقط مرورگرها مورد نیاز است ، به همین دلیل Rust از یک پروژه مرورگرمحور به یک پروژه زبان برنامه نویسی تبدیل شد. Rust از طریق مشخصات زیر ایمنی ، سرعت و سهولت استفاده خود را به دست می آورد. در اینجا به برخی از مزایای زبان Rust اشاره می کنیم:
راست سریع است
کد Rust در چندین سیستم عامل به کد بومی ماشین کمپایل می شود. باینریها در خود موجود هستند . زمان اجرایی ندارد و کد نهایی از لحاظ عملکرد به راجتی با کدی که به زبان C یا ++C نوشته شده برابری می کند.
راست از لحاظ حافظه امن است
زبان Rust برنامه هایی را که سعی در استفاده از حافظه ناامن دارند ، کامپایل نمی کند. بیشتر خطاهای حافظه هنگام اجرای برنامه کشف می شوند. زبان و syntax های Rust تضمین می کنند که مشکلات رایج مربوط به حافظه در زبان های دیگر مانند null یا dangling pointers و data racesو دیگر مشکلات از این قبیل هرگز در برنامه نهایی دیده نشوند. کامپایلر این مشکلات را علامت گذاری کرده و آنها را مجبور می کند قبل از اجرای برنامه برطرف شوند.
راست کم مصرف است
زبان Rust کنترل حافظه را از طریق قوانین سخت کنترل می کند. سیستم مدیریت حافظه Rust در نحوهsyntax زبان از طریق استعاره ای به نام ownership تعریف می شود . هر مقدار داده شده در زبان Rust فقط توسط یک متغیر می تواند “owned” شود، یا نگهداری و دستکاری شود.
نحوه انتقال ownership بین ابجکت ها (شی ها )به طور دقیق توسط کامپایلر مدیریت می شود . بنابراین در زمان اجرا هیچ غافلگیری به شکل خطاهای تخصیص حافظه وجود ندارد. رویکرد ownership همچنین به معنای عدم مدیریت حافظه برای جمع آوری زباله است .چیزی بر خلاف زبانهایی مانند Go یا #C. (این امر باعث افزایش عملکرد برای Rust می شود.) هر بیت حافظه در برنامه Rust از طریقownership ردیابی و آزاد می شود.
راست انعطاف پذیر است
راست به شما اجازه می دهد در صورت لزوم ، خطرناک زندگی کنید. موارد ایمنی Rust در صورت نیاز به دستکاری مستقیم حافظه ، مانند ارجاع مجدد به اشاره گر خام à la C++/C، می تواند تا حدودی به حالت تعلیق درآید. کلمه کلیدی در اینجا تا حدودی است ، زیرا عملیات ایمنی حافظه Rust هرگز نمی تواند کاملاً غیرفعال شود. حتی در این صورت ، تقریباً هرگز مجبور نیستید نگران برنامه خود باشید.نتیجه نهایی نرم افزاری است که به طور پیش فرض ایمن تر است.
استفاده از Rust راحت است
هیچ یک از ویژگی های ایمنی و یکپارچگی زبان Rust در صورت عدم استفاده ، برای شما گیج کننده نمی شود. به همین دلیل توسعه دهندگان و جامعه Rust تلاش کرده اند تا این زبان را برای تازه واردان هرچه بیشتر مفید و خوش آیند کنند.
هر آنچه برای تولید باینری Rust لازم است در همان بسته قرار دارد. کامپایلرهای خارجی ، مانند GCC ، فقط در صورت استفاده از اجزای خارج از اکوسیستم Rust (مانند کتابخانه C که از منبع تهیه می کنید) مورد نیاز هستند. کاربران ویندوز مایکروسافت شهروندان درجه دو نیز نیستند. زنجیره ابزار Rust همانقدر که در لینوکس و MacOS موجود است برای ویندوز نیز وجود دارد.
راست کراس پلت فرم است
زبان Rust در هر سه سیستم عامل اصلی: لینوکس ، ویندوز و MacOS کار می کند. دیگر زبان ها فراتر از این سه مورد پشتیبانی می شوند. اگر می خواهید کدتان در جاهای دیگر نیز کمپایل شود . و یا باینری هایی برای معماری های مختلف دیگر و یا پلت فرم های دیگر غیر از این سه مورد اشاره شده تولید کنید، کار کمی پیچیده تر می شود . اما یکی از ماموریت های عمومی Rust به حداقل رساندن این پیچیدگی ها و کارهای دشوار است .همچنین اگرچه زبان Rust در اکثر سیستم عامل های فعلی کار می کند ، هدف سازندگان آن این نیست که Rust را کاملاً در همه جا پیاده سازی کنند . فقط در هر سیستم عاملی که محبوب باشد . و هر کجا که برای انجام این کار نیازی به قربانی کردن برخی از مولفه های اصلی این زبان نباشد این مهم را انجام می دهند .
راست دارای ویژگی های زبانی قدرتمندی است
تعداد کمی از توسعه دهندگان می خواهند که کار خود را با یک زبان جدید شروع کنند .مخصوصا اگر ویژگی های آن کمتر یا ضعیف تر از ویژگی های مورد استفاده آنها باشد. ویژگی های بومی زبان Rust با مواردی که زبانهایی مانند++C دارند کاملا برابری می کند: ماکروها ، generics ، تطبیق الگو و composition (از طریق ” traits“) همه شهروندان درجه یک در Rust هستند.
راست یک کتابخانه استاندارد مفید دارد
یک بخش از مأموریت بزرگتر زبان Rust تشویق توسعه دهندگان C و ++C به استفاده از Rust به جای آن زبانها در هر زمان ممکن است. اما کاربران C و++C انتظار دارند که یک کتابخانه استاندارد مناسب داشته باشند . آنها می خواهند بتوانند از کانتینرها ، مجموعه ها و تکرارکننده ها استفاده کنند . دستکاری های رشته ای را انجام دهند ، فرآیندها و رشته ها را مدیریت کنند ، I / O شبکه و پرونده و غیره را انجام دهند. Rust همه این کارها و موارد دیگر را در کتابخانه استاندارد خود انجام می دهد . از آنجا که Rust به صورت کراس پلتفرم طراحی شده است ، کتابخانه استاندارد آن می تواند تنها شامل مواردی باشد که به طور قابل اتکا از طریق سیستم عامل ها پورت می شوند. توابع ویژه بسترهای نرم افزاری مانند epoll لینوکس باید از طریق توابع موجود در کتابخانه های شخص ثالث مانند libc ، mio یا tokio پشتیبانی شوند.
استفاده از Rust بدون کتابخانه استاندارد آن نیز امکان پذیر است . یک دلیل معمول برای این کار ساخت باینری است که هیچ وابستگی به سیستم عامل ندارد . به عنوان مثال ، یک embedded system یا هسته سیستم عامل.
راست تعداد زیادی کتابخانه های شخص ثالث یا “جعبه” دارد
یکی از معیارهای کاربردی زبان برنامه نویسی این است که به لطف اشخاص ثالث می توان با آن کارهای زیادی انجام داد. Cargo ، مخزن رسمی کتابخانه های Rust (که “جعبه” نامیده می شود) حدود ده هزار جعبه را شامل می شود. تعداد قابل توجهی از آنها اتصال API به کتابخانه ها یا Framework های رایج هستند . بنابراین می توان از Rust به عنوان یک گزینه مناسب برای استقاده با اینframwrok ها استفاده کرد. با این حال ، انجمن Rust هنوز بر اساس کیفیت و کاربرد کلی جعبه ها ، دسته بندی یا رتبه بندی ارائه نمی دهد . بنابراین بدون تلاش خودتان برای انجام کارها یا نظرسنجی از انجمن ها ، نمی توانید بگویید چه چیزی از بقیه بهتر کار می کند.
راست از پشتیبانی IDE خوبی برخوردار است
باز هم ، تعداد کمی از توسعه دهندگان می خواهند زبانی را با پشتیبانی کم یا بدون پشتیبانی از IDE مورد نظر خود بپذیرند. به همین دلیل Rust اخیراً سرور زبان Rust را معرفی کرده است که بازخورد زنده کامپایلر Rust را به IDE هایی مانند Microsoft Visual Studio Code ارائه می دهد .
معایب زبان برنامه نویسی Rust
زبان Rust در کنار تمام قابلیت های جذاب ، قدرتمند و مفید خود ، نقاط ضعفی نیز دارد. با هم نگاهی به معایب زبان Rust می کنیم:
راست جدید است
راست هنوز یک زبان جوان است ، زیرا نسخه 1.0 خود را فقط در سال 2015 ارائه کرده است. بنابراین ، در حالی که بسیاری از syntax و عملکردهای زبان اصلی چکش خورده است ، بسیاری از چیزهای دیگر در مورد آن هنوز هم خام هستند.
به عنوان مثال عملیات ناهمزمان هنوز در syntax زبان به خوبی کارگذاری نشده. کار برای اجرای عملیات async از طریق دستورات asyncو await در حال اجرایی شدن است.
یادگیری Rust سخت است
اگر فقط یک چیز باشد که زبان Rust را دچار مشکل می کند آن پیچیدگی آن است . Ownership ، borrowing و دیگر دستورات مدیریت حافظه Rust اولین بار همه را تحت فشار قرار می دهد. بسیاری از برنامه نویسان تازه کار Rust یک آئین مشترک دارند ، “مبارزه با borrow checker” ، جایی که آنها از نزدیک متوجه می شوند که کامپایلر در مورد جدا نگه داشتن چیزهای قابل تغییر و تغییر ناپذیر چه قدر وسواسی است. این از بزرگترین معایب زبان Rust است.
راست پیچیده است
یکی از دشواری های چگونگی استفاده از استعاره های زبان Rust برای ایجاد کدهای طویل، در مقایسه با سایر زبان ها است. به عنوان مثال ، ادغام رشته ها در Rust همیشه به سادگی string1+string2 نیست. یک شی ممکن است قابل تغییر باشد و دیگری غیرقابل تغییر . Rust تمایل دارد اصرار کند که برنامه نویس به جای اینکه اجازه دهد کامپایلر حدس بزند چه کار کند ، خود مدیریت چنین مواردی را بر عهده گیرد.
مثال دیگر: نحوه کار Rust و C++ / C با هم. بیشتر اوقات ، Rust برای اتصال به کتابخانه های موجود که برای زبان C یا++C نوشته شده اند ، استفاده می شود. تعداد کمی از پروژه ها در C و ++C از ابتدا برای Rust بازنویسی می شوند. (و در صورت وجود ، تمایل دارند که به صورت تدریجی دوباره بازنویسی شوند).
مسیر پیش روی Rust
تیم Rust از بسیاری از این موضوعات آگاه است و برای بهبود آنها تلاش می کند. به عنوان مثال ، برای ساده سازی کار Rust با C و++C ، تیم Rust در حال بررسی این است که آیا پروژه هایی مانند bindgen را که به طور خودکار اتصال Rust به کد C را ممکن می کند ، گسترش دهد یا خیر. این تیم همچنین برنامه هایی برای فهم راحت تر borrowing و lifetimes دارد
مطلبی دیگر از این انتشارات
آموزش پایتون - قسمت اول - پایتون همراه با لبخند
مطلبی دیگر از این انتشارات
بهترین IDE ها و کد ادیتورهای پایتون در سال ۲۰۱۹
مطلبی دیگر از این انتشارات
فواید یادگیری الگوریتم و ساختمان داده (درک علوم کامپیوتر)