Rust 1.64 programozási nyelv kiadás

Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.64 általános célú programozási nyelv. A nyelv a memória biztonságára összpontosít, és biztosítja az eszközöket a munka magas párhuzamosságának eléréséhez, miközben elkerüli a szemétgyűjtő és a futási időt (a futásidő a szabványos könyvtár alapvető inicializálására és karbantartására csökken).

A Rust memóriakezelési módszerei megóvják a fejlesztőt a mutatók manipulálása során előforduló hibáktól, és megóvják az alacsony szintű memóriakezelésből adódó problémáktól, mint például a memóriaterület elérése annak felszabadítása után, a nulla mutatók hivatkozásának megszüntetése, a puffertúllépések stb. A programkönyvtárak terjesztéséhez, a buildek biztosításához és a függőségek kezeléséhez a projekt fejleszti a Cargo csomagkezelőt. A crates.io tároló támogatja a könyvtárak tárolását.

A memóriabiztonságot a Rust a fordítási időben biztosítja a referenciaellenőrzés, az objektumok tulajdonjogának nyomon követése, az objektumok élettartamának (hatóköreinek) nyomon követésével és a memória-hozzáférés helyességének értékelésével a kód végrehajtása során. A Rust védelmet nyújt az egész számok túlcsordulása ellen is, megköveteli a változó értékek kötelező inicializálását használat előtt, jobban kezeli a hibákat a szabványos könyvtárban, alapértelmezés szerint alkalmazza a megváltoztathatatlan hivatkozások és változók koncepcióját, erős statikus gépelést kínál a logikai hibák minimalizálása érdekében.

Főbb újítások:

  • A fordítóprogramban, a Cargo csomagkezelőben és a libstd szabványkönyvtárban a Linux környezettel szemben támasztott követelmények megemelkedtek - a Glibc minimális követelményei a 2.11-es verzióról 2.17-re, a Linux kernel esetében pedig a 2.6.32-es verzióról a 3.2-re emelkedtek. A korlátozások a libstd-vel készült Rust-alkalmazás végrehajtható fájljaira is vonatkoznak. Az RHEL 7, SLES 12-SP5, Debian 8 és Ubuntu 14.04 disztribúciós készletek megfelelnek az új követelményeknek. Az RHEL 6, SLES 11-SP4, Debian 7 és Ubuntu 12.04 támogatása megszűnik. Azoknak a felhasználóknak, akik régebbi Linux kernellel rendelkező környezetben Rust-built futtatható fájlokat használnak, javasoljuk, hogy frissítsék rendszereiket, maradjanak a fordító régebbi kiadásainál, vagy tartsák karban saját rétegekkel ellátott libstd forkjukat a kompatibilitás fenntartása érdekében.

    A régebbi Linux rendszerek támogatásának megszüntetésének okai között szerepel a korlátozott erőforrások a régebbi környezetekkel való kompatibilitás fenntartására. Az örökölt Glibc támogatása megköveteli a régi eszközök használatát a folyamatos integrációs rendszerben történő ellenőrzéskor, az LLVM és a keresztfordítási segédprogramok növekvő verziókövetelményei miatt. A kernelverzióra vonatkozó követelmények növekedése annak köszönhető, hogy a libstd-ben új rendszerhívások használhatók anélkül, hogy rétegeket kellene karbantartani a régebbi kernelekkel való kompatibilitás biztosítása érdekében.

  • Az IntoFuture tulajdonságot stabilizálták, amely hasonlít az IntoIteratorra, de abban különbözik az utóbbitól, hogy a "for ... in ..." ciklusok helyett ".await"-et használ. Az IntoFuture-rel kombinálva a ".await" kulcsszó nem csak egy Jövő tulajdonságra számíthat, hanem minden más típusra is, amely jövővé alakítható.
  • A rozsdaelemző segédprogram a Rust kiadásokhoz biztosított segédprogramok gyűjteményében található. A segédprogram rustup (rustup komponens add rust-analyzer) használatával is telepíthető.
  • A Cargo csomagkezelő tartalmazza a munkaterület öröklődését, hogy kiküszöbölje a közös mezőértékek megkettőzését a csomagok között, például a Rust verziók és a tárhely URL-ek között. Emellett több célplatform egyidejű létrehozásának támogatása is (most már több paramétert is megadhat a „--target” opcióban).
  • Az API új része átkerült a stabil kategóriába, beleértve a tulajdonságok módszereit és megvalósításait is:
    • jövő::IntoFuture
    • szám::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • szám::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • szám::NonZeroI*::túlcsorduló_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • szám::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_két
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • A C-kompatibilis típusok, amelyeket korábban az std::ffi modulban stabilizáltak, hozzáadásra kerültek a maghoz és az alloc könyvtárhoz:
    • mag::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CString
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • A korábban az std::os::raw modulban stabilizált C típusok hozzáadásra kerültek a core::ffi és std::ffi modulokhoz (például c_uint és c_ulong típusokat javasoltak az uint és az ulong C típusokhoz):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • Az alacsony szintű kezelők stabilizálásra kerültek a Poll mechanizmussal való használatra (a jövőben a tervek szerint egyszerűsített API-t biztosítanak, amely nem igényli alacsony szintű struktúrák, például Pull and Pin használatát):

    • future::poll_fn
    • feladat::kész!
  • A slice::from_raw_parts függvényben a „const” attribútum, amely meghatározza, hogy konstansok helyett bármilyen környezetben használható legyen.
  • Az adatok kompaktabb tárolása érdekében az Ipv4Addr, Ipv6Addr, SocketAddrV4 és SocketAddrV6 struktúrák memóriaelrendezése megváltozott. Kompatibilitási probléma lehet az olyan egyládás csomagokkal, amelyek az std::mem::transmute parancsot használják a struktúrák alacsony szintű manipulálására.
  • A rozsdafordító Windows platformra való felépítése PGO optimalizálást (profilvezérelt optimalizálás) használ, ami lehetővé tette a kódfordítási teljesítmény 10-20%-os növelését.
  • A fordító új figyelmeztetést vezetett be bizonyos struktúrákban a nem használt mezőkre vonatkozóan.

Ezenkívül megjegyezheti a Rust nyelvi fordító egy alternatív megvalósításának fejlesztéséről szóló állapotjelentést, amelyet a gccrs projekt (GCC Rust) készített, és jóváhagyott a GCC-be való felvételre. A frontend integrálása után a szabványos GCC eszközökkel a Rust nyelven is lefordíthatók a programok anélkül, hogy telepíteni kellene az LLVM fejlesztésekkel épített rustc fordítót. Amíg a fejlesztés jó úton halad, és az előre nem látható problémáktól eltekintve, a Rust frontend beépül a jövő év májusára tervezett GCC 13 kiadásba. A Rust GCC 13 megvalósítása béta állapotú lesz, alapértelmezés szerint még nincs engedélyezve.

Forrás: opennet.ru

Hozzászólás