۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

۷ دلیل برای دوست داشتن زبان Rust – و ۷ دلیل برای عدم علاقه

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

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

به نظر می‌رسد که هر روز یک زبان برنامه‌نویسی جدید اختراع می‌شود—مطمئناً زبان‌های بیشتری از آن چیزی است که اکثر توسعه‌دهندگان نرم‌افزار نیاز دارند. یک برنامه نویس یک فلش نابغه پیدا می کند و تصمیم می گیرد چیزی تازه و شگفت انگیز خلق کند. بسیاری از آنها در نهایت به زبان‌هایی خاص تبدیل می‌شوند که بهترین استفاده را برای رفع خارش یا رفع مشکل خاصی دارند. به ندرت پیش می آید که یک زبان برنامه نویسی جدید وارد لیگ های بزرگ شود و به طور گسترده مورد استفاده قرار گیرد.

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

تیم اصلی Rust هر سال نظرسنجی توسعه دهندگان را اجرا می کند. در سال ۲۰۲۱، برای اولین بار، بیش از نیمی از برنامه نویسان Rust از این زبان در محل کار استفاده می کردند. آنها دیگر فقط با Rust در کنار هم بازی نمی کردند. آنها از آن برای تولید کد حرفه ای برای اجرای سایر افراد استفاده می کردند.

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

عشق: زنگ با مقیاس و همزمانی مقابله می کند

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

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

نفرت: مدل همزمانی Rust بسیار پیچیده است

در حالی که سیستم های چند رشته ای در حال افزایش محبوبیت هستند، بسیاری از توسعه دهندگان واقعاً به آنها نیاز ندارند. برنامه نویسان علمی تمایل دارند توابع تک رشته ای بنویسند که جریان های بی پایان داده را می جوند. توسعه دهندگان وب می توانند کد PHP را بنویسند که یک رویکرد ساده و شفاف برای ایجاد وب سایت ارائه می دهد. برنامه نویسان بدون سرور یک تابع می نویسند و کار سخت را به شخص دیگری واگذار می کنند.

توسعه دهندگانی که نیاز به ایجاد برنامه های کاربردی وب پیچیده تری دارند، می توانند به Node.js مراجعه کنند، که استراتژی دیگری برای مقابله با برنامه های چند رشته ای ارائه می دهد. مدل رویداد محور Node با کد مبتنی بر وعده می‌تواند نتایجی ساده و زیبا ایجاد کند.

همه اینها بدان معنی است که مدل برنامه نویسی چند رشته ای Rust پیچیدگی بیشتری نسبت به بسیاری از برنامه نویسان ارائه می دهد. شما می توانید ویژگی های اضافی را نادیده بگیرید و همچنان از زبان لذت ببرید، اما برخی از برنامه نویسان ترجیح می دهند به هیچ وجه با این پیچیدگی مقابله نکنند. آنها فقط به آن نیاز ندارند.

عشق: زنگ یک زبان مدرن است

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

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

نفرت: منحنی یادگیری تند دارد

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

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

توسعه دهندگان Rust که در حال ساخت ابزارهای پیچیده و چند رشته ای هستند، ممکن است پیچیدگی نحوی Rust را به عنوان یک معاوضه ارزشمند ببینند. طرفداران واقعی که جریان عملکردی را تقویت می کنند ممکن است حتی از آن لذت ببرند. دیگران فقط ناامید خواهند شد. یادگیری تمام قوانین معنایی Rust برای کاربر معمولی نیست.

عشق: می توانید به کامپایلر Rust بگویید چه کاری انجام دهد

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

نفرت: چه کسی می خواهد به کامپایلر بگوید چه کاری انجام دهد؟

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

عشق: Rust سازگاری خوبی با عقب دارد

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

نفرت: Rust کاملاً شی گرا نیست

Rust به اصول برنامه نویسی شی گرا پایبند نیست، که برای برخی از برنامه نویسان مشکل است. می‌توانید برخی از جنبه‌های برنامه‌نویسی شی‌گرا را در Rust تقلید کنید – طرفداران واقعی بهترین راه‌ها برای تقلید OOP با ساختارهای Rust را می‌دانند – اما هرکسی که بخواهد سلسله‌مراتب نوع پیچیده‌ای بسازد از Rust ناامید می‌شود.

عشق: مدل پردازش ناهمزمان Rust ایمن تر است

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

نفرت: کدنویسی ناهمزمان سخت است

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

عشق: برنامه نویسی بدون انتزاع

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

نفرت: دسترسی در سطح بایت خطرناک است

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

عشق: راهی بهتر برای جمع آوری زباله

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

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

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

نفرت: مدیریت حافظه دردناک است

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

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

نتیجه گیری: زنگ هنوز جدید و در حال تکامل است

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

Rust ممکن است بهترین زبان برای شما یا پروژه شما باشد یا نباشد. به طور کلی ممکن است بهترین راه حل برای ایجاد نرم افزار باشد یا نباشد. اما این یک گزینه هیجان انگیز با فرصت های فراوان برای اکتشاف است. به عنوان یک زبان، Rust بدیع است و یادگیری آن باعث کشش مغز می شود. به عنوان برنامه نویس، به ما دلیلی می دهد تا در چالش های خود تجدید نظر کنیم، اهداف خود را مجدداً چارچوب بندی کنیم و بهترین راه برای نوشتن نرم افزار مدرن را پیدا کنیم. چه چیزی می تواند بهتر از این باشد؟