Rust 1.58 Programméiersprooch Fräisetzung

D'Verëffentlechung vun der allgemenger Zweck Programméierungssprooch Rust 1.58, gegrënnt vum Mozilla-Projet, awer elo ënner der Regie vun der onofhängeger Asbl Rust Foundation entwéckelt, gouf publizéiert. D'Sprooch konzentréiert sech op Erënnerung Sécherheet, stellt automatesch Erënnerung Gestioun, a stellt d'Mëttel fir eng héich Aufgab parallelism ze erreechen ouni e Gerempels Sammelstécker oder Runtime benotzen (Runtime ass reduzéiert op Basis initialization an Ënnerhalt vun der Standard Bibliothéik).

D'automatesch Erënnerungsmanagement vum Rust eliminéiert Feeler beim Manipulatioun vun Pointer a schützt géint Probleemer déi aus der Manipulatioun vun der Gedächtnis op engem nidderegen Niveau entstinn, sou wéi Zougang zu enger Erënnerungsregioun nodeems se befreit gouf, Null Pointer-Dereferenzen, Pufferiwwerschlag, etc. Fir Bibliothéiken ze verdeelen, Assemblée ze garantéieren an Ofhängegkeeten ze managen, entwéckelt de Projet de Cargo Package Manager. De crates.io Repository gëtt ënnerstëtzt fir Bibliothéiken ze hosten.

Haaptinnovatiounen:

  • A Linn Formatéierungsblocken, zousätzlech zu der virdru verfügbarer Fäegkeet fir Variabelen explizit no enger Zeil no Nummer an Numm z'ersetzen, gëtt d'Fäegkeet fir arbiträr Identifizéierer ze ersetzen andeems den Ausdrock "{Identifier}" op d'Linn bäigefüügt gëtt. Zum Beispill: // Virdrun ënnerstëtzt Konstruktiounen: println!("Moien, {}!", get_person()); println!("Moien, {0}!", get_person()); println!("Hallo, {person}!", person = get_person()); // elo kënnt Dir loosse Persoun spezifizéieren = get_person (); println!("Moien, {persoun}!");

    Identifizéierer kënnen och direkt an Formatéierungsoptioune spezifizéiert ginn. loossen (Breet, Präzisioun) = get_format(); fir (Numm, Partitur) an get_scores () { println! ("{Numm}: {Score: Breet$.precision$}"); }

    Déi nei Ersatz funktionnéiert an all Makroen déi Stringformat Definitioun ënnerstëtzen, mat Ausnam vum "Panik!" an den 2015 an 2018 Versioune vun der Rust Sprooch, an där Panik!("{ident}") als reguläre String behandelt gëtt (am Rust 2021 funktionéiert d'Ersatz).

  • D'Behuele vum std :: process :: Kommandostruktur op der Windows Plattform gouf geännert sou datt wann Dir Kommandoen aus Sécherheetsgrënn ausféiert, net méi no ausféierbar Dateien am aktuellen Verzeichnis sicht. Den aktuellen Verzeechnes ass ausgeschloss well et ka benotzt ginn fir béiswëlleg Code auszeféieren wann Programmer an net zouverléissege Verzeichnisser lafen (CVE-2021-3013). Déi nei ausführbar Detektiounslogik beinhalt d'Sich no de Rust Verzeichnisser, d'Applikatiounsverzeechnes, de Windows Systemverzeechnes an d'Verzeichnisser, déi an der PATH Ëmfeldvariabel spezifizéiert sinn.
  • D'Standardbibliothéik huet d'Zuel vun de Funktiounen markéiert "#[must_use]" erweidert fir eng Warnung auszeginn wann de Retourwäert ignoréiert gëtt, wat hëlleft Feeler z'identifizéieren déi verursaacht ginn andeems Dir unhuelen datt eng Funktioun Wäerter ännert anstatt en neie Wäert zréckzeginn.
  • En neien Deel vun der API gouf an d'Kategorie vum Stall geplënnert, dorënner d'Methoden an d'Implementatioune vun de Charaktere goufen stabiliséiert:
    • Metadaten::is_symlink
    • Wee :: ass_symlink
    • {integer}::saturating_div
    • Optioun :: unwrap_unchecked
    • Resultat :: unwrap_unchecked
    • Resultat::unwrap_err_unchecked
  • Den Attribut "const", wat d'Méiglechkeet bestëmmt et an all Kontext ze benotzen anstatt Konstanten, gëtt a Funktiounen benotzt:
    • Dauer :: nei
    • Dauer::checked_add
    • Dauer :: saturating_add
    • Dauer::checked_sub
    • Dauer :: saturating_sub
    • Dauer::checked_mul
    • Dauer::saturating_mul
    • Dauer::checked_div
  • Erlaabt Oflehnung vun "*const T" Zeiger am "const" Kontext.
  • Am Cargo Package Manager ass d'rust_version Feld op d'Package Metadaten bäigefüügt, an d'Optioun "--message-format" gouf op de Kommando "cargo install" bäigefüügt.
  • De Compiler implementéiert Ënnerstëtzung fir den CFI (Control Flow Integrity) Schutzmechanismus, deen d'Kontrollen virun all indirekten Uruff bäidréit fir e puer Formen vun ondefinéiert Verhalen z'entdecken, déi potenziell zu enger Verletzung vun der normaler Ausféierungsuerdnung (Kontrollfloss) féieren kënnen als Resultat vun der Benotzung vun Ausnotzen déi Pointer änneren, déi an der Erënnerung gespäichert sinn op Funktiounen.
  • De Compiler huet Ënnerstëtzung fir d'Versioune 5 a 6 vum LLVM Ofdeckungsvergleichsformat bäigefüügt, benotzt fir Codedeckung während Testen ze evaluéieren.
  • Am Compiler ginn d'Ufuerderunge fir d'Mindestversioun vum LLVM op LLVM 12 erhéicht.
  • Den drëtten Niveau vun der Ënnerstëtzung fir d'x86_64-unknown-none Plattform gouf implementéiert. Den drëtten Niveau beinhalt d'Basis Ënnerstëtzung, awer ouni automatiséiert Testen, offiziell Builds ze publizéieren oder ze kontrolléieren ob de Code ka gebaut ginn.

Zousätzlech kënne mir d'Publikatioun vu Microsoft vun der Verëffentlechung vu Rust fir Windows 0.30 Bibliothéiken notéieren, déi Iech erlaben d'Rust Sprooch ze benotzen fir Uwendungen fir de Windows OS z'entwéckelen. De Set enthält zwee Këschtpakete (Windows a Windows-sys), duerch déi Dir op de Win API an Rust Programmer kënnt. Code fir API-Ënnerstëtzung gëtt dynamesch generéiert aus Metadaten, déi d'API beschreiwen, wat Iech erlaabt Ënnerstëtzung net nëmme fir existent Win API-Uriff ëmzesetzen, mee fir Uriff déi an Zukunft optrieden. Déi nei Versioun füügt Ënnerstëtzung fir d'UWP (Universal Windows Platform) Zilplattform an implementéiert d'Handle- an Debug-Typen.

Source: opennet.ru

Setzt e Commentaire