rilascio 1.45 del linguaggio di programmazione di sistema , sviluppato da Mozilla. Il linguaggio è focalizzato sulla gestione sicura della memoria, offre gestione automatica della memoria e fornisce strumenti per raggiungere un elevato parallelismo nell'esecuzione dei compiti, evitando l'uso del garbage collector e .
La gestione automatica della memoria in Rust libera lo sviluppatore da errori durante la manipolazione dei puntatori e protegge da problemi derivanti da un lavoro a basso livello con la memoria, come l'accesso alla memoria dopo che è stata liberata, la dereferenziazione di puntatori nulli, l'uscita dai limiti del buffer, ecc. Per la distribuzione delle librerie, l'assicurazione della build e la gestione delle dipendenze, è in fase di sviluppo un gestore di pacchetti , che consente di ottenere le librerie necessarie per il programma con un clic. Per l'hosting delle librerie è supportato il repository .
Principali :
- Risolto un problema di lunga data fptoui , в которых имеется одна существенная особенность — неопределённое поведение, если результирующее значение не умещается в целевой тип. Например, при преобразовании вещественного значения 300 с типом f32 в целый тип u8 результат непредсказуем и может отличаться на разных системах. Проблема в том, что подобная особенность проявляется в коде, не помеченном как «unsafe».
A partire da Rust 1.45, il comportamento in caso di overflow del tipo è rigorosamente regolamentato e l'operazione di conversione «as» esegue un controllo per l'overflow, portando il valore convertito al massimo o al minimo valore del tipo di destinazione (nel caso sopra citato, il valore 300 verrà convertito in 255). Per disabilitare tali controlli, sono previste chiamate API aggiuntive «{f64, f32}::to_int_unchecked», che operano in modalità unsafe.
fn cast(x: f32) -> u8 {
x as u8
}fn main() {
let too_big = 300.0;
let too_small = -100.0;
let nan = f32::NAN;let x: f32 = 1.0;
let y: u8 = unsafe { x.to_int_unchecked() };println!(«too_big_casted = {}», cast(too_big)); // in output 255
println!(«too_small_casted = {}», cast(too_small)); // in output 0
println!(«not_a_number_casted = {}», cast(nan)); // in output 0
} - Stabilizzato l'uso , simili a funzioni, in espressioni, schemi e affermazioni. In precedenza, tali macro potevano essere richiamate non ovunque, ma solo in parti specifiche del codice (con una chiamata separata, non mescolata con altro codice). L'estensione dei modi per richiamare macro simili a funzioni era una delle necessità per garantire il funzionamento del web framework nelle versioni stabili di Rust. In precedenza, per ottenere un'ulteriore flessibilità nella definizione dei gestori in Rocket era necessaria l'attivazione della funzionalità sperimentale «proc_macro_hygiene», non disponibile nelle versioni stabili di Rust. Ora, questa funzionalità è integrata nelle versioni stabili del linguaggio.
- È consentito l'uso di intervalli con il tipo «char» per l'iterazione sui valori dell'intervallo (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):
for ch in ‘a’..=’z’ {
print!(«{}», ch);
}
println!(); // Sarà stampato «abcdefghijklmnopqrstuvwxyz» - È stata tradotta una nuova serie di API in una versione stabile, tra cui sono state stabilizzate
Arc::as_ptr,
BTreeMap::remove_entry,
Rc::as_ptr,
rc::Weak::as_ptr,
rc::Weak::from_raw,
rc::Weak::into_raw,
str::strip_prefix,
str::strip_suffix,
sync::Weak::as_ptr,
sync::Weak::from_raw,
sync::Weak::into_raw,
char::UNICODE_VERSION,
Span::resolved_at,
Span::located_at,
Span::mixed_site,
unix::process::CommandExt::arg0. - Nel compilatore rustc è stata aggiunta la possibilità di sovrascrivere varie funzionalità della piattaforma target tramite il flag «target-feature», ad esempio, «-C target-feature=+avx2,+fma». Sono stati inoltre aggiunti nuovi flag:
«force-unwind-tables» per generare tabelle di chiamata «sviluppate» (unwind), indipendentemente dalla strategia di gestione degli errori; «embed-bitcode» per controllare l'inclusione del bitcode LLVM nelle rlibs generate. Il flag «embed-bitcode» è attivato di default in Cargo per ottimizzare i tempi di compilazione e l'uso dello spazio su disco. - È fornito un terzo livello di supporto per le piattaforme mipsel-sony-psp e thumbv7a-uwp-windows-msvc. Il terzo livello implica supporto di base, ma senza test automatizzati e pubblicazione di build ufficiali.
Inoltre, si può notare per la creazione del più semplice in linguaggio Rust, avviato tramite un bootloader di sistema e pronto per l'avvio autonomo invece del sistema operativo.
L'articolo è il primo di una serie dedicata alla dimostrazione delle tecniche richieste nella programmazione di basso livello e nello sviluppo di sistemi operativi.
Fonte: opennet.ru
