زنگ 1.35

تیم توسعه Rust خوشحال است که نسخه جدیدی از زبان خود را معرفی می کند: 1.35. Rust یک زبان برنامه نویسی است که به شما امکان می دهد برنامه های قابل اعتماد و کارآمد بنویسید.

اگر از قبل Rust را از طریق rustup نصب کرده اید، می توانید با دستور به روز رسانی کنید:
$ rustup به روز رسانی پایدار است

نکته اصلی در به‌روزرسانی، اجرای ویژگی‌های بسته شدن Fn، FnOnce، FnMut برای Box است. ، جعبه ، جعبه ، به ترتیب. افزودن قابلیت بسته شدن به اشاره گرها به توابع ناامن، فراخوانی ماکرو dbg!() اکنون بدون آرگومان امکان پذیر است و کتابخانه استاندارد تثبیت شده است.

به جزئیات:

  • در نسخه جدید پیاده سازی هایی از ویژگی های Fn، FnOnce، FnMut را برای Box اضافه کردیم. ، جعبه ، جعبه ، به ترتیب.
    حالا این کد کار خواهد کرد:
    fn foo(x: جعبه u8>) -> Vec {
    vec![1، 2، 3، 4].into_iter().map(x).collect()
    }

    همچنین می‌توانید مستقیماً از Box با یک بسته تماس بگیرید :
    fn foo(x: جعبه ) {
    ایکس()
    }

  • اکنون می توان بسته ها را به نشانگرهای fn ناامن فرستاد.
    اکنون این کد معتبر است:
    /// متغیرهای ایمنی آنهایی هستند که نشانگر «ناامن fn» ارسال شده است.
    fn ناامن call_unsafe_fn_ptr(f: ناامن fn()) {
    f()
    }

    fn main() {
    // ایمنی: هیچ تغییر ناپذیری وجود ندارد.
    // بسته شدن به طور ایستا از انجام کارهای ناامن جلوگیری می شود.
    ناامن {
    call_unsafe_fn_ptr(|| {
    dbg!();
    })؛
    }
    }

  • قابلیت فراخوانی ماکرو dbg!() بدون آرگومان اضافه شد.
    اگر مقداری عبارت را به این ماکرو منتقل کنید، ماکرو نتیجه خود را چاپ می کند. مثال:
    fn main() {
    اجازه دهید mut x = 0;

    اگر dbg!(x == 1) {
    x += 1;
    }

    dbg!(x);
    }

    وقتی این کد را اجرا می کنید، خواهید دید:
    [src/main.rs:4] x == 1 = نادرست
    [src/main.rs:8] x = 0

    حالا می توانید اینگونه بنویسید:
    fn main() {
    let condition = true;

    اگر شرط {
    dbg!();
    }
    }

    وقتی این کد را اجرا می کنید، خواهید دید:
    [src/main.rs:5]

  • برخی از بخش های کتابخانه استاندارد تثبیت شده است
    • روش های جدید برای f32 و f64:
      • f32::copysign
      • f64::copysign

      در واقع، توابع علامت یک عدد دیگر را کپی می کنند. مثال:
      fn main() {
      assert_eq!(3.5_f32.copysign(-0.42)، -3.5);
      }

    • روش های جدید برای انواع Range اضافه شده است
      • محدوده::شامل
      • RangeFrom::شامل
      • RangeTo::شامل
      • RangeInclusive::شامل
      • RangeToInclusive::شامل

      با این روش ها می توانید به راحتی بررسی کنید که آیا مقدار خاصی در یک دنباله قرار دارد یا خیر:
      fn main() {
      if (0..=10).contains(&5) {
      println! ("پنج در صفر تا ده گنجانده شده است.");
      }
      }

    • می توانید لیست کاملی از APIهای تثبیت شده را پیدا کنید اینجا
  • در این به روز رسانی، Clippy (این برنامه ای است که کد شما را برای بسیاری از خطاها بررسی می کند) یک بررسی جدید برای drop_bounds اضافه کرد. این بررسی زمانی کار می کند که شما یک محدودیت را تنظیم کنید: T: Drop - برای توابع تعمیم یافته:
    fn foo (x:T){}

    داشتن T: محدودیت Drop اغلب یک اشتباه است، زیرا برخی از انواع فوراً حذف می شوند، مانند u8. (شما می توانید در مورد این بیشتر بخوانید. اینجا)

  • بسیاری از بهبودها و اصلاحات در Cargo (مدیر بسته زبان)، لیست کامل تغییرات

منبع: linux.org.ru

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