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

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

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

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

  • تثبیت شد یک دستور برنامه نویسی ناهمزمان جدید بر اساس تابع "async"، بلوک async move { ... } و عملگر ".await" که نوشتن کنترل کننده هایی که جریان فرمان اصلی را مسدود نمی کنند را آسان تر می کند. در مقایسه با API ارائه شده قبلی برای I/O ناهمزمان، ساختارهای async/.await برای درک ساده، بسیار خوانا هستند و به شما اجازه می‌دهند تا تعاملات ناهمزمان پیچیده را با استفاده از تکنیک‌های کنترل جریان آشنا بر اساس حلقه‌ها، عبارات شرطی و استثناها پیاده‌سازی کنید.

    دستور Async-await به شما امکان می دهد تا عملکردهایی ایجاد کنید که می توانند اجرای آنها را متوقف کنند، کنترل را به رشته اصلی برگردانند و سپس اجرا را از جایی که متوقف کردند از سر بگیرند. به عنوان مثال، چنین مکثی هنگام پردازش I/O مورد نیاز است، که در آن می‌توان کارهای دیگری را در حین انتظار برای رسیدن قطعه بعدی انجام داد. توابع و بلوک های تعریف شده با "async fn" و "async move" یک ویژگی را برمی گرداند. آینده، که یک نمایش محاسبات ناهمزمان معوق را تعریف می کند. شما می توانید مستقیماً یک محاسبه معوق را شروع کرده و با استفاده از عملگر ".await" نتیجه را بدست آورید. هیچ اقدامی انجام نمی شود یا از قبل برنامه ریزی شده است تا زمانی که .wait فراخوانی نشود، که اجازه می دهد ساختارهای تودرتو پیچیده بدون سربار اضافی ایجاد شوند.

    async fn first_function() -> u32 { .. }
    ...
    let future = first_function();
    ...
    اجازه دهید نتیجه: u32 = future.await;

  • تثبیت شد "#![ویژگی(bind_by_move_pattern_guards)]، اجازه استفاده از متغیرهای با نوع اتصال "توسط حرکتدر قالب ها و استفاده از ارجاعات به این متغیرها در بخش "if" عبارت "همخوانی داشتن". به عنوان مثال، ساخت و سازهای زیر اکنون مجاز هستند:

    fn main() {
    let array: Box<[u8; 4]> = جعبه::new([1, 2, 3, 4]);

    آرایه مطابقت {
    شماره ها
    if nums.iter().sum::() == 10

    => {
    قطره (تعداد)؛
    }
    _ => دست نیافتنی!()،
    }
    }

  • نشانه مجاز است ویژگی های هنگام تعریف پارامترهای تابع، بسته شدن و نشانگرهای تابع. ویژگی های کامپایل مشروط (cfg، cfg_attr) که تشخیص را از طریق lint (مجاز، هشدار، رد و منع) و ویژگی های فراخوانی ماکرو کمکی کنترل می کنند، پشتیبانی می شوند.

    لنز fn(
    #[cfg(windows)] slice: &[u16]، // از پارامتر در ویندوز استفاده کنید
    #[cfg(not(windows))] برش: &[u8]، // استفاده در سیستم‌عامل دیگر
    ) -> استفاده از {
    slice.len()
    }

  • هشدارها در مورد مشکلات شناسایی شده هنگام بررسی استقراض متغیرها (بررسی کننده قرض) با استفاده از تکنیک NLL (طول عمر غیر واژگانی)، ترجمه شده در دسته خطاهای مرگبار بیایید به یاد بیاوریم که سیستم تأیید مبتنی بر مکانیسم جدیدی برای در نظر گرفتن طول عمر متغیرهای وام گرفته شده، شناسایی برخی از مشکلات را که توسط کد تأیید قدیمی مورد توجه قرار نگرفته است، امکان پذیر کرد. از آنجایی که خروجی خطا برای چنین بررسی هایی می تواند سازگاری با کدهای قبلی را تحت تأثیر قرار دهد، در ابتدا به جای خطا، هشدارها صادر شد. هشدارها اکنون با خطاهای هنگام اجرا در حالت Rust 2018 جایگزین شده اند. در نسخه بعدی، خروجی خطا در حالت Rust 2015 نیز پیاده سازی خواهد شد که در نهایت از شر چک کننده قدیمی قرض خلاص می شود.
  • ویژگی “const” که امکان استفاده در هر زمینه ای را به جای ثابت ها تعیین می کند، برای توابع Vec::new، String::new، LinkedList::new، str::len، [T]::len استفاده می شود. , str::as_bytes,
    abs، wrapping_abs و overflowing_abs;

  • بخش جدیدی از APIها به دسته پایدار منتقل شده اند، از جمله روش هایی که تثبیت شده اند
    پین::into_inner، Instant::checked_duration_since و Instant::saturating_duration_since;

  • مدیر بسته محموله اکنون این توانایی را دارد که از پسوند ".toml" برای فایل های پیکربندی استفاده کند. اضافه شدن پشتیبانی اولیه برای ساخت کتابخانه استاندارد به طور مستقیم از Cargo. پرچم "--workspace" را اضافه کرد و جایگزین پرچم بحث برانگیز "--all" شد. یک فیلد جدید به ابرداده اضافه شده است "منتشر کردن"، که به شما امکان می دهد با تعیین یک تگ git و شماره نسخه، وابستگی ها را منتشر کنید. اضافه شدن گزینه تست "-Ztimings" برای ایجاد گزارش HTML از زمان های اجرای مراحل مختلف کامپایل.
  • در کامپایلر rustc، پیام‌های تشخیصی شامل کوتاه کردن دم کدهایی است که در ترمینال جا نمی‌شوند. ارائه سطح سوم پشتیبانی از پلتفرم های هدف
    i686-unknown-uefi و sparc64-unknown-openbsd. سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار و انتشار بیلدهای رسمی.

منبع: opennet.ru

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