Rust 1.53 منتشر شد. گوگل اضافه کردن پشتیبانی Rust به هسته لینوکس را تامین مالی خواهد کرد

انتشار زبان برنامه نویسی سیستم Rust 1.53 که توسط پروژه موزیلا تأسیس شد، اما اکنون تحت نظارت سازمان غیرانتفاعی مستقل Rust Foundation توسعه یافته است، منتشر شد. این زبان بر ایمنی حافظه تمرکز می‌کند، مدیریت حافظه خودکار را فراهم می‌کند و ابزاری را برای دستیابی به موازی کاری بالا بدون استفاده از جمع‌آوری زباله یا زمان اجرا فراهم می‌کند (زمان اجرا به مقدار اولیه اولیه و نگهداری کتابخانه استاندارد کاهش می‌یابد).

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

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

  • برای آرایه ها، صفت IntoIterator پیاده سازی شده است که به شما امکان می دهد تکرار عناصر آرایه را بر اساس مقادیر سازماندهی کنید: برای i در [1، 2، 3] { .. }

    همچنین می‌توان آرایه‌ها را به متدهایی که تکرارکننده‌ها را می‌پذیرند، ارسال کرد، برای مثال: let set = BTreeSet::from_iter([1, 2, 3]); برای (a, b) در some_iterator.chain([1]).zip([1, 2, 3]) { .. }

    قبلاً IntoIterator فقط برای ارجاعات آرایه پیاده سازی می شد. برای تکرار روی مقادیر نیاز به استفاده از مراجع ("&[1, 2, 3]") یا "[1, 2, 3].iter()" است. اجرای IntoIterator برای آرایه ها به دلیل مشکلات سازگاری ناشی از تبدیل کامپایلر قبلی از ()array.into_iter به (&array).into_iter () با مشکل مواجه شد. این مشکلات با یک راه حل حل شدند - کامپایلر به تبدیل array.into_iter() به (&array).into_iter() ادامه می دهد، گویی هیچ پیاده سازی ویژگی IntoIterator وجود ندارد، اما فقط زمانی که متد را با استفاده از ".into_iter( فراخوانی می کند. )" نحو و بدون لمس کردن تماس ها به شکل "in [1, 2, 3]", "iter.zip([1, 2, 3])", "IntoIterator::into_iter([1, 2, 3] )".

  • می توان عبارات "|" را مشخص کرد. (عملیات منطقی OR) در هر بخشی از الگو، به عنوان مثال، به جای "Some(1) | Some(2)" اکنون می توانید "Some(1 | 2)" بنویسید: نتیجه را مطابقت دهید { Ok(Some(1 | 2)) => { .. } Err(MyError { type: FileNotFound | PermissionDenied, .. }) = > { .. } _ => { .. } }
  • استفاده از نویسه‌های غیرASCII در شناسه‌ها مجاز است، از جمله نویسه‌های ملی تعریف‌شده در مشخصات Unicode UAX 31، اما به استثنای نویسه‌های ایموجی. اگر از کاراکترهای متفاوت اما مشابه استفاده می کنید، کامپایلر یک هشدار صادر می کند. const BLÅHAJ: &str = "🦈"; struct 人 { 名字: رشته، } اجازه دهید α = 1; letsos = 2; هشدار: جفت شناسه بین «s» و «s» اشتباه گرفته شود
  • بخش جدیدی از APIها به دسته پایدار منتقل شده اند که شامل موارد زیر است:
    • آرایه::from_ref
    • آرایه::from_mut
    • AtomicBool::fetch_update
    • AtomicPtr::fetch_update
    • BTreeSet::retain
    • BTreeMap::retain
    • BufReader::seek_relative
    • cmp::min_by
    • cmp::min_by_key
    • cmp::max_by
    • cmp::max_by_key
    • DebugStruct::finish_non_exhaustive
    • مدت زمان:: صفر
    • مدت زمان:: MAX
    • Duration::is_zero
    • مدت زمان::saturating_add
    • Duration::saturating_sub
    • مدت زمان::saturating_mul
    • f32::is_subnormal
    • f64::is_subnormal
    • IntoIterator برای آرایه ها
    • {integer}::BITS
    • io:: خطا:: پشتیبانی نمی شود
    • NonZero*::leading_zeros
    • NonZero*::trailing_zeros
    • گزینه::insert
    • ترتیب::is_eq
    • سفارش::is_ne
    • سفارش::is_lt
    • سفارش::is_gt
    • سفارش::is_le
    • سفارش::is_ge
    • OsStr::make_ascii_downcase
    • OsStr::make_ascii_uppercase
    • OsStr::to_ascii_down
    • OsStr::to_ascii_uppercase
    • OsStr::is_ascii
    • OsStr::eq_ignore_ascii_case
    • Peekable::peek_mut
    • Rc::increment_strong_count
    • Rc::decrement_strong_count
    • slice::IterMut::as_slice
    • AsRef<[T]> برای slice::IterMut
    • impl SliceIndex برای (Bound ، مقید )
    • Vec::extend_from_within
  • سومین سطح پشتیبانی از پلتفرم wasm64-unknown-unknown پیاده سازی شده است. سطح سوم شامل پشتیبانی اولیه است، اما بدون آزمایش خودکار، انتشار بیلدهای رسمی، یا بررسی اینکه آیا کد قابل ساخت است یا خیر.
  • مدیر بسته Cargo به طور پیش فرض به استفاده از نام "main" برای شاخه اصلی مخزن Git (HEAD) منتقل شده است. وابستگی های میزبانی شده در مخازن که از نام main به جای master استفاده می کنند، دیگر نیازی به پیکربندی شاخه = "main" ندارند.
  • در کامپایلر، الزامات حداقل نسخه LLVM به LLVM 10 افزایش یافته است.

علاوه بر این، می‌توانیم به تأمین بودجه برای توسعه ادغام ابزارهای هسته لینوکس برای توسعه مؤلفه‌ها در زبان Rust اشاره کنیم. این کار در چارچوب پروژه Prossimo و تحت نظارت سازمان ISRG (گروه تحقیقاتی امنیت اینترنت) انجام خواهد شد که بنیانگذار پروژه Let's Encrypt است و HTTPS و توسعه فناوری هایی را برای افزایش امنیت سازمان ترویج می کند. اینترنت. این بودجه توسط گوگل تامین خواهد شد که هزینه کار میگل اوجدا، نویسنده پروژه Rust-for-Linux را پرداخت خواهد کرد. پیش از این، ISRG و Google در حال حاضر بودجه ایجاد یک Backend HTTP جایگزین برای ابزار curl و توسعه یک ماژول TLS جدید برای سرور Apache http را تامین کرده‌اند.

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

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

منبع: opennet.ru

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