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

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

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

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

  • استفاده از ماکرو «هراس!» تثبیت شده است. در زمینه های ایجاد شده در طول کامپایل، مانند اعلان های "const fn". علاوه بر این، علاوه بر استفاده از "هراس!" اعلان‌های const استفاده از ماکرو «اظهار!» را مجاز می‌کنند. و برخی دیگر از APIهای کتابخانه استاندارد. تثبیت هنوز کل زیرساخت قالب‌بندی را پوشش نمی‌دهد، بنابراین در شکل فعلی‌اش، ماکرو «هراس!» است فقط می توان با رشته های ایستا (panic!(")) یا با یک مقدار درون یابی "&str" در هنگام جایگزینی (panic!("{}"، a)) استفاده کرد، که باید به جایگزینی "{" محدود شود. }" بدون تعیین کننده های قالب بندی و انواع دیگر. در آینده، کاربرد ماکروها در زمینه‌های ثابت گسترش خواهد یافت، اما قابلیت‌های تثبیت‌شده از قبل برای انجام بررسی‌های تصدیق در مرحله کامپایل کافی هستند: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = ادعا!(std::mem::size_of:: () == 8);
  • مدیر بسته Cargo اجازه می دهد تا از پروفایل هایی با نام های دلخواه استفاده کنید، نه محدود به "dev"، "release"، "test" و "bench". به عنوان مثال، برای فعال کردن بهینه‌سازی در مرحله پیوند (LTO) تنها زمانی که مجموعه‌های محصول نهایی تولید می‌شوند، می‌توانید یک نمایه «production» در Cargo.toml ایجاد کنید و پرچم «lto = true» را به آن اضافه کنید. با این حال، هنگام تعریف پروفایل های خود، باید یک نمایه موجود را مشخص کنید تا تنظیمات پیش فرض را از آن به ارث ببرید. مثال زیر یک نمایه "تولید" ایجاد می کند که با اضافه کردن پرچم "lto = true" نمایه "انتشار" را تکمیل می کند. خود نمایه با فراخوانی محموله با گزینه "--profile production" فعال می شود و مصنوعات مونتاژ در فهرست "هدف/تولید" قرار می گیرند. [profile.production] inherits = "release" lto = درست است
  • استفاده از try_reserve برای انواع Vec، String، HashMap، HashSet و VecDeque تثبیت شده است، که به شما این امکان را می دهد که برای کاهش فرکانس عملیات تخصیص حافظه و جلوگیری از آن، فضا را برای تعداد معینی از عناصر از یک نوع خاص از قبل رزرو کنید. در حین کار به دلیل کمبود حافظه خراب می شود.
  • تعیین ماکروها با پرانتزهای فرفری در عباراتی مانند "m!{ .. }.method()" و "m!{ .. }؟" مجاز است.
  • اجرای توابع File::read_to_end و read_to_string بهینه شده است.
  • پشتیبانی از مشخصات یونیکد به نسخه 14.0 به روز شده است.
  • تعداد توابع علامت گذاری شده با علامت "#[must_use]" را افزایش داد تا در صورت نادیده گرفتن مقدار بازگشتی، اخطاری صادر کند، که به شناسایی خطاهای ناشی از این فرض که یک تابع به جای برگرداندن یک مقدار جدید، مقادیر را تغییر می دهد، کمک می کند.
  • باطن آزمایشی برای تولید کد با استفاده از libgccjit اضافه شد.
  • بخش جدیدی از API به دسته پایدار منتقل شده است، از جمله روش ها و اجرای صفات تثبیت شده اند:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • collections::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • رشته::try_reserve
    • رشته::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • دستور::get_program
    • دستور::get_args
    • دستور::get_envs
    • دستور::get_current_dir
    • CommandArgs
    • CommandEnvs
  • ویژگی "const" که تعیین می کند آیا می توان آن را در هر زمینه ای به جای ثابت ها استفاده کرد یا خیر، در تابع hint::unreachable_unchecked استفاده می شود.
  • سومین سطح پشتیبانی برای armv6k-nintendo-3ds، armv7-unknown-linux-uclibceabihf، m68k-unknown-linux-gnu، aarch64-kmc-solid_asp3، armv7a-kmc-solid_asp3-eabi و armv7a-k پیاده سازی شده است. پلتفرم های solid_asp3-eabihf. سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار، انتشار بیلدهای رسمی و تأیید قابلیت ساخت کد.

منبع: opennet.ru

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