#slim #async #future #combinator #map #size #binary

slim-futures

旨在减小二进制文件大小的异步工具

1 个不稳定版本

0.1.0-alpha.02023年1月29日

#567 in 异步

MIT 许可证

350KB
10K SLoC

slim-futures

CI codecov Coverage Status

提供 FutureStream 组合子作为 futures 库的补充,但侧重于小内存占用和小二进制文件大小。

优势

  • 占用内存最小。
  • 一些组合子比其 futures 对应物具有更少的内部状态,这有利于二进制文件大小。
  • 支持更多 Try 类型,而不仅仅是 Result 类型。
  • 提供异步和同步版本的组合子,其中异步版本有 _async 后缀。
  • 提供 futures 库未实现的其他组合子。

劣势

  • 组合子不支持 FnOnce 函数。
  • 除非它是免费的,否则组合子不实现 FusedFutureFusedStream
  • 某些组合子要求用户提供一个方法,通过可变引用来获取对值的所有权。例如,AsyncIteratorExt::slim_fold_by*组合子要求用户指定一种方法从未来中提取值,可以是通过CopyClone::clonemem::take或某些用户提供的函数。
  • 目前,项目处于早期阶段,API尚未稳定,实现尚未完全验证,请谨慎使用。

以下是slim-futures提供的组合子列表及其futures对应物。

slim-futures futures 注意
AsyncIteratorExt::slim_all
AsyncIteratorExt::slim_all_async StreamExt::all
AsyncIteratorExt::slim_and_then
AsyncIteratorExt::slim_and_then_async TryStreamExt::and_then
AsyncIteratorExt::slim_any
AsyncIteratorExt::slim_any_async StreamExt::any
AsyncIteratorExt::slim_filter
AsyncIteratorExt::slim_filter_async StreamExt::filter
AsyncIteratorExt::slim_filter_map
AsyncIteratorExt::slim_filter_map_async StreamExt::filter_map
AsyncIteratorExt::slim_find
AsyncIteratorExt::slim_find_async
AsyncIteratorExt::slim_find_map
AsyncIteratorExt::slim_find_map_async
AsyncIteratorExt::slim_flat_map
AsyncIteratorExt::slim_flat_map_async StreamExt::flat_map
AsyncIteratorExt::slim_flatten StreamExt::flatten
AsyncIteratorExt::slim_fold_by*
AsyncIteratorExt::slim_fold_async_by* StreamExt::fold
AsyncIteratorExt::slim_for_each
AsyncIteratorExt::slim_for_each_async StreamExt::for_each
AsyncIteratorExt::slim_fuse StreamExt::fuse
AsyncIteratorExt::slim_inspect StreamExt::inspect
AsyncIteratorExt::slim_map StreamExt::map
AsyncIteratorExt::slim_map_async StreamExt::then
AsyncIteratorExt::slim_map_err TryStreamExt::map_err
AsyncIteratorExt::slim_map_err_async
AsyncIteratorExt::slim_map_ok TryStreamExt::map_ok
AsyncIteratorExt::slim_map_ok_async
AsyncIteratorExt::slim_map_while
AsyncIteratorExt::slim_map_while_async
AsyncIteratorExt::slim_or_else
AsyncIteratorExt::slim_or_else_async TryStreamExt::or_else
AsyncIteratorExt::slim_reduce
AsyncIteratorExt::slim_reduce_async
AsyncIteratorExt::slim_scan
AsyncIteratorExt::slim_scan_async StreamExt::scan
AsyncIteratorExt::slim_skip_while
AsyncIteratorExt::slim_skip_while_async StreamExt::skip_while
AsyncIteratorExt::slim_take_while
AsyncIteratorExt::slim_take_while_async StreamExt::take_while
AsyncIteratorExt::slim_try_fold_by*
AsyncIteratorExt::slim_try_fold_async_by* TryStreamExt::try_fold 遵循Iterator::try_fold
AsyncIteratorExt::slim_try_for_each
AsyncIteratorExt::slim_try_for_each_async TryStreamExt::try_for_each 遵循Iterator::try_for_each
AsyncIteratorExt::slim_zip StreamExt::zip
FutureExt::slim_and_then
FutureExt::slim_and_then_async TryFutureExt::and_then
FutureExt::slim_err_into TryFutureExt::err_into
FutureExt::slim_flatten FutureExt::flatten
FutureExt::slim_flatten_async_iter FutureExt::flatten_stream
FutureExt::slim_inspect FutureExt::inspect
FutureExt::slim_inspect_err TryFutureExt::inspect_err
FutureExt::slim_inspect_ok TryFutureExt::inspect_ok
FutureExt::slim_into_option_future
FutureExt::slim_into_result_future
FutureExt::slim_into_try_future
FutureExt::slim_map FutureExt::map
FutureExt::slim_map_async FutureExt::then
FutureExt::slim_map_err TryFutureExt::map_err
FutureExt::slim_map_err_async
FutureExt::slim_map_into FutureExt::map_into
FutureExt::slim_map_ok TryFutureExt::map_ok
FutureExt::slim_map_ok_async
FutureExt::slim_map_ok_or_else TryFutureExt::map_ok_or_else
FutureExt::slim_map_ok_or_else_async
FutureExt::slim_never_error FutureExt::never_error
FutureExt::slim_ok_into TryFutureExt::ok_into
FutureExt::slim_or_else
FutureExt::slim_or_else_async TryFutureExt::or_else
FutureExt::slim_raw_map_ok_or_else_async
FutureExt::slim_try_flatten TryFutureExt::try_flatten
FutureExt::slim_try_flatten_err
FutureExt::slim_unit_error FutureExt::unit_error
FutureExt::slim_unwrap_or_else TryFutureExt::unwrap_or_else
FutureExt::slim_unwrap_or_else_async
err_by* err
lazy lazy
ok_by* ok
raw_select
ready_by* ready
select_either
try_select_either

依赖

~750KB
~15K SLoC