مدیریت خودکار حافظه در Rust ، توسعه دهنده را از دستکاری نشانگرها محافظت می کند و در برابر مشکلات ناشی از کار در سطح پایین با حافظه ، مانند دسترسی به ناحیه حافظه پس از آزاد سازی ، دفع اشاره گرهای پوچ ، بیرون آمدن از مرزهای بافر و غیره محافظت می کند. برای توزیع کتابخانه ها ، اطمینان از مونتاژ و مدیریت وابستگی های پروژه ، مدیر بسته Cargo ساخته شده است که به شما امکان می دهد کتابخانه های مورد نیاز برنامه را با یک کلیک دریافت کنید. مخزن crates.io برای میزبانی کتابخانه ها پشتیبانی می شود.
نوآوری های اصلی:
- با استفاده از ویژگی "# [non_exhaustive]" ، امکان علامت گذاری ساختارها (ساختار) و شمارش (enum با بلوک Variant) اضافه شده است ، که به شما امکان می دهد در آینده زمینه ها و گزینه های جدیدی را به ساختارها و شمارش های اعلام شده اضافه کنید. به عنوان مثال ، توسعه دهندگان ماژول هایی با ساختارهایی با زمینه های اعلام شده عمومی می توانند از "# [non_exhaustive]" برای علامت گذاری ساختارهایی استفاده کنند که در آینده می توانند زمینه های جدیدی اضافه شوند. تا به امروز ، در یک وضعیت مشابه ، توسعه دهنده مجبور شده است بین اعلامیه خصوصی فیلدها و الزام آور بودن به یک لیست نامعتبر از زمینه ها ، انتخاب کند. ویژگی جدید این محدودیت را حذف می کند و به شما امکان می دهد زمینه های جدیدی را در آینده اضافه کنید بدون اینکه خطر اختلال در کار کد خارجی که قبلاً مونتاژ شده است ، داشته باشید. در بسته های جعبه ، هنگام مقایسه گزینه ها در بخش "بخش" ، تعریف صریح از ماسک "_ => {…}" مورد نیاز است ، که زمینه های احتمالی آینده را در بر می گیرد ، در غیر این صورت هنگام اضافه کردن فیلدهای جدید ، خطایی نمایش داده می شود.
- این امکان وجود دارد که ماکرو را فراخوانی کنید! () ماکرو رویه ای در متن نوع. به عنوان مثال ، اکنون می توانید "نوع Foo = ext_to_type! (نوار)" را بنویسید ، "اگر" expand_to_type "یک کلان رویه ای است.
- در بلوک های "extern {…}" ، امکان استفاده از ماکروهای رویه ای و انتساب از جمله ماکروهای "bang! ()" اضافه شده است ، به عنوان مثال:
macro_rules! make_item {($ name: ident) => {fn $ name ()؛ }
extern make_item! (آلفا)؛ make_item! (بتا)؛ }
خارجی "C" # [my_identity_macro] fn foo ()؛ }
- ماکروها توانایی تولید macro_rules را دارند! عناصر. تولید "macro_rules!" این هم در ماکروهای شبیه به عملکرد ("mac! ()") و هم در ماکروها به شکل ویژگیها امکان پذیر است ("# [mac]").
- پشتیبانی از مقادیر شمارش نشانه های دلخواه ("[[TOKEN_STREAM]" ، "{TOKEN_STREAM" و "(TOKEN_STREAM)) در عنصر تطبیق $ m: به عنوان مثال:
macro_rules! qebûl_meta ($ m: meta) => {} qebûl_meta! (مسیر من ::)؛ qebûl_meta! (my :: path = "lit")؛ qebûl_meta! (مسیر من: (a b c))؛ qebûl_meta! (مسیر من: [ a b c ])؛ qebûl_meta! (من :: مسیر {a b c})؛
- در Rust 2015 ، خروجی خطا برای مشکلات شناسایی شده در هنگام وام گرفتن وام با استفاده از تکنیک NLL (طول عمر غیر لکسی) فعال می شود. هشدارهای اولیه هنگام کار در حالت Rust 2018 با خطاها جایگزین شدند.
پس از توزیع این تغییر در Rust 2015 ، توسعه دهندگان این فرصت را پیدا کردند که سرانجام از شر چک وام های قدیمی خلاص شوند.به یاد بیاورید که یک سیستم تأیید مبتنی بر مکانیسم جدید برای در نظر گرفتن طول عمر متغیرهای وام گرفته شده ، امکان شناسایی برخی از مشکلات را که بدون توجه به کد تأیید قدیمی وجود دارد ، شناسایی کرد. از آنجا که خروجی خطا برای چنین چک هایی می تواند بر سازگاری با کد در حال اجرا تأثیر بگذارد ، به جای خطا ، ابتدا هشدارها صادر می شود.
- علامت "ثابت" ، که امکان استفاده در هر زمینه به جای ثابت را مشخص می کند ، برای عملکرد is_power_of_two (برای اعداد صحیح نامشخص) استفاده می شود.
- بخش جدیدی از API به گروه پایدار از جمله ماکرو todo منتقل شده است! () و برش روش ها: تکرار ، mem :: take ، BTreeMap :: get_key_value، HashMap :: get_key_value،
گزینه :: 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} :: از_ne_bytes. - در مدیر بسته بار
حافظه پنهان کامپایلر بر روی دیسک اجرا شد. گزینه اضافه شده – فیلتر-پلت فرم به فرمان "فراداده داده بار" برای نمایش فقط بسته های محدود شده به سکوی هدف مشخص شده در ستون وضوح وابستگی. پارامتر پیکربندی نسخه http.ssl را اضافه کرد تا نسخه های معتبر TLS را تعیین کند.
اضافه کردن امکان انتشار بخش "وابستگی های انحرافی" بدون مشخص کردن کلید "نسخه". - کامپایلر rustc پشتیبانی از سطح سوم را برای سیستم عامل های هدف thumbv7neon- ناشناخته-لینوکس-musleabihf ، aarch64 – ناشناخته-بدون نرم ، گل سرخ ، mips64-ناشناخته-لینوکس-muslabi64 و mips64el- ناشناخته-linux-muslabi64 فراهم می کند. سطح سوم حاکی از پشتیبانی اساسی است ، اما بدون آزمایش خودکار و انتشار مجامع رسمی.
OpenNET