انتشار زبان برنامه نویسی Rust 2021 (1.56)

انتشار زبان برنامه نویسی سیستم Rust 1.56 که توسط پروژه موزیلا تأسیس شد، اما اکنون تحت نظارت سازمان غیرانتفاعی مستقل Rust Foundation توسعه یافته است، منتشر شد. علاوه بر شماره نسخه معمولی، این نسخه Rust 2021 نیز نامگذاری شده است و نشان دهنده تثبیت تغییرات پیشنهادی در سه سال گذشته است. Rust 2021 همچنین به عنوان پایه ای برای افزایش عملکرد در سه سال آینده عمل خواهد کرد، مشابه اینکه انتشار Rust 2018 مبنای توسعه این زبان در سه سال گذشته شد.

برای حفظ سازگاری، توسعه‌دهندگان می‌توانند از برچسب‌های «2015»، «2018» و «2021» در برنامه‌های خود استفاده کنند که به برنامه‌ها اجازه می‌دهد به برش‌های وضعیت زبان مربوط به نسخه‌های انتخابی Rust مرتبط شوند. نسخه ها برای جداسازی تغییرات ناسازگار معرفی شدند و در ابرداده های بسته های محموله از طریق قسمت "ویرایش" در بخش "[بسته]" پیکربندی می شوند. به عنوان مثال، نسخه "2018" شامل عملکردی است که از پایان سال 2018 تثبیت شده است و همچنین تمام تغییرات بعدی را که سازگاری را از بین نمی برند، پوشش می دهد. نسخه 2021 علاوه بر این شامل ویژگی‌های شکستن قابلیت همکاری است که در نسخه فعلی 1.56 پیشنهاد شده و برای اجرای آینده تأیید شده است. ویراستاران علاوه بر خود زبان، وضعیت ابزارها و اسناد را نیز در نظر می گیرند.

ناسازگاری های عمده ثبت شده در Rust 2021:

  • ضبط جداگانه در بسته‌ها - اکنون بسته‌ها می‌توانند نام فیلدهای فردی را به جای کل شناسه ضبط کنند. به عنوان مثال، "|| ax + 1 به جای "a" فقط "ax" را می گیرد.
  • ویژگی IntoIterator برای آرایه ها: array.into_iter() به شما امکان می دهد عناصر آرایه را با مقادیر تکرار کنید، نه توسط مراجع.
  • پردازش عبارات "|" در قوانین_ماکرو تغییر کرده است (OR Boolean) در الگوها - مشخص کننده ":pat" در مطابقت ها اکنون به "A | ب".
  • مدیر بسته محموله به طور پیش فرض شامل نسخه دوم حل کننده ویژگی است که پشتیبانی از آن در Rust 1.51 ظاهر شد.
  • صفات TryFrom، TryInto و FromIterator به ماژول کتابخانه استاندارد prelude اضافه شده است.
  • ماکروهای Panic!(..) and assert!(expr, ..) اکنون همیشه از format_args!(..) برای قالب بندی رشته ها، مشابه println!() استفاده می کنند.
  • عبارات ident#، ident..." و ident'...' در نحو زبان محفوظ هستند.
  • اخطارهای bare_trait_objects و ellipsis_inclusive_range_patterns به خطاها منتقل شدند.

جدید در Rust 1.56:

  • در Cargo.toml در قسمت “[package]” قسمت rust-version اضافه شده است که از طریق آن می توانید حداقل نسخه پشتیبانی شده از Rust را برای بسته جعبه تعیین کنید. اگر نسخه فعلی با پارامتر مشخص شده مطابقت نداشته باشد، کارگو با یک پیام خطا متوقف می شود.
  • هنگام تطبیق الگو با استفاده از عبارات "binding @ pattern"، پشتیبانی برای تعیین پیوندهای اضافی ارائه می شود (به عنوان مثال، "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • بخش جدیدی از API به دسته پایدار منتقل شده است، از جمله روش ها و اجرای صفات تثبیت شده اند:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • هسته:: وحشت::{UnwindSafe، RefUnwindSafe، AssertUnwindSafe}
    • Vec::shrink_to
    • رشته::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • ویژگی "const" که امکان استفاده در هر زمینه ای را به جای ثابت ها تعیین می کند، در توابع استفاده می شود
    • std::mem::transmute
    • [T]:: اول
    • [T]::split_first
    • [T]:: آخرین
    • [T]::split_last
  • کامپایلر برای استفاده از LLVM نسخه 13 تغییر یافته است.
  • سطح دوم پشتیبانی برای پلتفرم aarch64-apple-ios-sim و سطح سوم برای پلتفرم های powerpc-unknown-freebsd و riscv32imc-esp-espidf اجرا شده است. سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار، انتشار بیلدهای رسمی یا بررسی اینکه آیا کد قابل ساخت است یا خیر.

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

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

منبع: opennet.ru

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