#bits #require #numbers #integer #maximum #awint #awi

awint_internals

crates 的 awint 系统的内部工具

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日

编码 中排名第 1514

Download history 8/week @ 2024-04-08 20/week @ 2024-04-15 20/week @ 2024-04-22 35/week @ 2024-04-29 43/week @ 2024-05-06 38/week @ 2024-05-13 51/week @ 2024-05-20 83/week @ 2024-05-27 48/week @ 2024-06-03 74/week @ 2024-06-10 52/week @ 2024-06-17 31/week @ 2024-06-24 34/week @ 2024-07-01 62/week @ 2024-07-08 89/week @ 2024-07-15 130/week @ 2024-07-22

每月下载量 320
10 crates 中使用(直接使用 2 个)

MIT/Apache

45KB
793

任意宽度整数

这个 crate 系统一起形成了一个具有分离的存储和功能结构的、手动控制位宽、位宽相关操作的库。而不是一个具有所有分配和功能能力的单一结构,有三个存储类型来管理分配: 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" 错误,除非您将以下所有内容添加到您在 const 上下文中使用宏的所有包根。

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

添加到 所有 使用宏的包根

注意:从大约 1.70 版本的某些 Rust 版本开始,遗憾的是,“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 算法,或者向 awint_ext 添加一个 fast_mul 函数。
  • 更好的字符串序列化和反序列化性能。大多数基本数值函数都得到了很好的优化,但与可能的性能相比,当前的序列化性能非常差。
  • ExtAwi 添加自定义分配器参数。
  • 某些格式化和序列化特征实现需要更多工作。
  • 使 "const_support" 在稳定版中可编译。这些crate使用的几乎每个不稳定功能都是某种 const 功能,并有望很快稳定。

依赖项