• [^] # Re: Et en plus

    Posté par (site web personnel) . En réponse au lien Java is becoming more like Rust, and I am here for it!. Évalué à 6.

    S'arrêter proprement c'est relâcher les resources que l'on a acquise (file descriptor, socket, ...) avant l'arrêt effectif. Ou plus communément appelé : "graceful shutdown".

    Si ton serveur derrière le socket s'attend à ce que tu lui envoie goodbye avant de fermer le socket, c'est pas l'OS qui va le faire pour toi.

    Par contre en Rust pour générer un pannic! il faut normalement faire un ".unwrap()" ou quelque chose de cet ordre.

    Oue, il faudrait avoir fait un peu de Rust en fait avant de parler de Rust.

    La fonction .unwrap() existe pour les types Result<T, E> et Option<T>. Elle génère effectivement un panic! si le Result<T, E> contient Err(E), ou si le Option<T> contient None.

    De la même manière, Result<T, E> a une fonction .unwrap_err() qui génère un panic! si le Result<T, E> contient Ok(T).

    C'est pas inné au langage, c'est un design d'API. Un autre design c'est que toutes les allocations faites par la stdlib génèrent un panic! si l'allocation échoue, à savoir notamment :

    • Box::new(...)
    • Vec::push(...)
    • etc...

    Note qu'il existe aussi Box::try_new(...) qui au lieu de générer un panic! va retourner un Result<T, E> avec Ok(Box<T>) ou Err(OutOfMemory). Et bien sûr, équivalent pour toutes fonctions allouant de la mémoire.

    Mais tout ça, c'est au delà de ce que je disais, à savoir :

    Il n'y a aucune différence entre panic! et :

    void *p = malloc(size);
    if (p == NULL) {
     abort(...);
    }

    https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg