54 个稳定版本
| 1.6.4 | 2024 年 6 月 5 日 |
|---|---|
| 1.6.2 | 2024 年 1 月 20 日 |
| 1.6.1 | 2023 年 8 月 23 日 |
| 1.6.0 | 2023 年 7 月 30 日 |
| 0.6.0 | 2017 年 2 月 6 日 |
391 在 数学 中排名
11,135 每月下载量
用于 74 个 Crates(直接使用 19 个)
17MB
432K SLoC
包含(autotools 混淆代码,1MB) gmp-6.3.0-c/configure,(autotools 混淆代码,635KB) mpfr-4.2.1-c/configure,(autotools 混淆代码,480KB) mpc-1.3.1-c/configure,(obscure autoconf code,145KB) gmp-6.3.0-c/configure.ac,(obscure autoconf code,36KB) mpfr-4.2.1-c/configure.ac,(obscure autoconf code,8KB) mpc-1.3.1-c/configure.ac)
Rust 对 GMP、MPFR 和 MPC 的低级绑定
gmp-mpfr-sys crate 为以下 GNU 高精度库提供了 Rust FFI 绑定
三个库的源代码包含在包中。
gmp-mpfr-sys crate 是自由软件:您可以在自由软件基金会发布的 GNU 较小通用公共许可证的条款下重新分发和/或修改它,许可证版本为 3 或(根据您的选择)任何后续版本。有关详细信息,请参阅 GNU LGPL 和 GNU GPL 的完整文本。
新增功能
版本 1.6.4 新功能(2024-06-05)
- 意外地从 GNU 库的文档中删除了许可头文件(问题 34)。
版本 1.6.3 新功能(2024-05-30)
- 使用 MinGW 进行交叉编译时,使用 GMP 理解的主机(合并请求 5)。
版本 1.6.2 新功能(2024-01-20)
- 错误修复:使用系统库时,某些情况下构建会失败(问题 32)。
版本 1.6.1 新功能(2023-08-23)
- MPFR 从版本 4.2.0-p12 更新到 4.2.1。
版本 1.6.0 新闻(2023-07-30)
- GMP 从版本 6.2.1 更新到 6.3.0。
- MPFR 从版本 4.2.0-p9 更新到 4.2.0-p12。
其他版本
其他版本的详细信息可以在 RELEASES.md 中找到。
基本功能
该软件包包含三个模块
本软件包发布提供的版本是 GMP 版本 6.3.0,MPFR 版本 4.2.1,以及 MPC 版本 1.3.1。
如果您需要一个高级 API,请考虑使用 Rug,这是一个提供任意精度整数和浮点数的软件包,具有正确的舍入。
Integer是一个任意精度的 big number 整数。Rational是一个任意精度的 big number 有理数。Float是一个正确舍入的多精度浮点数。Complex是一个正确舍入的多精度复数。
名称前缀
由于模块和枚举类型提供了命名空间,C 名称中的大多数前缀都被移除。然而,当前缀不是整个单词时,它不会被移除。例如 mp_set_memory_functions 变为 gmp::set_memory_functions,但 mpz_init 变为 gmp::mpz_init 而不是 gmp::z_init,并且 MPFR_RNDN 在 enum MPFR_RND_T 变为 mpfr::rnd_t::RNDN 而不是 mpfr::rnd_t::N。此外,类型 mpfr::mpfr_t 和 mpc::mpc_t 不 缩短为 mpfr::t 或 mpc::t。
类型
与C库不同,类型 gmp::mpz_t、gmp::mpq_t、gmp::mpf_t、gmp::randstate_t、mpfr::mpfr_t 和 mpc::mpc_t 都被直接定义为结构体,而不是单元素数组。
未记录或过时的函数
这些绑定不包含未记录或过时的函数和宏。
使用 gmp-mpfr-sys
gmp-mpfr-sys 包可在 crates.io 上找到。要在您的包中使用 gmp-mpfr-sys,请在 Cargo.toml 中将其添加为依赖项
[dependencies]
gmp-mpfr-sys = "1.6"
此包需要 rustc 版本 1.65.0 或更高版本。
如果C库有主要版本号的提升,并删除了一些已弃用的函数,但Rust绑定中没有删除功能,那么gmp-mpfr-sys将进行小版本号的提升而不是大版本号的提升。这允许在那些使用Rust绑定但不直接使用C库的包之间有更高的兼容性。
另一方面,如果依赖的包使用了内部实现细节,或者包含了一个直接使用使用C构建的头文件(.h)和库文件(.a),则最好使用版本 "~1.6" 而不是版本 "1.6" 作为依赖,以确保在C级别上也有向后兼容性。
可选功能
gmp-mpfr-sys 包有两个可选功能
GMP库始终包括在内。
两个可选功能默认启用;要选择性地使用功能,您可以将依赖项添加到 Cargo.toml 中,如下所示
[dependencies.gmp-mpfr-sys]
version = "1.6"
default-features = false
features = ["mpfr"]
这里只选择了mpfr功能。
实验性可选功能
如果删除实验性功能,则不会被视为破坏性更改。然而,删除实验性功能将需要小版本号的提升。
实验性功能可能也不适用于所有平台。
有三个实验性功能
use-system-libs,默认禁用。使用此功能,将使用GMP、MPFR和MPC的系统库(如果已启用),而不是从源代码构建它们。系统库的主版本号必须等于包提供的版本,系统库的次版本号必须大于或等于包提供的版本。对于修补版本没有限制。force-cross,默认禁用。如果没有此功能,检测到交叉编译时构建将失败,因为交叉编译未经过测试或不受支持,可能导致难以调试的静默错误,特别是如果这个包是间接依赖项。作为例外,从x86_64编译到i686不需要此功能。(在MinGW上编译没有这个例外,因为MinGW不支持从64位到32位的交叉编译。)c-no-tests,默认禁用。使用此功能将跳过C库的测试。不建议这样做;GMP源代码误编译的风险相当高。如果确实误编译,测试很可能触发由编译器引入的错误。
元数据
gmp-mpfr-sys包将一些元数据传递给其依赖项
DEP_GMP_LIMB_BITS包含每根数位的位数,为32或64。DEP_GMP_OUT_DIR包含一个目录的路径,该目录包含两个子目录:第一个子目录命名为lib,包含生成的库(.a)文件,第二个子目录命名为include,包含相应的头文件(.h)。DEP_GMP_LIB_DIR包含DEP_GMP_OUT_DIR目录的lib子目录的路径。DEP_GMP_INCLUDE_DIR包含DEP_GMP_OUT_DIR目录的include子目录的路径。
依赖项包可以在其构建脚本中使用这些环境变量。
在GNU/Linux上构建
警告:构建系统不支持在包含空格的路径上构建。
要在GNU/Linux上构建,只需确保您的系统已安装diffutils、gcc、m4和make。例如,在Fedora上
sudo dnf install diffutils gcc m4 make
请注意,您可以通过安装clang并设置环境变量CC=clang来在构建crate之前使用Clang代替GCC。
在macOS上构建
警告:构建系统不支持在包含空格的路径上构建。
要在macOS上构建,您需要命令行开发工具。要安装它们,请在终端中运行以下命令
xcode-select --install
在Windows上构建
警告:构建系统不支持在包含空格的路径上构建。
您可以使用Rust GNU工具链和一个最新的MSYS2安装来在Windows上构建。以下是64位环境的某些步骤。(32位:32位环境的更改以如下注释的方式编写。)
安装MSYS2
-
使用安装程序安装MSYS2。
-
从开始菜单启动MSYS2 MinGW 64位终端。(32位:启动MSYS2 MinGW 32位终端。)
-
安装所需的工具。
pacman -S pacman-mirrors pacman -S diffutils m4 make mingw-w64-x86_64-gcc(32位:安装
mingw-w64-i686-gcc代替mingw-w64-x86_64-gcc。)
然后,要构建依赖于此crate的crate
-
从开始菜单启动MSYS2 MinGW 64位终端。(32位:启动MSYS2 MinGW 32位终端。)
-
切换到crate目录。
-
使用
cargo构建crate。
请注意,您可以通过安装mingw-w64-x86_64-clang(32位:mingw-w64-i686-clang)并设置环境变量CC=clang来在构建crate之前使用Clang代替GCC。
交叉编译
虽然可以进行一些交叉编译,但它们不是自动测试的,并且可能无法正常工作。接受改进交叉编译的合并请求。
对于实验性功能force-cross,必须启用交叉编译。有一种情况即使没有此功能也可以允许:当主机和目标之间的唯一区别是主机是x86_64,而目标是i686。
缓存已构建的C库
构建C库可能需要一些时间。为了节省编译时间,构建的库会按照以下方式缓存在用户的缓存目录中
- 在GNU/Linux上:位于
$XDG_CACHE_HOME/gmp-mpfr-sys或$HOME/.cache/gmp-mpfr-sys - 在macOS上:位于
$HOME/Library/Caches/gmp-mpfr-sys - 在Windows上:位于
{FOLDERID_LocalAppData}\gmp-mpfr-sys
若要使用不同的目录,可以将环境变量 GMP_MPFR_SYS_CACHE 设置为所需的缓存目录。将 GMP_MPFR_SYS_CACHE 变量设置为空字符串或单个下划线("_")将禁用缓存。