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

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

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

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

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

    ‎macro_rules!make_item {$name:ident) => { fn $name(); } }

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

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

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

    قوانین_ماکرو!پذیرش_متا {$m:meta) => {} }
    accept_meta!(my::path); //متا را بپذیر!//مسیر من را انتخاب کن//
    accept_meta!(my::path = "lit"); // پذیرفتن متا! (my::path = "lit");
    accept_meta!(my::path(abc)); //متا را بپذیر!(my::path(abc));
    accept_meta!(my::path[abc]); //متا را بپذیر!//مسیر من را بپذیر!//
    accept_meta!(my::path {abc}); // پذیرفتن متا! (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}::to_ne_bytes، {f32,f64}::from_be_bytes، {f32,f64}::from_le_bytes، و {f32,f64}::from_ne_bytes.
  • در بخش مدیریت بسته‌های بار
    اجرا شد هشدارهای کامپایلر روی دیسک ذخیره می‌شوند. دستور "cargo metadata" اکنون دارای "—پلتفرم فیلتربرای نمایش فقط بسته‌های متصل به پلتفرم هدف مشخص شده در نمودار تفکیک وابستگی. پارامتر پیکربندی http.ssl-version برای تعیین نسخه‌های مجاز TLS اضافه شده است.
    قابلیت انتشار بخش "اضافه شد"وابستگی‌های توسعهبدون مشخص کردن کلید "نسخه".
  • کامپایلر rustc اکنون پشتیبانی سطح ۳ را برای پلتفرم‌های هدف thumbv7neon-unknown-linux-musleabihf، aarch64-unknown-none-softfloat، mips64-unknown-linux-muslabi64 و mips64el-unknown-linux-muslabi64 ارائه می‌دهد. سطح ۳ پشتیبانی اولیه را ارائه می‌دهد، اما بدون تست خودکار یا ساخت‌های رسمی.

منبع: opennet.ru

خرید هاست قابل اعتماد برای سایت های دارای حفاظت DDoS، سرورهای VPS VDS 🔥 خرید هاستینگ معتبر با محافظت در برابر حملات DDoS، سرورهای VPS و VDS | ProHoster