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.