16个重大版本发布

0.17.0 2024年2月21日
0.15.1 2023年12月12日
0.13.0 2023年10月5日
0.11.0 2023年6月5日
0.1.0 2021年7月6日

#573数据结构

Download history 44/week @ 2024-03-11 18/week @ 2024-03-18 22/week @ 2024-04-01 6/week @ 2024-04-22 17/week @ 2024-04-29 38/week @ 2024-05-06 23/week @ 2024-05-13 24/week @ 2024-05-20 59/week @ 2024-05-27 34/week @ 2024-06-03 53/week @ 2024-06-10 33/week @ 2024-06-17 11/week @ 2024-06-24

131 每月下载量
用于 3 crate

MIT/Apache

560KB
10K SLoC

任意宽度整数

这个crate集合形成了一个具有分离存储和功能结构的整数库,手动控制位宽,以及与位宽相关的操作。不是有一个具有所有分配和功能能力的单一结构,而是有3种存储类型来管理分配:InlAwiExtAwiAwi。存在一个通用的 Bits 引用类型,用于管理固定宽度算术功能。大多数对 Bits 的操作都是 const,没有分配。由 InlAwi 支持的 Bits 可以在编译时和在 no-std 运行时执行大整数算术,而无需任何分配器。由 ExtAwi 支持的 Bits 可以在运行时使用动态位宽。 Awi 具有容量和廉价的位宽调整大小。如果函数完全用 Bits 来编写,则可以使用它们的 Deref<Target = Bits> 实现,将任何 InlAwiExtAwiAwi 的组合用作该函数的参数。

还包括一个用于定点数的泛型 FP 结构,目前为其添加更多功能正在进行中。将来,Awi 也应该能够像传统的大整数库一样具有自动调整大小的功能。

BitsInlAwiawint_core 包提供。 ExtAwiAwiFPawint_ext 包提供。这种分离的原因是为了提供给 no-stdno-alloc 用例最大的灵活性。 ExtAwi 不在 awint_core 的功能标志下,因为如果一个无 alloc 项目的确依赖于 awint_coreawint_macros(它需要 ExtAwi),则标志将激活 awint_core 的公共编译。 awint_macros 包是一个 proc-macro 包,包含多个构建工具。 awint_dag 包提供了一种将 awint 类型用作组合逻辑的 DSL(领域特定语言)的方法。 awint 包将这些接口一起编译,并根据这些功能标志启用或禁用系统的不同部分。

  • "const_support" 开启了需要许多函数进行 const 的夜间功能。
  • "alloc" 开启了需要分配器的部分。
  • "std" 开启了需要 std 的部分。
  • "dag" 开启了 awint_dag
  • "try_support" 开启了 dag::Optiondag::Result 完全工作所需的一些功能。
  • "debug" 开启了一些开发者功能。
  • "rand_support" 开启了不带默认功能的 rand_core 的依赖。
  • "serde_support" 开启了不带默认功能的 serde 的依赖。
  • "zeroize_support" 开启了不带默认功能的 zeroize 的依赖。

注意:默认情况下,“std” 和 “try_support” 是开启的,使用 default-features = false 并选择特定的功能以更具体。

注意:截至 Rust 1.70,如果您尝试使用带有宏的 "const_support",可能会得到奇怪的 "erroneous constant used" 和 "deref_mut" 错误,除非您将以下所有内容添加到使用宏的所有 crate 根中。

#![feature(const_trait_impl)]
#![feature(const_mut_refs)]
#![feature(const_option)]

所有 使用宏的 const 上下文中的 crate 根中。

注意:从 Rust 1.70 的一些版本开始,"const_support" 在夜间版本中不幸地损坏(见 https://github.com/AaronKutch/awint/issues/19)。

计划中的功能

这些目前尚未实现,因为其他正在优先考虑的发展和改进。如果您希望更快地实现这些功能,请提出问题或 PR。

  • 我们需要一个宏来优化我们的内联样式函数中的 2 输入、1 输出函数。基本的内联赋值函数可以具有虚拟对应物(例如,x.add_(y) 有一个替代的 z = x.add(y)z = x + y),并且该宏优化存储创建和路由。
  • awint_dag 中的模拟原语添加一些缺失的函数。
  • 还有许多事情可以使用 awint_dag 来做。
  • FP 添加更多函数。
  • 某种匹配宏
  • Awi 添加传统的整数库函数。
  • 如果可能,将Karatsuba算法作为const添加到乘法中,或者将fast_mul函数添加到awint_ext中
  • 更好的字符串序列化和反序列化性能。大多数基本数值函数已经得到了很好的优化,但与可能达到的性能相比,序列化性能目前非常差。
  • 将自定义分配器参数添加到ExtAwi
  • 某些格式化和序列化特质的实现需要更多的工作。
  • 使"const_support"在稳定版本中可编译。这些crate中使用的几乎每个不稳定特性都是一种const特性,并有望很快得到稳定。

依赖关系

约450–670KB
约13K SLoC