تیم Rust با خوشحالی اعلام میکند که نسخه جدیدی از Rust، 1.99.0 منتشر شده است. Rust زبانی برنامهنویسی است که به همه امکان میدهد نرمافزارهای قابل اعتماد و کارآمد بسازند.
اگر نسخه قبلی Rust را از طریقrustuprustup update stable
$اگر هنوز آن را ندارید، میتوانید
rustupبرای نصب، به صفحه مربوطه در وبسایت ما مراجعه کنید.برای اطلاعات بیشتر، به صفحه ... در وبسایت ما مراجعه نمایید.یادداشتهای انتشار جزئی برای 1.99.0.
اگر مایل به کمک به ما در آزمایش نسخههای آینده هستید، ممکن است در نظر بگیرید بهروزرسانی محلی برای استفاده از کانال بتا (rustup پیشفرض بتا) یا کانال شبانه (rustup پیشفرض شبانه). لطفاًهر گونه باگاتی که ممکن است با آن مواجه شوید را گزارش کنید!هر گونه باگاتی که ممکن است با آن مواجه شوید را اطلاع دهید!
چه چیزی در 1.99.0 پایدار است؟
در خارج از "C": متغیرهای متغیر
نسخه 1.99.0 زبان Rust پایداری در تعریف توابع متغیر C-ABI با "C" و "C-unwind" ABIs. توابع متغیر اینگونه تعریف شده از لیست آرگومانهای متغیر استفاده میکنند....رست میتواند توابع متغیر (مانند) را که به صورت خارجی تعریف شدهاند، فراخوانی کند و تعداد نامحدودی از آرگومانها را بپذیرد.لیبراری استاندارد C::printfبا Rust 1.99، این توابع اکنون میتوانند مستقیماً در زبان Rust نوشته شوند:
///ایمنی: باید حداقل دو آرگومان از نوع i32 را دریافت کند.
ناسفخارجی"سی"fnخلاصه(متغیراستدلالها: ...)-> به فارسی: ->i32 به فارسی: 32 عدد صحیح {
//SAFETY: guaranteed by the caller. به فارسی: ایمنی: تضمین شده توسط فراخواننده.
let به فارسی: بیاییدa به فارسی: یک =unsafe به فارسی: ناایمن {args به فارسی: آرگومانها.next_arg به فارسی: آرگومان بعدی::<i32>() };
اجازه دهیدب =ناایمن {آرگومانها.آرگومان بعدی::<i32>() };
یک +ب
}
نامگذاریfoo()->i32 به فارسی: عدد صحیح 32 {
unsafe به فارسی: ناایمن {sum به فارسی: جمع(0i32 به فارسی: عدد صحیح 32, 2i32 به فارسی: عدد صحیح 32) }
}
The type of به فارسی: نوع...is به فارسی: استVaList به فارسی: لیست Vaکه با ABI سازگار است با Cلیست آرگومانهای متغیر (va_list)نوعها را در سراسر اهداف میخواند. چه نوعهایی میتوان از یکVaListکه توسطVaArgSafeویژگی
برای جزئیات بیشتر در مورد توابع متغیر C، بهمرجعاین انتشار همچنین پشتیبانی از تعریف توابع متغیر با ABI های غیر "C" را تثبیت میکند، که باید از طریق جمعآوری مستقیم نوشته شوند.
اطلاعات چیدمان از نشانگرهای خام
این انتشار الزامات ایمنی را برای بازیابی اندازه و همراستایی نشانگرهای خام به هر دو نوع اندازهدار و غیر اندازهدار حل میکند.اندازهدار(ایمن به طور خودکار، قبلاً در نسخههای پایدار ممکن بود) و غیر اندازهدار.نوع اندازهدارانواع.
این کار با تثبیت سه تابع انجام میشود:
توصیه میشود از نشت رفت و برگشت پس ازBox::leak
اگرچه در نسخه Rust 1.99 هیچ تغییری در معناشناسی زبان وجود ندارد، ما مستندات را به روز کردهایم.Box::leakتوصیه میشود از الگوهایی که بعداً آن حافظه را آزاد میکنند، پرهیز شود. این کار به این دلیل انجام شد که کدهای مشابه با بهینهسازیهای فعلی و آینده کامپایلر تعامل مشکلبرانگیزی داشتند، و به ویژه با ثباتسازی آلوکاتورهای سفارشی، این موضوع بیشتر حائز اهمیت است. به جای آن،Box::into_non_nullترجیح داده میشود.
این راهنما همچنین به سایرتوابع نشتکننده در کتابخانه استاندارد اعمال میشود.APIهای ثباتیافته
به Iterator تبدیل شوند.
IntoIteratorبرایجعبه<[T; N]>بهسوییتنیتوربرایو جعبه<[T; N]>بهسوییتنیتوربرایو تغییرپذیر جعبه<[T; N]>VecDeque::retain_back: نگهداشتن عقب VecDequecore::ffi::VaList: لیست آرگومانهای متغیر در هستهی FFIBox::into_non_null: تبدیل Box به غیر NullBox::from_non_null: ایجاد Box از یک مقدار غیر NullVec::into_parts: تقسیم Vec به قسمتهاVec::from_parts: ایجاد Vec از قسمتهاcore::mem::size_of_val_raw: اندازهگیری خام مقدار در حافظهی هستهcore::mem::align_of_val_raw: همترازی خام مقدار در حافظهی هستهتخصیص طرح برای مقدار خامرشته از UTF-8 با از دست دادن مالکیتتبدیل خطای UTF-8 به رشته با از دست دادن UTF-8Iterator ادغام شده برای گام به گام برایتنظیم زمان فایل با std::fsتنظیم زمان فایل بدون دنبال کردن با std::fs
سایر تغییرات
بررسی همه چیز که تغییر کرده استزنگ, بارووکلیپی.
مساهمین در 1.99.0
بسیاری از افراد برای ایجاد Rust 1.99.0 با هم آمدند. ما بدون همه شما نمیتوانستیم این کار را انجام دهیم.متشکریم!