Aller plus loin

L’écosystème asynchrone de Rust est vaste et en expansion rapide. Voici quelques suggestions de ressources à explorer pour en savoir plus :

  • Ce chapitre doit beaucoup au petit e-book Asynchronous Programming in Rust, que je vous encourage à lire en entier plutôt que de vous contenter de mon résumé.
  • tokio est loin d’être le seul runtime asynchrone disponible, même si c’est le plus populaire.
    • Du côté des runtimes généralistes, vous pourriez aussi essayer async-std et smol.
    • Pour plus de tolérance aux pannes, bastion pourrait vous intéresser.
    • Si vous faites de l’embarqué, les tâches asynchrones sont une alternative assez populaire à l’utilisation d’un OS embarqué complet. Voir par exmeple embassy.
    • Et si vous avez affaire à une de ces bibliothèques qui vous embêtent à fournir des fonctions asynchrones alors que vous voulez écrire du code synchrone, l’implémentation block_on() la plus minimale que vous pouvez trouver est probablement pollster.
  • Les programmes qui exécutent des tâches indépendantes de façon concurrente tendent à produire des logs difficiles à lire, où les événements associés à différentes tâches sont entrelacés. La crate tracing tente de rendre les logs plus faciles à interpréter grâce à une approche de logging plus structurée.
  • Les runtimes comme tokio ne vous fournissent que des entrées/sorties bas niveau, comme le TcpStream de la bibliothèque standard. A plus haut niveau, vous pourriez essayer…
    • hyper pour communiquer en HTTP, en combinaison avec une implémentation TLS comme rustls pour le HTTPS.
    • Des surcouches spécialisées de hyper comme reqwest si vous voulez juste faire des requêtes ou axum si vous voulez écrire un serveur web.
    • tokio-uring si vous voulez essayer la nouvelle interface io-uring du noyau linux, qui permet de faire des entrées/sorties disque asynchrones aussi efficaces que les entrées/sorties réseau asynchrones.