صورت گرفت انتشار زبان برنامه نویسی سیستم زنگ 1.34، توسعه یافته توسط پروژه موزیلا. این زبان بر ایمنی حافظه تمرکز میکند، مدیریت خودکار حافظه را فراهم میکند و ابزاری برای دستیابی به موازی کاری بالا بدون استفاده از جمعآوری زباله یا زمان اجرا فراهم میکند.
مدیریت خودکار حافظه Rust توسعهدهنده را از دستکاری اشارهگر رها میکند و از مشکلات ناشی از دستکاری حافظه در سطح پایین، مانند دسترسیهای پس از آزاد شدن حافظه، عدم ارجاع اشارهگر تهی، بیش از حد بافر و موارد مشابه محافظت میکند. یک مدیر بسته برای توزیع کتابخانه ها، اطمینان از مونتاژ و مدیریت وابستگی های پروژه در حال توسعه است. بار، که به شما امکان می دهد کتابخانه های مورد نیاز برنامه را با یک کلیک دریافت کنید. یک مخزن برای میزبانی کتابخانه ها پشتیبانی می شود crates.io.
مدیر بسته Cargo ابزارهایی را برای کار با ثبت بسته های جایگزین اضافه کرده است که می توانند با ثبت عمومی crates.io همزیستی داشته باشند. برای مثال، توسعهدهندگان برنامههای اختصاصی اکنون میتوانند از رجیستری خصوصی خود استفاده کنند، که میتواند هنگام فهرست کردن وابستگیها در Cargo.toml استفاده شود، و یک مدل نسخهسازی مشابه crates.io را برای محصولات خود اعمال کنند، و همچنین وابستگیها را به هر دو جعبه ارجاع دهند. io و به رجیستری خودتان.
برای افزودن رجیستری های خارجی به .cargo/config (واقع در $HOME یا دایرکتوری بسته) پیش بینی شده بخش "[رجیستری]"، و برای استفاده از یک رجیستری خارجی، گزینه "رجیستری" در توضیحات هر وابستگی در Cargo.toml ظاهر شده است. برای اتصال به یک رجیستری اضافی، به سادگی توکن احراز هویت را در فایل ~/.cargo/credentials قرار دهید و دستور را اجرا کنید.
"ورود محموله --registry=my-registry" و انتشار بسته -
"cargo publish -registry=my-registry";
پشتیبانی کامل برای استفاده از عملگر "؟" اضافه شده است. در تست ها دکترا، به شما این امکان را می دهد که از کد نمونه از اسناد به عنوان آزمایش استفاده کنید. اپراتور قبلی
"؟" می تواند برای رسیدگی به خطاها در حین اجرای آزمایش تنها در حضور تابع "fn main()" یا در توابع "#[test]" استفاده شود.
در ویژگی های سفارشی که با استفاده از ماکروهای رویه ای تعریف می شوند امن شده است توانایی استفاده از مجموعههای دلخواه از نشانهها ("#[attr($tokens)]، "#[attr[$tokens]] و #[attr{$tokens}]"). قبلاً، عناصر را فقط میتوان به شکل درختی/بازگردانی با استفاده از لفظهای رشتهای مشخص کرد، برای مثال «#[foo(bar, baz(quux, foo = «bar»))]»، اما اکنون میتوان از شمارشها استفاده کرد (' #[range(0. .10)]') و ساختارهایی مانند "#[bound(T: MyTrait)]"؛
انواع تثبیت شده (ویژگی) TryFrom и TryInto، امکان تبدیل نوع با مدیریت خطا را فراهم می کند. به عنوان مثال، روش هایی مانند from_be_bytes با انواع عدد صحیح از آرایه ها به عنوان ورودی استفاده می کنند، اما داده ها اغلب در یک نوع Slice می آیند و تبدیل بین آرایه ها و برش ها به صورت دستی مشکل ساز است. با کمک ویژگی های جدید، عملیات مشخص شده را می توان در پرواز از طریق فراخوانی به .try_into() انجام داد، به عنوان مثال، "let num = u32::from_be_bytes(slice.try_into()؟)". برای تبدیل هایی که همیشه موفق هستند (مثلاً از نوع u8 به u32)، یک نوع خطا اضافه شده است فریب خورده، اجازه استفاده شفاف را می دهد
TryFrom برای همه پیاده سازی های موجود "از"؛
عملکرد منسوخ شده است CommandExt::before_exec، که اجازه می دهد تا یک کنترلر قبل از اجرای exec اجرا شود، که در زمینه یک فرآیند فرزند که پس از فراخوانی ()fork فورک شده است، اجرا می شود. در چنین شرایطی، برخی از منابع فرآیند والد، مانند توصیفگرهای فایل و مناطق حافظه نگاشت شده، می توانند کپی شوند، که می تواند منجر به رفتار نامشخص و عملکرد نادرست کتابخانه ها شود.
توصیه می شود از یک تابع ناامن به جای Before_exec استفاده کنید CommandExt::pre_exec.
انواع اعداد صحیح اتمی علامت دار و بدون علامت تثبیت شده در اندازه های 8 تا 64 بیت (به عنوان مثال، AtomicU8) و همچنین انواع امضا شده NonZeroI[8|16|32|64|128].
بخش جدیدی از API به دسته پایدار منتقل شده است، از جمله Any::type_id، Error::type_id، slice::sort_by_cached_key، str::escape_*، str::split_ascii_whitespace، Instant::checked_[add|sub ] و روش های SystemTime تثبیت شده اند ::checked_[add|sub]. توابع iter::from_fn و iter::successors تثبیت شده اند.
برای همه انواع عدد صحیح، متدهای checked_pow، saturating_pow، wrapping_pow و overflowing_pow پیاده سازی می شوند.
قابلیت فعال کردن بهینهسازی در مرحله پیوند با مشخص کردن گزینه ساخت «-C linker-plugin-lto» اضافه شد.