12个版本
0.2.10 | 2023年8月28日 |
---|---|
0.2.9 | 2023年2月4日 |
0.2.7 | 2022年9月19日 |
0.2.6 | 2022年8月29日 |
0.1.2 | 2022年2月9日 |
#874 在 过程宏 中
每月 160 次下载
在 2 个crate中(通过 wolfram-library-link)使用
18KB
281 行
wolfram-library-link
API文档 | 变更日志 | 贡献
到Wolfram LibraryLink接口的绑定,使得从Wolfram语言调用Rust代码成为可能。
此库用于编写可以被Wolfram LibraryLink函数家族加载的Rust程序,特别是通过 LibraryFunctionLoad[]
。
特性
- 从Wolfram代码中高效调用Rust函数。
- 在Rust代码和Wolfram代码之间传递任意Wolfram表达式。
- 从Rust代码中评估Wolfram表达式。
- 在Rust代码中响应Wolfram 终止 请求。
- 使用
wstp
crate提供的Wolfram符号传输协议的安全API。
按照 快速入门 指南开始使用 wolfram-library-link
。
请参阅 为什么选择Rust? 了解Rust在编写用于Wolfram语言的原生代码时的优势概述:性能、内存和线程安全、高级特性等。
快速示例
本节中的示例使用两个连续的代码块编写。第一个展示了 Rust 代码,第二个展示了加载和使用相关 Rust 函数所需的 Wolfram 语言代码。
基本数据类型
use wolfram_library_link::export;
#[export]
fn square(x: i64) -> i64 {
x * x
}
square = LibraryFunctionLoad["...", "square", {Integer}, Integer];
square[5]
高效数值数组
在 Wolfram 语言中创建一个包含一百万个整数的数组,并使用 Rust 计算总数
use wolfram_library_link::{export, NumericArray};
#[export]
fn total(array: &NumericArray<i64>) -> i64 {
array.as_slice().into_iter().sum()
}
total = LibraryFunctionLoad[
"...",
"square",
{LibraryDataType[NumericArray, "Integer64"]},
Integer
];
total[NumericArray[Range[1000000], "Integer64"]]
参见:NumericArray
,LibraryDataType
示例程序
wolfram-library-link/examples 子目录包含演示 wolfram-library-link
API 功能的示例程序。
Rust 代码 | Wolfram 语言代码 | 演示... |
---|---|---|
basic_types.rs | BasicTypes.wlt | 如何编写使用基本、原生类型(如整数、浮点实数和字符串)高效传递的 Rust LibraryLink 函数。 |
numeric_arrays.rs | NumericArrays.wlt | 如何使用 NumericArray 数据类型高效地传递大型的、多维的、具有统一数值数据的数组。 |
wstp.rs | WSTP.wlt | 如何使用 WSTP Link 将任意表达式传递到和从 LibraryLink 函数中。 |
aborts.rs | Aborts.wlt | 如何让 Rust 代码响应 Wolfram 中止请求。 |
async_file_watcher.rs | AsyncExamples.wlt | 如何让 Rust 代码生成异步事件,触发 Wolfram 评估以处理该事件。 |
managed.rs | ManagedExpressions.wlt | 如何使用管理表达式 API 在 Wolfram 表达式释放时释放库数据。 |
data_store.rs | DataStore.wlt | 如何使用 DataStore 数据类型高效地传递由原生 LibraryLink 数据类型组成的任意表达式类异构结构。 |
原始函数
这些示例演示了如何编写使用“原始”低级 LibraryLink 和 WSTP 接口的函数,使用 extern "C"
ABI、低级 MArgument
和 WSLINK
类型以及手动 WSTP 操作。
Rust 代码 | Wolfram 语言代码 |
---|---|
raw_librarylink_function.rs 和 raw_wstp_function.rs | RawFunctions.wlt |
其他示例
除了经过抛光的顶层示例之外,wolfram-library-link/examples/tests/ 目录还包含更广泛的范围的功能和行为测试代码,可能是一个有用的附加参考。在 RustLink/Tests/ 目录中包含加载和调用测试函数的 Wolfram 语言单元测试逻辑。
构建 wolfram-library-link
wolfram-library-link
依赖于 wstp
crate,用于将 Wolfram 符号传输协议(WSTP)的绑定。构建 wstp
crate 需要 WSTP SDK 的访问权限,该 SDK 提供了 WSTP 静态库。 wstp
使用 wolfram-app-discovery
来定位包含合适 WSTP SDK 的 Wolfram 语言本地安装。如果找不到 WSTP SDK,wstp
将无法构建,因此 wolfram-library-link
也会失败。
如果您将 Wolfram 语言安装在了 wolfram-app-discovery
所不知的位置,可以通过设置 WOLFRAM_APP_DIRECTORY
环境变量来手动指定安装位置。有关详细信息,请参阅 配置 wolfram-app-discovery。
相关链接
相关 crate
wstp
— Wolfram 符号传输协议的绑定,用于在程序之间传递任意 Wolfram 表达式。wolfram-expr
— Wolfram 语言表达式的本地 Rust 表示。wolfram-app-discovery
— 定位本地 Wolfram 应用和 Wolfram 语言的实用工具。
相关文档
- Wolfram LibraryLink 用户指南
- 介绍 C++ 和 Wolfram 语言与 LibraryLinkUtilities,这是围绕 LibraryLink API 的 C++ 包装器。
许可证
许可方式任选其一
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
注意:通过 wstp crate 链接的 WSTP 库的许可受 MathLink 许可协议 条款约束。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的您提交给作品中的任何有意贡献,均应按上述方式双许可,不附加任何额外条款或条件。
有关更多信息,请参阅 CONTRIBUTING.md。
开发人员说明
有关向 wolfram-library-link
crate 贡献时的常见开发任务说明,请参阅 Development.md。
有关在 Wolfram 语言新版本发布时保持 wolfram-library-link
更新的说明,请参阅 Maintenance.md。
依赖关系
~1.5MB
~35K SLoC