Крейт futures_lite
Источник: Документация futures_lite
Фьючерсы, потоки и комбинаторы для асинхронного ввода-вывода.
Описание
Этот крейт представляет собой подмножество futures, который компилируется на порядок быстрее, исправляет мелкие недостатки в его API, заполняет некоторые очевидные пробелы и удаляет почти весь небезопасный код из него.
Короче говоря, этот крейт стремится быть более удобным, чем futures, но при этом полностью совместимым с ним.
API этого крейта намеренно ограничен. Пожалуйста, ознакомьтесь со списком функций для API, которые исключены из этого крейта.
Примеры
use futures_lite::future; fn main() { future::block_on(async { println!("Hello world!"); }) }
Реэкспорты
| Трейт | Модуль | Описание |
|---|---|---|
AsyncBufRead | io | Асинхронное чтение с буферизацией |
AsyncBufReadExt | io | Расширения для AsyncBufRead |
AsyncRead | io | Асинхронное чтение |
AsyncReadExt | io | Расширения для AsyncRead |
AsyncSeek | io | Асинхронный поиск |
AsyncSeekExt | io | Расширения для AsyncSeek |
AsyncWrite | io | Асинхронная запись |
AsyncWriteExt | io | Расширения для AsyncWrite |
Future | future | Базовый трейт для асинхронных вычислений |
FutureExt | future | Расширения для Future |
Stream | stream | Поток значений |
StreamExt | stream | Расширения для 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 - Существующие проекты: При миграции существующего кода
- Расширенные сценарии: Для сложных случаев использования