#定点 # #数字 #过程宏 #领域特定语言 #工具 #awint

awint_macro_internals

为 awint 系统的 crate 提供内部宏工具

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 日

#237 in Rust 模式

Download history 55/week @ 2024-03-11 25/week @ 2024-03-18 37/week @ 2024-04-01 11/week @ 2024-04-22 15/week @ 2024-04-29 39/week @ 2024-05-06 30/week @ 2024-05-13 38/week @ 2024-05-20 71/week @ 2024-05-27 41/week @ 2024-06-03 62/week @ 2024-06-10 43/week @ 2024-06-17 21/week @ 2024-06-24

168 次每月下载
6 个 crate (3 个直接使用) 中使用

MIT/Apache

270KB
5.5K SLoC

任意宽度的整数

这个 crate 系统共同构成了一个具有独立存储和功能结构的库,支持手动控制位宽和位宽相关操作。而不是一个具有所有分配和功能能力的结构,这里有 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 用例提供最大灵活性。由于如果无 alloc 的项目同时依赖于 awint_coreawint_macros(它需要 ExtAwi),则标志会激活 awint_core 的公共编译,因此 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 上下文的所有库根中。

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

依赖项

~740KB
~13K SLoC