Tempos de Execução

Um runtime fornece suporte para realizar operações de forma assíncrona (um reator) e é responsável por executar futures (um executor). Rust não tem um runtime “integrado”, mas várias opções estão disponíveis:

  • Tokio: performante, com um ecossistema bem desenvolvido de funcionalidades como Hyper para HTTP ou Tonic para gRPC.
  • async-std: tem como objetivo ser um “std para async”, e inclui um runtime básico em async::task.
  • smol: simples e leve

Várias aplicações maiores têm seus próprios runtimes. Por exemplo, Fuchsia já tem um.

  • Observe que, dos runtimes listados, apenas Tokio é suportado no Rust playground. O playground também não permite nenhum I/O, então a maioria das coisas async interessantes não pode ser executada no playground.

  • As futures são “inertes” no sentido de que elas não fazem nada (nem mesmo iniciam uma operação de I/O) a menos que haja um executor polling. Isso difere das Promises do JS, por exemplo, que serão executadas até o final mesmo que nunca sejam usadas.