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