انتشار زبان برنامه نویسی Rust 1.65

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

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

ایمنی حافظه در Rust در زمان کامپایل از طریق بررسی مرجع، پیگیری مالکیت شیء، پیگیری طول عمر شی (scopes) و ارزیابی صحت دسترسی به حافظه در طول اجرای کد ارائه می شود. Rust همچنین محافظت در برابر سرریز اعداد صحیح را فراهم می کند، به متغیرها نیاز دارد که قبل از استفاده مقداردهی اولیه شوند، خطاها را در کتابخانه استاندارد بهتر مدیریت می کند، مفهوم مراجع و متغیرهای غیرقابل تغییر را به طور پیش فرض اعمال می کند، و تایپ ثابت قوی برای به حداقل رساندن خطاهای منطقی ارائه می دهد.

نوآوری های اصلی:

  • پشتیبانی از انواع مرتبط عمومی (GAT، Generic Associated Types)، که امکان ایجاد نام مستعار نوع مرتبط با نوع دیگری را فراهم می کند و به شما امکان می دهد سازنده های نوع را با صفات مرتبط کنید. صفت Foo { نوع Bar<'x>; }
  • عبارت "let... else" پیاده سازی شده است، به شما امکان می دهد شرایط تطابق الگو را مستقیماً در عبارت "let" بررسی کنید و در صورت عدم تطابق الگو، کد دلخواه را اجرا کنید. اجازه دهید Ok(count) = u64::from_str(count_str) else { panic!("نمی توان عدد صحیح را تجزیه کرد: '{count_str}'"); };
  • با استفاده از نام بلوک (برچسب) برای شناسایی بلوکی که باید خاتمه داده شود، استفاده از دستور break برای خروج زودهنگام از بلوک‌های نام‌گذاری شده مجاز است. let result = 'block: {do_thing(); if condition_not_met() { break 'block 1; } do_next_thing(); if condition_not_met() { break 'block 2; } do_last_thing(); 3 };
  • برای لینوکس، قابلیت ذخیره جداگانه اطلاعات اشکال زدایی (split-debuginfo)، که قبلا فقط برای پلتفرم macOS در دسترس بود، اضافه شده است. هنگام تعیین گزینه "-Csplit-debuginfo=unpacked"، داده های اشکال زدایی با فرمت DWARF در چندین فایل شی جداگانه با پسوند ".dwo" ذخیره می شوند. مشخص کردن "-Csplit-debuginfo=packed" یک بسته واحد در قالب ".dwp" ایجاد می کند که شامل تمام داده های اطلاعات اشکال زدایی برای پروژه است. برای ادغام debuginfo به طور مستقیم در بخش .debug_* اشیاء ELF، می توانید از گزینه "-Csplit-debuginfo=off" استفاده کنید.
  • بخش جدیدی از API به دسته پایدار منتقل شده است، از جمله روش ها و اجرای صفات تثبیت شده اند:
    • std::backtrace::backtrace
    • مقید::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • ویژگی "const" که امکان استفاده از آن را در هر زمینه ای به جای ثابت ها تعیین می کند، در توابع <*const T&>::offset_from و <*mut T>::offset_from استفاده می شود.
  • به عنوان بخشی از مرحله نهایی انتقال اجرای پروتکل LSP (پروتکل سرور زبان) به تحلیلگر زنگ، اجرای قدیمی Rust Language Server (RLS) با یک سرور خرد جایگزین شد که هشداری با پیشنهاد تغییر به آن صادر می کند. با استفاده از آنالایزر زنگ زدگی
  • در طول کامپایل، پشتیبانی از استقرار درون خطی کد میانی MIR فعال می شود، که سرعت کامپایل بسته های جعبه معمولی را 3-10٪ افزایش می دهد.
  • برای سرعت بخشیدن به ساخت‌های برنامه‌ریزی‌شده، مدیر بسته Cargo مرتب‌سازی کارهایی را که در انتظار اجرا هستند در صف ارائه می‌کند.

علاوه بر این، می توانید به مصاحبه در مورد استفاده از زبان Rust در ولوو برای توسعه اجزای سیستم های اطلاعات خودرو توجه کنید. برنامه ای برای بازنویسی کدهای موجود و آزمایش شده در Rust وجود ندارد، اما برای کدهای جدید، Rust یکی از گزینه های ترجیحی برای بهبود کیفیت با هزینه کمتر است. گروه‌های کاری مرتبط با استفاده از زبان Rust نیز در انجمن‌های خودروسازی AUTOSAR (AuTomotive Open System ARchitecture) و SAE (جامعه مهندسین خودرو) ایجاد شده‌اند.

علاوه بر این، دیوید کلایدرماچر، معاون مهندسی گوگل، در مورد ترجمه کد مورد استفاده در پلتفرم اندروید برای مدیریت کلیدهای رمزگذاری به Rust و همچنین استفاده از Rust در اجرای پروتکل DNS روی HTTPS در پشته صحبت کرد. برای تراشه های UWB (باند فوق العاده) و در چارچوب مجازی سازی (فریم ورک مجازی سازی اندروید) مرتبط با تراشه Tensor G2. پشته های جدیدی برای بلوتوث و وای فای که در Rust بازنویسی شده اند نیز برای اندروید در حال توسعه هستند. استراتژی کلی تقویت تدریجی امنیت است، ابتدا با تبدیل آسیب پذیرترین و حیاتی ترین اجزای نرم افزار به Rust و سپس گسترش به سایر زیرسیستم های مرتبط. سال گذشته زبان Rust در لیست زبان‌های مجاز برای توسعه پلتفرم اندروید قرار گرفت.

منبع: opennet.ru

اضافه کردن نظر