15 次重大发布

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

#503数学 类别中

Download history 71/week @ 2024-03-11 29/week @ 2024-03-18 45/week @ 2024-04-01 1/week @ 2024-04-08 7/week @ 2024-04-15 13/week @ 2024-04-22 26/week @ 2024-04-29 39/week @ 2024-05-06 33/week @ 2024-05-13 41/week @ 2024-05-20 76/week @ 2024-05-27 42/week @ 2024-06-03 65/week @ 2024-06-10 45/week @ 2024-06-17 25/week @ 2024-06-24

每月下载量 178 次
7 包中使用 (3 个直接使用)

MIT/Apache 许可

370KB
6.5K SLoC

任意宽度整数

这些包一起构成了一个具有分离的存储和功能结构的、手动控制位宽和位宽相关操作的整数库。而不是一个具有所有分配和功能能力的结构体,这里有 3 种存储类型来管理分配: InlAwiExtAwiAwi。有一个共同的 Bits 引用类型,用于管理固定宽度算术功能。大多数对 Bits 的操作都是 const,并且没有分配。由 InlAwi 支持的 Bits 可以在编译时和在 no-std 运行时执行大整数算术,而不需要任何分配器。由 ExtAwi 支持的 Bits 可以在运行时使用动态位宽。Awi 具有容量和廉价的位宽调整。如果一个函数完全用 Bits 表达,那么任何混合使用 InlAwiExtAwiAwi 的参数都可以在该函数中使用,这得益于它们的 Deref<Target = Bits> 实现。

还包括一个通用的固定点数 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”错误,除非您将这些添加到

#![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
  • 如果可能,添加一个 const Karatsuba 算法到乘法,或者添加一个 fast_mul 函数到 awint_ext
  • 更好的字符串序列化和反序列化性能。大多数基本数值函数已经得到了很好的优化,但与可能的性能相比,当前的序列化性能非常差。
  • ExtAwi 添加自定义分配器参数
  • 某些格式化和序列化特质的实现需要更多的工作。
  • 使 "const_support" 在稳定版本中编译。这些 crate 所使用的几乎每个不稳定特性都是某种 const 特性,并有望很快得到稳定。

依赖

~225KB