Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Крейт futures_lite

Источник: Документация futures_lite

Фьючерсы, потоки и комбинаторы для асинхронного ввода-вывода.

Описание

Этот крейт представляет собой подмножество futures, который компилируется на порядок быстрее, исправляет мелкие недостатки в его API, заполняет некоторые очевидные пробелы и удаляет почти весь небезопасный код из него.

Короче говоря, этот крейт стремится быть более удобным, чем futures, но при этом полностью совместимым с ним.

API этого крейта намеренно ограничен. Пожалуйста, ознакомьтесь со списком функций для API, которые исключены из этого крейта.

Примеры

use futures_lite::future;

fn main() {
    future::block_on(async {
        println!("Hello world!");
    })
}

Реэкспорты

ТрейтМодульОписание
AsyncBufReadioАсинхронное чтение с буферизацией
AsyncBufReadExtioРасширения для AsyncBufRead
AsyncReadioАсинхронное чтение
AsyncReadExtioРасширения для AsyncRead
AsyncSeekioАсинхронный поиск
AsyncSeekExtioРасширения для AsyncSeek
AsyncWriteioАсинхронная запись
AsyncWriteExtioРасширения для AsyncWrite
FuturefutureБазовый трейт для асинхронных вычислений
FutureExtfutureРасширения для Future
StreamstreamПоток значений
StreamExtstreamРасширения для Stream

Модули

МодульОписание
futureКомбинаторы для трейта Future
ioИнструменты и комбинаторы для ввода-вывода
preludeТрейты Future, Stream, AsyncRead, AsyncWrite, AsyncBufRead, AsyncSeek и их расширения
streamКомбинаторы для трейта Stream

Макросы

МакросОписание
pinЗакрепляет переменную типа T в стеке и перепривязывает её как Pin<&mut T>
readyРазворачивает Poll<T> или возвращает Pending

Преимущества перед futures

Скорость компиляции

  • На порядок быстрее: Значительно ускоренная компиляция
  • Минимальные зависимости: Меньше зависимостей для компиляции

Улучшения API

  • Исправленные недостатки: Устранены мелкие проблемы оригинального API
  • Заполненные пробелы: Добавлены отсутствующие, но полезные функции
  • Более интуитивный дизайн: Улучшенный пользовательский опыт

Безопасность

  • Минимум unsafe кода: Почти полное отсутствие небезопасного кода
  • Надежность: Повышенная безопасность выполнения

Совместимость

Полная совместимость

  • Интероперабельность: Полная совместимость с крейтом futures
  • Миграция: Легкий переход с futures на futures_lite

Ограниченный API

  • Целевой подход: Только наиболее часто используемые функции
  • Чистота дизайна: Отсутствие перегруженности функциями

Типичное использование

Базовый асинхронный код

#![allow(unused)]
fn main() {
use futures_lite::future;
use futures_lite::stream::StreamExt;

future::block_on(async {
    // Асинхронные операции
});
}

Работа с I/O

#![allow(unused)]
fn main() {
use futures_lite::io::{AsyncReadExt, AsyncWriteExt};
use futures_lite::future;

// Асинхронные операции чтения/записи
}

Потоки данных

#![allow(unused)]
fn main() {
use futures_lite::stream::{self, StreamExt};

let mut stream = stream::iter(vec![1, 2, 3]);
while let Some(item) = stream.next().await {
    println!("{}", item);
}
}

Рекомендации по использованию

Когда использовать futures_lite

  • Новые проекты: Для быстрого старта
  • Производительность компиляции: Когда важна скорость сборки
  • Простота: Для проектов, не требующих полного функционала futures

Когда использовать futures

  • Специфичные функции: При необходимости функций, отсутствующих в futures_lite
  • Существующие проекты: При миграции существующего кода
  • Расширенные сценарии: Для сложных случаев использования