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 :
[^] # Re: Et en plus
Posté par David Delassus (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
goodbyeavant de fermer le socket, c'est pas l'OS qui va le faire pour toi.Oue, il faudrait avoir fait un peu de Rust en fait avant de parler de Rust.
La fonction
.unwrap()existe pour les typesResult<T, E>etOption<T>. Elle génère effectivement unpanic!si leResult<T, E>contientErr(E), ou si leOption<T>contientNone.De la même manière,
Result<T, E>a une fonction.unwrap_err()qui génère unpanic!si leResult<T, E>contientOk(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(...)Note qu'il existe aussi
Box::try_new(...)qui au lieu de générer unpanic!va retourner unResult<T, E>avecOk(Box<T>)ouErr(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 :https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg