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
每月下载量 320
在 10 个 crates 中使用(直接使用 2 个)
45KB
793 行
任意宽度整数
这个 crate 系统一起形成了一个具有分离的存储和功能结构的、手动控制位宽、位宽相关操作的库。而不是一个具有所有分配和功能能力的单一结构,有三个存储类型来管理分配: InlAwi、ExtAwi 和 Awi。有一个通用的 Bits 引用类型来管理固定宽度算术功能。大多数 Bits 操作都是 const 的,没有分配。由 InlAwi 支持的 Bits 可以在编译时和在 no-std 运行时执行大整数算术,无需任何分配器。由 ExtAwi 支持的 Bits 可以在运行时使用动态位宽。具有容量和低成本的位宽调整的 Awi。如果一个函数完全用 Bits 来编写,那么可以使用它们的 Deref<Target = Bits> 实现,将任何 InlAwi、ExtAwi 和 Awi 的组合作为该函数的参数。
还包括一个用于定点数的泛型 FP 结构,目前对它的功能添加是工作进行中。将来,Awi 也应该能够像传统的大整数库一样具有自动调整大小的功能。
Bits 和 InlAwi 由 awint_core 包提供。ExtAwi、Awi 和 FP 由 awint_ext 包提供。这种分离的原因是为了提供给 no-std 和 no-alloc 用例最大的灵活性。ExtAwi 不在 awint_core 的功能标志下,因为如果一个无 alloc 项目依赖于 awint_core 和 awint_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::Option和dag::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添加传统的大整数库函数 - 如果可能,向乘法添加一个
constKaratsuba 算法,或者向awint_ext添加一个fast_mul函数。 - 更好的字符串序列化和反序列化性能。大多数基本数值函数都得到了很好的优化,但与可能的性能相比,当前的序列化性能非常差。
- 向
ExtAwi添加自定义分配器参数。 - 某些格式化和序列化特征实现需要更多工作。
- 使 "const_support" 在稳定版中可编译。这些crate使用的几乎每个不稳定功能都是某种
const功能,并有望很快稳定。