Kutolewa kwa lugha ya programu ya kutu 1.45

iliyochapishwa kutolewa 1.45 ya lugha ya programu ya mfumo Kutu, iliyoanzishwa na mradi wa Mozilla. Lugha inazingatia usalama wa kumbukumbu, hutoa usimamizi wa kumbukumbu kiotomatiki, na hutoa zana za kufikia ulinganifu wa juu wa kazi bila kutumia mtoza taka na. Runtime.

Udhibiti wa kumbukumbu otomatiki wa Rust huondoa hitilafu wakati wa kuchezea viashiria na hulinda dhidi ya matatizo yanayotokana na upotoshaji wa kumbukumbu wa kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, vielekezo visivyofaa vya vielelezo, utiririshaji wa bafa, n.k. Kidhibiti kifurushi kinatayarishwa ili kusambaza maktaba, kuhakikisha kukusanya na kudhibiti utegemezi wa mradi. Cargo, ambayo hukuruhusu kupata maktaba unayohitaji kwa programu hiyo kwa mbofyo mmoja. Hifadhi inaauniwa kwa kupangisha maktaba crates.io.

kuu ubunifu:

  • Imeondolewa kwa muda mrefu dosari wakati wa kufanya ubadilishaji kati ya nambari kamili na nambari za sehemu zinazoelea. Kwa kuwa mkusanyaji wa Rust hutumia LLVM kama njia ya nyuma, shughuli za ubadilishaji wa aina zilifanywa kupitia maagizo ya nambari ya kati ya LLVM kama vile fptoui, ambazo zina kipengele kimoja muhimu - tabia isiyobainishwa ikiwa thamani inayotokana hailingani na aina inayolengwa. Kwa mfano, wakati wa kubadilisha thamani ya kuelea 300 na aina f32 hadi aina kamili ya u8, matokeo hayatabiriki na yanaweza kutofautiana kwenye mifumo tofauti. Shida ni kwamba kipengele hiki kinaonekana katika msimbo ambao haujaalamishwa kama "si salama".

    Kufikia Kutu 1.45, tabia ya kufurika kwa ukubwa wa aina inadhibitiwa madhubuti, na operesheni ya ubadilishaji "kama" hukagua kufurika na kulazimisha thamani kubadilishwa hadi kiwango cha juu au cha chini cha thamani ya aina inayolengwa (kwa mfano hapo juu, thamani ya 300 itabadilishwa kuwa 255). Ili kuzima ukaguzi kama huo, simu za ziada za API "{f64, f32}::to_int_unchecked" hutolewa, zikifanya kazi katika hali isiyo salama.

    fn cast(x: f32) -> u8 {
    x kama u8
    }

    fn kuu() {
    let too_big = 300.0;
    acha pia_ndogo = -100.0;
    acha nan = f32::NAN;

    acha x: f32 = 1.0;
    acha y: u8 = si salama {x.to_int_unchecked()};

    println!("too_big_casted = {}", cast(too_big)); // matokeo 255
    println!("too_small_casted = {}", cast(too_small)); // matokeo 0
    println!("not_a_number_casted = {}", cast(nan)); // matokeo 0
    }

  • Tumia imetulia macros ya utaratibumisemo, violezo, na kauli zinazofanana na kazi. Hapo awali, macros vile haikuweza kuitwa kila mahali, lakini tu katika sehemu fulani za kanuni (kama simu tofauti, haijaunganishwa na kanuni nyingine). Kupanua jinsi macros inaweza kuitwa, sawa na kazi, ilikuwa moja ya mahitaji ya kufanya mfumo wa wavuti kufanya kazi. Roketi katika matoleo thabiti ya Rust. Hapo awali, kufikia unyumbufu zaidi katika kufafanua vishikilizi katika Rocket kulihitaji kuwezesha kipengele cha majaribio kinachoitwa "proc_macro_hygiene", ambacho hakipatikani katika matoleo thabiti ya Rust. Utendaji huu sasa umejengwa katika matoleo thabiti ya lugha.
  • Inaruhusiwa kutumia masafa yenye aina ya "char" ili kusisitiza juu ya thamani za masafa (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    kwa ch katika 'a'..='z' {
    chapa!("{}", ch);
    }
    chapa!(); // Itachapisha "abcdefghijklmnopqrstuvwxyz"

  • Sehemu mpya ya API imehamishiwa kwenye aina thabiti, ikiwa ni pamoja na kuimarishwa
    Safu::kama_ptr,
    BTreeMap::ondoa_ingizo,
    Rc::kama_ptr,
    rc:: Dhaifu:: kama_ptr,
    rc:: Dhaifu::kutoka_mbichi,
    rc::Ddhaifu::ndani_mbichi,
    str::strip_kiambishi awali,
    str::kiambishi_kifupi,
    kusawazisha::Hafifu::kama_ptr,
    kusawazisha::Dhifu::kutoka_mbichi,
    kusawazisha::Ddhaifu::ndani_mbichi,
    char::UNICODE_VERSION,
    Muda::imetatuliwa_saa,
    Muda::iko_saa,
    Span::tovuti_iliyochanganywa,
    unix::process::CommandExt::arg0.

  • Kikusanya rustc kimeongeza usaidizi wa kubatilisha vipengele mbalimbali vya jukwaa lengwa kwa kutumia alama ya "kipengele-lengwa", kwa mfano, "-C target-feature=+avx2+fma". Bendera mpya pia zimeongezwa:
    "force-unwind-tables" ili kuzalisha majedwali ya simu za kutuliza, bila kujali mkakati wa kushughulikia ajali; "embed-bitcode" ili kudhibiti ikiwa bitcode ya LLVM imejumuishwa katika rlibs zinazozalishwa. Alama ya "embed-bitcode" imewashwa kwa chaguomsingi katika Cargo ili kuboresha muda wa ujenzi na matumizi ya nafasi ya diski.

  • Kiwango cha tatu cha usaidizi kimetolewa kwa majukwaa ya mipsel-sony-psp na thumbv7a-uwp-windows-msvc. Ngazi ya tatu inahusisha usaidizi wa kimsingi, lakini bila kupima kiotomatiki na uchapishaji wa miundo rasmi.

Kwa kuongeza, inaweza kuzingatiwa hadithi kuhusu kuunda rahisi zaidi programu kwa lugha ya Rust, kuanzia kutumia bootloader ya mfumo na tayari kwa upakiaji wa kujitegemea badala ya mfumo wa uendeshaji.
Makala ni ya kwanza katika mfululizo unaojitolea kwa kuonyesha mbinu ambazo zinahitajika katika programu ya kiwango cha chini na maendeleo ya OS.

Chanzo: opennet.ru

Kuongeza maoni