Kutolewa kwa lugha ya programu ya kutu 1.64

Lugha ya programu ya madhumuni ya jumla Rust 1.64, iliyoanzishwa na mradi wa Mozilla lakini sasa imeendelezwa chini ya ufadhili wa shirika huru lisilo la faida la Rust Foundation, imetolewa. Lugha inazingatia usimamizi salama wa kumbukumbu na hutoa njia za kufikia usawa wa juu wa kazi huku ikiepuka matumizi ya mtoaji wa takataka na wakati wa kukimbia (muda wa kukimbia umepunguzwa kuwa uanzishaji wa kimsingi na matengenezo ya maktaba ya kawaida).

Mbinu za utunzaji wa kumbukumbu za kutu huokoa msanidi programu kutokana na hitilafu wakati wa kuendesha viashiria na kulinda dhidi ya matatizo yanayotokea kutokana na utunzaji wa kumbukumbu wa kiwango cha chini, kama vile kufikia eneo la kumbukumbu baada ya kuachiliwa, kuondoa marejeleo ya viashiria visivyofaa, utiririshaji wa bafa, n.k. Ili kusambaza maktaba, kutoa miundo na kudhibiti utegemezi, mradi huunda msimamizi wa kifurushi cha Cargo. Hazina ya crates.io inatumika kwa kupangisha maktaba.

Usalama wa kumbukumbu hutolewa katika Rust wakati wa kukusanya kupitia kukagua marejeleo, kufuatilia umiliki wa kitu, kufuatilia muda wa maisha ya kitu (wigo), na kutathmini usahihi wa ufikiaji wa kumbukumbu wakati wa utekelezaji wa nambari. Kutu pia hutoa ulinzi dhidi ya mafuriko kamili, inahitaji uanzishaji wa lazima wa maadili tofauti kabla ya matumizi, hushughulikia makosa vyema katika maktaba ya kawaida, hutumia dhana ya marejeleo yasiyobadilika na vigeu kwa chaguo-msingi, hutoa uchapaji thabiti wa tuli ili kupunguza makosa ya kimantiki.

Ubunifu kuu:

  • Mahitaji ya mazingira ya Linux katika mkusanyaji, kidhibiti cha kifurushi cha Cargo na maktaba ya kawaida ya libstd yameongezwa - mahitaji ya chini ya Glibc yameongezwa kutoka toleo la 2.11 hadi 2.17, na kinu cha Linux kutoka toleo la 2.6.32 hadi 3.2. Vizuizi pia vinatumika kwa utekelezaji wa programu ya Rust iliyojengwa na libstd. Vifaa vya usambazaji RHEL 7, SLES 12-SP5, Debian 8 na Ubuntu 14.04 vinakidhi mahitaji mapya. Usaidizi wa RHEL 6, SLES 11-SP4, Debian 7 na Ubuntu 12.04 hautatumika. Watumiaji wanaotumia vitekelezo vilivyoundwa na kutu katika mazingira yenye kerneli ya zamani ya Linux wanahimizwa kuboresha mifumo yao, kusalia kwenye matoleo ya zamani ya kikusanyaji, au kudumisha uma wao wenyewe wa libstd na tabaka ili kudumisha uoanifu.

    Miongoni mwa sababu za kukomesha usaidizi kwa mifumo ya zamani ya Linux ni rasilimali chache za kuendelea kudumisha utangamano na mazingira ya zamani. Usaidizi kwa Glibc iliyopitwa na wakati unahitaji matumizi ya zana za urithi wakati wa kuangalia katika mfumo endelevu wa ujumuishaji, licha ya mahitaji yanayoongezeka ya toleo katika LLVM na huduma za ujumuishaji mtambuka. Ongezeko la mahitaji ya toleo la kernel linatokana na uwezo wa kutumia simu za mfumo mpya katika libstd bila hitaji la kudumisha tabaka ili kuhakikisha upatanifu na kokwa kuu.

  • Sifa ya IntoFuture imeimarishwa, ambayo inafanana na IntoIterator, lakini inatofautiana na ya pili kwa kutumia β€œ.wait” badala ya β€œkwa ... katika ...” loops. Ikiunganishwa na IntoFuture, neno kuu la ".await" linaweza kutarajia sio sifa ya Baadaye tu, bali pia aina zingine zozote zinazoweza kubadilishwa kuwa Wakati Ujao.
  • Huduma ya kuchanganua kutu imejumuishwa katika mkusanyiko wa huduma zinazotolewa na matoleo ya Rust. Huduma pia inapatikana kwa usanikishaji kwa kutumia rustup (sehemu ya rustup ongeza kichanganuzi cha kutu).
  • Kidhibiti cha kifurushi cha Cargo kinajumuisha urithi wa nafasi ya kazi ili kuondoa kurudiwa kwa thamani za uga za kawaida kati ya vifurushi, kama vile matoleo ya Rust na URL za hazina. Usaidizi wa kujenga kwa majukwaa kadhaa lengwa mara moja pia umeongezwa (sasa unaweza kubainisha zaidi ya kigezo kimoja katika chaguo la "--lengo").
  • Sehemu mpya ya API imehamishwa hadi kwa kitengo cha uthabiti, ikijumuisha mbinu na utekelezaji wa sifa zimeimarishwa:
    • siku zijazo::IntoFuture
    • nambari::NonZero*::checked_mul
    • nambari::NonZero*::checked_pow
    • nambari::NonZero*::kueneza_mul
    • nambari::NonZero*::kushiba_pow
    • nambari::NonZeroI*::abs
    • nambari::NonZeroI*::checked_abs
    • nambari::NonZeroI*::abs_inayofurika
    • nambari::NonZeroI*::saturating_abs
    • nambari::NonZeroI*::abs_isiyotiwa saini
    • nambari::NonZeroI*::kufunga_abs
    • nambari::NonZeroU*::imechaguliwa_ongeza
    • nambari::NonZeroU*::imeangaliwa_nguvu_ifuatayo_ya_mbili
    • nambari::NonZeroU*::kueneza_ongeza
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • Aina zinazoendana na C, zilizoimarishwa hapo awali katika moduli ya std::ffi, zimeongezwa kwenye msingi na maktaba ya alloc:
    • msingi::ffi::CStr
    • msingi::ffi::FromBytesWithNulError
    • alloc::ffi::CSstring
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • Aina C zilizoimarishwa hapo awali katika std::os::moduli mbichi zimeongezwa kwa moduli za msingi::ffi na std::ffi (kwa mfano, aina za c_uint na c_ulong zimependekezwa kwa aina za uint na ulong C):
    • ffi::c_char
    • ffi::c_mara mbili
    • ffi::c_elea
    • ffi::c_int
    • ffi::c_refu
    • ffi::c_refu
    • ffi::c_schar
    • ffi::c_fupi
    • ffi::c_char
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ufupi
  • Vishikizi vya kiwango cha chini vimeimarishwa kwa matumizi na utaratibu wa Kura (katika siku zijazo imepangwa kutoa API iliyorahisishwa ambayo haihitaji matumizi ya miundo ya kiwango cha chini kama vile Vuta na Bani):

    • siku zijazo::poll_fn
    • kazi:: tayari!
  • Sifa ya "const", ambayo huamua uwezekano wa kuitumia katika muktadha wowote badala ya mara kwa mara, hutumiwa katika kazi ya kipande::kutoka_raw_parts.
  • Ili kuhifadhi data kwa ushikamanifu zaidi, mpangilio wa kumbukumbu wa miundo ya Ipv4Addr, Ipv6Addr, SocketAddrV4 na SocketAddrV6 imebadilishwa. Kunaweza kuwa na suala la uoanifu na vifurushi vya crate moja vinavyotumia std::mem::transmute kwa upotoshaji wa kiwango cha chini wa miundo.
  • Muundo wa mkusanyiko wa kutu kwa jukwaa la Windows hutumia uboreshaji wa PGO (uboreshaji unaoongozwa na wasifu), ambayo ilifanya iwezekane kuongeza utendaji wa utungaji wa msimbo kwa 10-20%.
  • Mkusanyaji ametekeleza onyo jipya kuhusu sehemu ambazo hazijatumiwa katika miundo fulani.

Zaidi ya hayo, unaweza kutambua ripoti ya hali ya maendeleo ya utekelezaji mbadala wa mkusanyaji wa lugha ya Rust, iliyotayarishwa na mradi wa gccrs (GCC Rust) na kuidhinishwa kujumuishwa katika GCC. Baada ya kuunganisha sehemu ya mbele, zana za kawaida za GCC zinaweza kutumika kukusanya programu katika lugha ya Rust bila hitaji la kusakinisha kikusanya rustc, kilichojengwa kwa kutumia maendeleo ya LLVM. Maadamu uendelezaji unaendelea, na ukizuia matatizo yoyote yasiyotarajiwa, eneo la Rust litaunganishwa katika toleo la GCC 13 lililopangwa kufanyika Mei mwaka ujao. Utekelezaji wa GCC 13 wa Rust utakuwa katika hali ya beta, bado haujawezeshwa kwa chaguomsingi.

Chanzo: opennet.ru

Kuongeza maoni