Руст 1.38 Издание за програмски јазик

објавено издавање на системски програмски јазик Рѓа 1.38, основана од проектот Mozilla. Јазикот се фокусира на безбедноста на меморијата, обезбедува автоматско управување со меморијата и обезбедува средство за постигнување висок паралелизам на задачите без користење на собирач на ѓубре или време на работа.

Автоматското управување со меморијата на Rust го ослободува развивачот од манипулација со покажувачот и заштитува од проблеми кои произлегуваат од манипулација со меморијата на ниско ниво, како што се по-слободен пристап до меморијата, дереференции на нула покажувач, пречекорувања на баферот и слично. Се развива менаџер на пакети за дистрибуција на библиотеки, обезбедување на склопување и управување со зависностите од проектот. на товар, овозможувајќи ви да ги добиете библиотеките потребни за програмата со еден клик. Складиштето е поддржано за домаќини на библиотеки каси.io.

Главните иновации:

  • Додаден е режим на компилација со цевковод (pipelined), во кој изградбата на зависен пакет гајба започнува веднаш штом метаподатоците за зависност стануваат достапни, без да се чека да заврши нивната компилација. Кога составувате пакет, не треба да ги соберете сите зависности, само треба да ги дефинирате метаподатоците, кои вклучуваат списоци на типови, зависности и извезени ставки. Метаподатоците се достапни на почетокот на процесот на компилација, така што поврзаните пакети сега можат да се составуваат многу порано. Кога се градат единечни пакети, предложениот режим не влијае на перформансите, но ако изградбата опфаќа пакети со разгранети зависности, целокупното време на градење може да се намали за 10-20%;
  • Обезбедува откривање на неправилна употреба на функциите std::mem::неиницијализиран и std::mem::zeroed. На пример, std::mem::uninicialized е погодно за брзо креирање низи, но го доведува во заблуда компајлерот бидејќи се чини дека е иницијализиран, но во реалноста вредноста останува неиницијализирана. Функцијата mem::uninicialized е веќе означена како застарена и се препорачува наместо тоа да се користи среден тип Можеби Единица. Што се однесува до mem::zeroed, оваа функција може да предизвика проблеми со типови кои не можат да прифатат нула вредности.

    За да помогне да се идентификува недефинираното однесување, новото издание додава проверка на влакненца на компајлерот што открива некои проблеми со mem::uninicialized или mem::zeroed. На пример, сега добивате грешка кога се обидувате да користите mem::uninicialized или mem::zeroed со типови &T и Box‹T›, кои претставуваат објекти на покажувачот што не можат да прифатат нула вредности;

  • Атрибутот „#[застарен]“ е проширен за да дозволи пакетите со сандаци да се означат како застарени и да се планираат за идно бришење. Од Rust 1.38, овој атрибут може да се користи и за макроа;
  • Додадена е можност за користење на атрибутот „#[global_allocator]“ во подмодулите;
  • Додадена функција std:: any::type_name, што ви овозможува да го дознаете името на типот, што може да биде корисно за цели на отстранување грешки. На пример, за време на извршувањето на програмата, можете да дознаете за кој тип е наречена функцијата:

    fn gen_value‹T: Стандардно>() -› T {
    println!("Иницијализирање на инстанца од {}", std::any::type_name::‹T›());
    Стандардно::default()
    }

    fnmain() {
    нека _: i32 = gen_value(); Ќе се испечати # „i32“.
    нека _: Низа = gen_value(); # ќе отпечати „alloc::string::String“
    }

  • Проширени функции на стандардната библиотека:
    • slice::{concat, connect, join} сега може да ја земе вредноста &[T] како додаток на &T;
    • „*const T“ и „*mut T“ сега имплементираат маркер::Откачи;
    • „Arc‹[T]›“ и „Rc‹[T]›“ сега имплементираат FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} сега имплементирајте го DoubleEndedIterator.
    • ascii::EscapeDefault имплементира Clone и Display.
  • Нов дел од API е префрлен во стабилна категорија, вклучувајќи методи кои се стабилизирани
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Времетраење:: as_secs_f{32|64},
    • Времетраење::div_duration_f{32|64},
    • Времетраење::div_f{32|64},
    • Времетраење::from_secs_f{32|64},
    • Времетраење::mul_f{32|64},
    • делење операции со остаток
      div_euclid и rem_euclid за сите примитиви со цели броеви;

  • Додадена е поддршка за специфицирање на опцијата „--features“ повеќекратно за да се овозможат различни функции во менаџерот на карго пакети;
  • Компајлерот обезбедува трето ниво поддршка за целните платформи aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-unknown цели, armlinux7 -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl и riscv32i-unknown-none-elf. Третото ниво вклучува основна поддршка, но без автоматско тестирање и објавување на официјални изданија.

Извор: opennet.ru

Додадете коментар