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

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

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

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

  • قابلیت علامت گذاری ساختارها (struct) و شمارش ها (enum با بلوک Variant) با استفاده از ویژگی " اضافه شده است.#[غیر_جامع]" که اجازه می دهد تا در آینده، فیلدها و گزینه های جدید را به ساختارها و شمارش های اعلام شده اضافه کنید. برای مثال، توسعه دهندگان ماژول هایی که دارای ساختارهایی با فیلدهای اعلام شده عمومی هستند، می توانند از "#[non_exhaustive]" برای علامت گذاری ساختارهایی که ممکن است در آینده فیلدهای جدیدی اضافه شوند، استفاده کنند. تا به حال، در این شرایط، توسعه دهنده مجبور بود بین اعلام کردن فیلدها به صورت خصوصی و الزام آور شدن به لیست غیرقابل تغییر فیلدها یکی را انتخاب کند. ویژگی جدید این محدودیت را حذف می کند و به شما امکان می دهد در آینده بدون خطر شکستن کد خارجی کامپایل شده قبلی، فیلدهای جدیدی اضافه کنید. در بسته‌های جعبه، هنگام تطبیق گزینه‌ها در بخش «تطابق»، تعریف صریح ماسک «_ => {...}» مورد نیاز است که فیلدهای احتمالی آینده را پوشش می‌دهد، در غیر این صورت هنگام افزودن فیلدهای جدید خطایی نمایش داده می‌شود.
  • اضافه توانایی فراخوانی ماکرو رویه ای mac!() در یک متن نوع. برای مثال، اگر «expand_to_type» یک ماکرو رویه‌ای است، اکنون می‌توانید «type Foo = expand_to_type!(bar);» را بنویسید.
  • در بلوک های "extern { ... }". اضافه توانایی استفاده از ماکروهای رویه ای و ویژگی، از جمله ماکروهای "bang!()"، به عنوان مثال:

    قوانین_کلان! make_item { ($name:ident) => {fn $name(); } }

    خارجی {
    make_item!(alpha);
    make_item!(بتا);
    }

    خارجی "C" {
    #[مکرو_هویت_من] fn foo();
    }

  • در ماکروها اجرا شد توانایی تولید عناصر "macro_rules!" ایجاد "macro_rules!" هم در ماکروهای تابع مانند ("mac!()") و هم در ماکروها به شکل ویژگی ها ("#[mac]") امکان پذیر است.
  • در عنصر $m:meta mapping اضافه پشتیبانی از مقادیر شمارش رمز دلخواه ("[TOKEN_STREAM]"، "{TOKEN_STREAM}" و "(TOKEN_STREAM)")، به عنوان مثال:

    قوانین_کلان! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path );
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( abc ) );
    accept_meta!( my::path [ abc ] );
    accept_meta!( my::path { abc } );

  • در حالت Rust 2015، خروجی خطا برای مشکلات شناسایی شده هنگام بررسی استقراض متغیرها (بررسی کننده قرض) با استفاده از تکنیک NLL (طول عمر غیر واژگانی) فعال می شود. پیش از این، هنگام اجرا در حالت Rust 2018، هشدارها با خطاها جایگزین شده بودند.
    پس از گسترش این تغییر به حالت Rust 2015، توسعه دهندگان در نهایت توانستند خلاص شدن از شر از چکر قرض قدیمی.

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

  • ویژگی "const" که امکان استفاده از آن را در هر زمینه ای به جای ثابت ها تعیین می کند، برای تابع is_power_of_two (برای اعداد صحیح بدون علامت) استفاده می شود.
  • بخش جدیدی از API به دسته پایدار منتقل شده است، از جمله todo!() ماکرو و slice::repeat، mem::take، BTreeMap::get_key_value، HashMap::get_key_value، متدها تثبیت شده اند.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::به_ne_bytes, f32}::from_be_bytes، {f64,f32}::from_le_bytes، و {f64,f32}::from_ne_bytes.

  • در محموله مدیر بسته
    اجرا شد کش کردن هشدارهای کامپایلر روی دیسک گزینه "مجموعه ابرداده" را به دستور "فراداده محموله" اضافه کرد---فیلتر-پلتفرم" برای نشان دادن فقط بسته های متصل به پلت فرم هدف مشخص شده در ستون وضوح وابستگی. گزینه پیکربندی نسخه http.ssl برای تعریف نسخه های معتبر TLS اضافه شده است.
    اضافه شدن قابلیت انتشار بخش "وابسته به devبدون مشخص کردن کلید "نسخه".

  • کامپایلر rustc پشتیبانی سطح سوم را برای پلتفرم های هدف thumbv7neon-unknown-linux-musleabihf، aarch64-unknown-none-softfloat، mips64-unknown-linux-muslabi64 و mips64el-unknown-linux-muslabi64 فراهم می کند. سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار و انتشار بیلدهای رسمی.

منبع: opennet.ru

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