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
变量设置为空字符串或单个下划线("_"
)将禁用缓存。