Rust 1.68

Par:
fredericmazue

lun, 13/03/2023 - 15:43

L'équipe de développement annoncé la disponibilité de Rust 1.68. Cette nouvelle version apporte principalement le protocole de registre 'Sparse' de Cargo stabilisé et une construction Pin locale.

Protocole Sparse de cargo

Ce protocole a été stabilisé pour la lecture de l'index des caisses. Le protocole git précédent (qui est toujours la valeur par défaut) clone un référentiel qui indexe toutes les caisses disponibles dans le registre, mais cela a commencé à atteindre les limites de mise à l'échelle, avec des retards notables lors de la mise à jour de ce référentiel, souligne l'équipe de Rust. Le nouveau protocole devrait apporter une amélioration significative des performances lors de l'accès à crates.io, car il ne téléchargera que des informations sur le sous-ensemble de caisses que vous utilisez réellement.

Construction Pin locale

La nouvelle macro pin! construit un Pin<&mut T> à partir d'une expression T, capturée anonymement dans l'état local.  Ceci est souvent appelé épinglage de pile (stack-pinning), mais cette "pile" peut également être l'état capturé d'une async fn ou d'un block. Voici un exemple d'utilisation :

/// Runs a future to completion.
fn block_on<F: Future>(future: F) -> F::Output {
    let waker_that_unparks_thread = todo!();
    let mut cx = Context::from_waker(&waker_that_unparks_thread);
    // Pin the future so it can be polled.
    let mut pinned_future = pin!(future);
    loop {
        match pinned_future.as_mut().poll(&mut cx) {
            Poll::Pending => thread::park(),
            Poll::Ready(result) => return result,
        }
    }
}

Dans cet exemple, le future original sera déplacé dans une variable temporaire local, référencé par le nouveau pinned_future avec le type Pin<&mut F>,