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 在 数据结构
131 每月下载量
用于 3 crate
560KB
10K SLoC
任意宽度整数
这个crate集合形成了一个具有分离存储和功能结构的整数库,手动控制位宽,以及与位宽相关的操作。不是有一个具有所有分配和功能能力的单一结构,而是有3种存储类型来管理分配: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" 错误,除非您将以下所有内容添加到使用宏的所有 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