Rust 1.47 бағдарламалау тілі шығарылымы

жарияланды жүйелік бағдарламалау тілінің 1.47 шығарылымы тот, Mozilla жобасымен құрылған. Тіл жад қауіпсіздігіне назар аударады, жадты автоматты басқаруды қамтамасыз етеді және қолданбай жоғары тапсырма параллелизміне қол жеткізу құралын ұсынады қоқыс жинағыш и жұмыс уақыты (орындау уақыты стандартты кітапхананың негізгі инициализациясы мен қызмет көрсетуіне дейін төмендейді).

Rust жадты автоматты басқаруы көрсеткіштерді басқару кезіндегі қателерді жояды және жад аймағын босатқаннан кейін қол жеткізу, нөлдік көрсеткіш сілтемелері, буфердің асып кетуі және т.б. сияқты төмен деңгейлі жад манипуляциясынан туындайтын мәселелерден қорғайды. Кітапханаларды тарату, құрастыруды қамтамасыз ету және жоба бойынша тәуелділіктерді басқару үшін пакет менеджері әзірленуде. жүк. Хост кітапханалары үшін репозиторийге қолдау көрсетіледі crates.io.

басты инновациялар:

  • Түрлерге қолдау көрсетілді массивтер кез келген өлшем. Бұрын барлық бүтін мәндер үшін жалпы функцияларды анықтау мүмкін болмағандықтан, стандартты кітапхана тек өлшемі 32 элементке дейінгі массивтер үшін кірістірілген белгілерді қолдауды қамтамасыз етті (әр өлшемге арналған белгілер статикалық түрде анықталған). Тұрақты генериктердің («const generics») функционалдығын құрудың арқасында кез келген массив өлшемі үшін жалпы функцияларды анықтау мүмкін болды, бірақ олар компиляторда іске асырылғанымен және олар тұрақты тіл мүмкіндіктеріне әлі қосылмаған. қазір қатысты кез келген өлшемдегі массив белгілері үшін стандартты кітапханада.

    Мысалы, Rust 1.47 нұсқасындағы келесі құрылым массивтің мазмұнын басып шығарады, бірақ бұрын ол қатеге әкелетін еді:

    fn main() {
    xs = [0; 34];

    println!("{:?}", xs);
    }

  • Төтенше жағдайлардағы қысқа іздерді (backtrace) шығаруды қамтамасыз етеді. Көптеген жағдайларда қызығушылық тудырмайтын, бірақ нәтижені бұзатын және мәселенің негізгі себептерінен назар аударатын элементтер ізден шығарылады. Толық ізді қайтару үшін "RUST_BACKTRACE=full" айнымалы ортасын пайдалануға болады. Мысалы, код үшін

    fn main() {
    дүрбелең!();
    }

    Бұрын із 23 кезеңде шығарылса, енді ол қысқартылады
    Мәнді бірден түсінуге мүмкіндік беретін 3 қадам:

    'main' ағыны "анық дүрбелеңге" үрейленді, src/main.rs:2:5
    стек кері ізі:
    0: std::panicking::begin_panic
    /rustc/d…d75a/library/std/src/panicking.rs:497 мекенжайында
    1: ойын алаңы:: негізгі
    ./src/main.rs:2 мекенжайында
    2: core::ops::function::FnOnce::call_once
    /rustc/d…d75a/library/core/src/ops/function.rs:227 мекенжайында

  • Rustc компиляторы құрастыру үшін жаңартылды LLVM 11 (Тот пайдаланады LLVM сервері ретінде кодты генерациялау). Сонымен бірге, 8 нұсқасына дейінгі ескі LLVM құрылғыларымен құру мүмкіндігі сақталады, бірақ әдепкі бойынша (ішінде rust-lang/llvm-project) қазір LLVM 11 нұсқасын пайдалануда. LLVM 11 алдағы күндері шығарылады деп күтілуде.
  • Windows платформасында rustc компиляторы “-C control-flow-guard” жалаушасы арқылы белсендірілген басқару ағынының тұтастығын тексеруді (Control Flow Guard) қосуға қолдау көрсетеді. Басқа платформаларда бұл жалау әзірше еленбейді.
  • API интерфейстерінің жаңа бөлігі тұрақты санатқа, соның ішінде тұрақтандырылған санатқа ауыстырылды
    Ident::new_raw,
    Ауқым:: бос,
    RangeInclusive::is_empty,
    Нәтиже::as_deref,
    Нәтиже::as_deref_mut,
    Vec :: ағып кету,
    көрсеткіш::offset_from,
    f32::ТАУ және
    f64::ТАУ.

  • Оны тұрақты мәндердің орнына кез келген контексте пайдалану мүмкіндігін анықтайтын «const» атрибуты әдістерде қолданылады:
    • нөлден басқа барлық бүтін сандар үшін жаңа;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub және saturating_mul барлық бүтін сандар үшін;
    • is_ascii_alphabetic, is_ascii_upppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitescirrol және iscontrols for as.
  • FreeBSD үшін қатысты FreeBSD 11.4 құралдар жинағы (FreeBSD 10 LLVM 11 нұсқасын қолдамайды).

Ақпарат көзі: opennet.ru

пікір қалдыру