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

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

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

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

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

  • در شمارش هایی با نمایش اعداد صحیح (ویژگی "#[repr(Int)]")، نشان صریح ممیز (عدد متغیر در شمارش) مجاز است، حتی اگر شمارش شامل فیلدها باشد. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • هسته تابع اضافه شد::hint::black_box که به سادگی مقدار دریافتی را برمی گرداند. از آنجایی که کامپایلر فکر می کند که این تابع در حال انجام کاری است، می توان از تابع black_box برای غیرفعال کردن بهینه سازی کامپایلر برای حلقه ها هنگام انجام تست عملکرد کد یا هنگام بررسی کد ماشین تولید شده استفاده کرد (به طوری که کامپایلر کد را بدون استفاده در نظر نگیرد و آن را حذف کند). به عنوان مثال، در مثال زیر، black_box(v.as_ptr()) مانع از این می شود که کامپایلر فکر کند که بردار v استفاده نمی شود. استفاده از std::hint::black_box; fn push_cap(v: &mut Vec) { برای i در 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • مدیر بسته "cargo" دستور "remove" را ارائه می دهد که به شما امکان می دهد وابستگی ها را از مانیفست Cargo.toml از خط فرمان حذف کنید.
  • بخش جدیدی از API به دسته پایدار منتقل شده است، از جمله روش ها و اجرای صفات تثبیت شده اند:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned، overflowing_add_unsigned، saturating_add_unsigned، wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{first, last, pop_first, pop_last}
    • BTreeMap::{first_key_value، last_key_value، first_entry، last_entry، pop_first، pop_last}
    • هنگام استفاده از WASI، پیاده سازی های AsFd را برای انواع قفل stdio اضافه کنید.
    • ایمپل TryFrom > برای جعبه<[T; N]>
    • هسته::اشاره::جعبه_سیاه
    • مدت زمان::try_from_secs_{f32,f64}
    • گزینه::unzip
    • std::os::fd
  • محدوده های "..X" و "..=X" در قالب ها مجاز هستند.
  • هنگام ساخت قسمت جلویی کامپایلر rustc و باطن LLVM، از حالت های بهینه سازی LTO (Link Time Optimization) و BOLT (Binary Optimization and Layout Tool) برای افزایش عملکرد کد به دست آمده و کاهش مصرف حافظه استفاده می شود.
  • پشتیبانی از سطح 5 برای پلتفرم های armv5te-none-eabi و thumbvXNUMXte-none-eabi پیاده سازی شده است. سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار، انتشار بیلدهای رسمی و بررسی توانایی ساخت کد.
  • پشتیبانی برای پیوند به کتابخانه های عمومی macOS اضافه شده است.

علاوه بر این، می‌توان به گنجاندن قسمت جلویی کامپایلر زبان Rust (gccrs) در پایگاه کد GCC اشاره کرد. فرانت اند در شاخه GCC 13 گنجانده شده است که در ماه مه 2023 منتشر خواهد شد. با شروع GCC 13، جعبه ابزار استاندارد GCC را می توان برای کامپایل برنامه های Rust بدون نیاز به نصب کامپایلر rustc که با استفاده از توسعه های LLVM ساخته شده است، استفاده کرد. اجرای Rust در GCC 13 در وضعیت بتا خواهد بود و به طور پیش فرض فعال نیست.

منبع: opennet.ru

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