Versió del llenguatge de programació Rust 2021 (1.56)

S'ha publicat el llançament del llenguatge de programació del sistema Rust 1.56, fundat pel projecte Mozilla, però ara desenvolupat sota els auspicis de l'organització independent sense ànim de lucre Rust Foundation. A més del número de versió habitual, el llançament també s'anomena Rust 2021 i marca l'estabilització dels canvis proposats durant els darrers tres anys. Rust 2021 també servirà de base per a la creació de funcions durant els propers tres anys, de manera similar a com la versió Rust 2018 ha estat la base per al desenvolupament del llenguatge durant els últims tres anys.

Per mantenir la compatibilitat, els desenvolupadors poden utilitzar les etiquetes "2015", "2018" i "2021" als seus programes per enllaçar els programes a les parts d'estat de l'idioma corresponents a les edicions Rust seleccionades. Es van introduir revisions per separar els canvis incompatibles i es configuren a les metadades dels paquets de càrrega mitjançant el camp "edició" de la secció "[paquet]". Per exemple, l'edició de 2018 inclou una funcionalitat que es va estabilitzar a finals de 2018 i també cobreix tots els canvis futurs que no infringeixen la compatibilitat. L'edició 2021 també inclou funcions de trencament de compatibilitat proposades a la versió 1.56 actual i aprovades per a la seva implementació en el futur. A més de l'idioma en si, els editors també tenen en compte l'estat de les eines i la documentació.

Les principals incompatibilitats solucionades a Rust 2021 són:

  • Captura separada en tancaments: ara els tancaments poden capturar noms de camp individuals en lloc de l'identificador complet. Per exemple, "|| ax + 1" només capturarà "ax" en lloc de "a".
  • El tret IntoIterator per a matrius: array.into_iter() us permet iterar sobre els elements d'una matriu per valor en lloc de per referència.
  • El processament de les expressions "|" s'ha canviat a macro_rules (operació OR lògica) als patrons - L'especificador ":pat" a les coincidències ara respecta els patrons "A | B".
  • El gestor de paquets de càrrega inclou de manera predeterminada la segona versió del solucionador de funcions, suport per a la qual es va introduir a Rust 1.51.
  • Els trets TryFrom, TryInto i FromIterator s'han afegit al mòdul de biblioteca estàndard del preludi.
  • Les macros panic!(..) i assert!(expr, ..) ara utilitzen sempre format_args!(..) per formatar cadenes, de manera similar a println!().
  • Les expressions ident#, ident"..." i ident'...' estan reservades a la sintaxi de l'idioma.
  • Els avisos bare_trait_objects i ellipsis_inclusive_range_patterns s'han mogut a la categoria d'error.

Nou a Rust 1.56:

  • A Cargo.toml, a la secció "[paquet]", s'ha afegit el camp rust-version, mitjançant el qual podeu determinar la versió mínima admesa de Rust per al paquet crate. Si la versió actual no coincideix amb el paràmetre especificat, Cargo avortarà amb un error.
  • Quan la concordança de patrons utilitza expressions "binding @ pattern", es proporciona suport per especificar enllaços addicionals (per exemple, "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Una nova part de l'API s'ha mogut a la categoria d'estable, inclosos els mètodes i les implementacions de trets s'han estabilitzat:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • String::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • L'atribut "const", que determina la possibilitat d'utilitzar-lo en qualsevol context en lloc de constants, s'utilitza en funcions
    • std::mem::transmute
    • [T]::primer
    • [T]::split_first
    • [T]::últim
    • [T]::split_last
  • El compilador s'ha canviat per utilitzar LLVM versió 13.
  • Suport de nivell 64 implementat per a la plataforma aarch32-apple-ios-sim i suport de nivell XNUMX per a les plataformes powerpc-unknown-freebsd i riscvXNUMXimc-esp-espidf. El tercer nivell implica suport bàsic, però sense proves automatitzades, publicar compilacions oficials i comprovar la capacitat de crear el codi.

Recordem que el llenguatge Rust se centra en la gestió segura de la memòria, proporciona una gestió automàtica de la memòria i proporciona un mitjà per aconseguir un alt paral·lelisme en l'execució de treballs, alhora que prescindeix de l'ús d'un col·lector d'escombraries i temps d'execució (el temps d'execució es redueix a la inicialització bàsica i el manteniment del biblioteca estàndard).

La gestió automàtica de la memòria de Rust estalvia al desenvolupador d'errors en manipular punters i protegeix dels problemes que sorgeixen a causa de la manipulació de la memòria de baix nivell, com ara accedir a una àrea de memòria després d'haver estat alliberada, desreferenciar punters nuls, desbordaments de memòria intermèdia, etc. Per distribuir biblioteques, proporcionar compilacions i gestionar dependències, el projecte desenvolupa el gestor de paquets Cargo. El repositori crates.io és compatible per allotjar biblioteques.

Font: opennet.ru

Afegeix comentari