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

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

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

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

  • یک حالت کامپایل خط لوله (pipelined) اضافه شد، که در آن ساخت بسته جعبه وابسته به محض در دسترس قرار گرفتن فراداده وابستگی، بدون انتظار برای تکمیل آن، شروع می‌شود. هنگام کامپایل یک بسته، نیازی نیست که وابستگی ها به طور کامل جمع شوند، فقط باید ابرداده را تعریف کرد که شامل لیستی از انواع، وابستگی ها و عناصر صادر شده است. فراداده در اوایل فرآیند کامپایل در دسترس قرار می گیرد، بنابراین بسته های پیوندی اکنون می توانند خیلی زودتر کامپایل شوند. هنگام ساخت بسته های تک، حالت پیشنهادی بر عملکرد تأثیر نمی گذارد، اما اگر ساخت بسته هایی با وابستگی های شاخه ای را پوشش دهد، زمان ساخت کلی را می توان 10-20٪ کاهش داد.
  • تشخیص استفاده نادرست از توابع را تضمین می کند std::mem::uninitialized и std::mem::zeroed. به عنوان مثال، std::mem::uniitialized برای ایجاد سریع آرایه ها مناسب است، اما کامپایلر را گمراه می کند، زیرا به نظر می رسد مقداردهی اولیه شده است، اما در واقع مقدار بدون مقدار اولیه باقی می ماند. تابع mem::uninitialized قبلاً به عنوان منسوخ علامت گذاری شده است و توصیه می شود به جای آن از یک نوع متوسط ​​استفاده کنید. شاید واحد. در مورد mem::zeroed، این تابع می‌تواند در انواعی که مقادیر صفر را نمی‌پذیرند، مشکل ایجاد کند.

    برای کمک به شناسایی رفتار تعریف نشده، نسخه جدید یک بررسی لنت به کامپایلر اضافه می کند که برخی از مشکلات مربوط به mem::unitialized یا mem::zeroed را شناسایی می کند. به عنوان مثال، اکنون هنگام تلاش برای استفاده از mem::unitialized یا mem::zeroed با انواع &T و Box‹T›، یک خطا دریافت می کنید، که نشان دهنده اشیاء اشاره گر هستند که نمی توانند مقادیر null را بپذیرند.

  • ویژگی "#[منسوخ شده]" گسترش یافته است تا بسته های جعبه را به عنوان منسوخ علامت گذاری کرده و برای حذف در آینده برنامه ریزی شود. از Rust 1.38، این ویژگی می تواند برای ماکروها نیز استفاده شود.
  • قابلیت استفاده از ویژگی «#[global_allocator]» در زیر ماژول‌ها اضافه شد.
  • عملکرد اضافه شده است std::any::type_name، که به شما امکان می دهد نام نوع را پیدا کنید که می تواند برای اهداف اشکال زدایی مفید باشد. به عنوان مثال، در حین اجرای برنامه می توانید بفهمید که تابع برای چه نوع فراخوانی شده است:

    fn gen_value‹T: پیش فرض>() -› T {
    println!("Initializing instance of {}", std::any::type_name::‹T›());
    پیش فرض::default()
    }

    fn main() {
    اجازه دهید _: i32 = gen_value(); # "i32" چاپ خواهد شد
    اجازه دهید _: String = gen_value(); # "alloc::string::String" را چاپ می کند
    }

  • توابع گسترده کتابخانه استاندارد:
    • slice::{concat, connect, join} اکنون می‌تواند مقدار &[T] را علاوه بر &T;
    • "*const T" و "*mut T" اکنون نشانگر::Unpin را پیاده سازی می کنند.
    • "Arc‹[T]›" و "Rc‹[T]›" اکنون FromIterator‹T› را پیاده سازی می کنند.
    • iter::{StepBy، Peekable، Take} اکنون DoubleEndedIterator را پیاده سازی کنید.
    • ascii::EscapeDefault Clone و Display را پیاده سازی می کند.
  • بخش جدیدی از APIها به دسته پایدار منتقل شده اند، از جمله روش هایی که تثبیت شده اند
    • ‹*const T›::cast, ‹*mut T›::cast,
    • مدت زمان::as_secs_f{32|64}،
    • Duration::div_duration_f{32|64}،
    • مدت زمان::div_f{32|64}،
    • مدت زمان::from_secs_f{32|64}،
    • مدت زمان::mul_f{32|64}،
    • عملیات تقسیم با باقیمانده
      div_euclid و rem_euclid برای همه اعداد صحیح اولیه.

  • پشتیبانی برای تعیین چندین بار گزینه "--features" برای فعال کردن ویژگی های مختلف در مدیر بسته محموله اضافه شده است.
  • کامپایلر سومی را فراهم می کند سطح پشتیبانی از پلتفرم های هدف aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-unknown, armlinuxv -gnueabi، armv7-unknown-linux-musleabi، hexagon-unknown-linux-musl و riscv7i-unknown-none-elf. سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار و انتشار بیلدهای رسمی.

منبع: opennet.ru

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