как оно выглядит не прибегая к выделению в heap в самом executer?
Вот смотрите:
есть функция async foo() {}
компилятор из нее сделает async fn foo() -> impl Future<Output=()> {}
на самом деле я думаю будет что-то типа fn foo() -> CompilerGeneratedFututre {}
Последний вариант подходит для того чтобы не выделять память в heap, но у нас нету(?) информации о реальном типе (CompilerGeneratedFututre).
поэтому нам надо будет делать что-то типа Pin<Box<dyn Future>>
Так все же есть возможность обойтись без heap?
То что мы не знаем тип, не значит что компилятор не знает тип. Фьючи можно вполне себе не боксить и хранить на стеке.
Обсуждают сегодня