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

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

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

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

  • صفت تثبیت شد آینده، که مقداری را نشان می دهد که ارزیابی آن ممکن است هنگام استفاده از بلوک های async / .wait هنوز تکمیل نشده باشد. مقادیر ناهمزمان تعریف شده با استفاده از Future امکان ادامه اجرای کار مفید در موضوع را فراهم می کند، در حالی که به طور همزمان منتظر تکمیل محاسبات یک مقدار خاص هستیم.
  • کتابخانه تثبیت شد اختصاص دهید، که نشانگرها و مجموعه های هوشمندی را برای مدیریت مقادیر تخصیص یافته به حافظه ارائه می دهد. تخصیص حافظه در std اکنون از نوع استفاده می کند یک چیز، که مجدداً از alloc صادر می شوند. استفاده جداگانه از alloc در برنامه‌هایی که به std مرتبط نیستند ("#![no_std]")، و همچنین در کتابخانه‌هایی که برای استفاده در برنامه‌های مشابه بدون std طراحی شده‌اند، منطقی است.
  • برای دور زدن بررسی های اولیه درست مقادیر پیشنهادی نوع متوسط شاید واحد، که می تواند به جای تابع mem::uninitialized به عنوان جایگزین ایمن تر استفاده شود. تابع mem::uninitialized برای ایجاد سریع آرایه ها مناسب است، اما کامپایلر را گمراه می کند زیرا به نظر می رسد مقداردهی اولیه شده است، اما در واقع مقدار بدون مقدار اولیه باقی می ماند. MaybeUninit به شما این امکان را می دهد که صریحاً به کامپایلر نشان دهید که مقدار مقدار اولیه نیست، رفتار نامشخص احتمالی مرتبط با آن را در نظر بگیرید و همچنین بررسی ها را در برنامه ها از طریق "maybe_t:" و مقداردهی اولیه گام به گام سازماندهی کنید و تکمیل آن را علامت گذاری کنید. با استفاده از فراخوانی ".assume_init()". با ظهور MaybeUninit، تابع mem::uninitialized منسوخ شده است و برای استفاده توصیه نمی شود.
  • تکنیک NLL (Non-Lexical Lifetimes) که سیستم ثبت طول عمر متغیرهای قرضی را گسترش داد، برای زبان Rust 2015 تثبیت شده است (در ابتدا، NLL فقط توسط Rust 2018 پشتیبانی می شد). به جای اتصال طول عمر در سطح واژگانی، NLL از آنها در سطح مجموعه نشانگرها در نمودار جریان اجرا مراقبت می کند. این رویکرد به شما امکان می دهد کیفیت بررسی وام گرفتن متغیرها (بررسی کننده قرض) را افزایش دهید و امکان اجرای برخی از انواع کدهای صحیح را که استفاده از آنها قبلاً منجر به خطا شده بود را فراهم می کند. رفتار جدید همچنین اشکال زدایی را بسیار ساده تر می کند.
  • اجرای جدید آرایه های انجمنی گنجانده شده است HashMap، بر اساس کاربرد ساختار میز سوئیس (به طور خودکار بارگیری می شود hashbrown::HashMap، مگر اینکه صراحتاً خلاف آن ذکر شده باشد، مانند std::HashMap که بر اساس SipHash 1-3 است. رابط نرم افزار یکسان باقی می ماند و تفاوت های قابل توجه برای توسعه دهنده به افزایش عملکرد و کاهش مصرف حافظه خلاصه می شود.
  • در محموله مدیر بسته اضافه گزینه "--offline" که عملیات بدون دسترسی به شبکه را فعال می کند، که در آن فقط بسته های کش شده در سیستم محلی هنگام نصب وابستگی ها استفاده می شود. اگر وابستگی در حافظه نهان محلی نباشد، یک خطا ایجاد می شود. برای پیش بارگذاری وابستگی ها در حافظه پنهان محلی قبل از آفلاین شدن، می توانید از دستور "بارگیری بار" استفاده کنید.
  • قابلیت فراخوانی ماکرو "dbg!" نشان دادن چندین استدلال؛
  • ویژگی "const" که امکان استفاده در هر زمینه ای را به جای ثابت ها تعیین می کند، برای روش ها استفاده می شود
    Layout::from_size_align_unchecked،
    mem::needs_drop,
    NonNull:: آویزان و
    NonNull::cast;

  • بخش جدیدی از APIها به دسته پایدار منتقل شده اند، از جمله روش هایی که تثبیت شده اند
    وظیفه::واکر، وظیفه::نظرسنجی،
    VecDeque::rotate_left، VecDeque::rotate_right،
    Read::read_vectored، Write::write_vectored،
    تکرار کننده::کپی شده،
    BorrowMut (برای رشته ها) و str::as_mut_ptr.

منبع: opennet.ru

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