13个版本

0.2.9 2023年10月7日
0.2.7 2023年2月4日
0.2.4 2022年10月20日
0.2.2 2022年5月18日
0.2.1 2022年3月4日

#68FFI

Download history 19/week @ 2024-03-11 9/week @ 2024-03-18 44/week @ 2024-04-01 17/week @ 2024-04-08 4/week @ 2024-04-15 20/week @ 2024-04-22 126/week @ 2024-04-29 15/week @ 2024-05-06 26/week @ 2024-05-13 15/week @ 2024-05-20 64/week @ 2024-05-27 24/week @ 2024-06-03 33/week @ 2024-06-10 22/week @ 2024-06-17 38/week @ 2024-06-24

每月下载量 126
3 个crate中使用(直接使用2个)

MIT/Apache

2MB
69K SLoC

wstp

Crates.io License Documentation

API文档 | 变更日志 | 贡献

绑定到Wolfram符号传输协议(WSTP)

该crate提供了一组安全且易于使用的WSTP库绑定,用于在程序之间传输Wolfram语言表达式。

快速示例

将一个表达式写入回环Link,然后从相同的链接对象读取它

use wstp::Link;

fn example() -> Result<(), wstp::Error> {
    let mut link = Link::new_loopback()?;

    // Write the expression {"a", "b", "c"}
    link.put_function("System`List", 3)?;
    link.put_str("a")?;
    link.put_str("b")?;
    link.put_str("c")?;

    // Read back the expression, concatenating the elements as we go:
    let mut buffer = String::new();

    for _ in 0 .. link.test_head("System`List")? {
        buffer.push_str(link.get_string_ref()?.as_str())
    }

    assert_eq!(buffer, "abc");

    Ok(())
}

example();

将表达式 "hello!" 从一个Link端点传输到另一个端点

use wstp::Protocol;

let (mut a, mut b) = wstp::channel(Protocol::SharedMemory).unwrap();

a.put_str("hello!").unwrap();
a.flush().unwrap();

assert_eq!(b.get_string().unwrap(), "hello!");

有关使用WSTP链接的示例,请参阅wolfram-library-link,以将表达式传输到和从LibraryLink函数中。

构建 wstp

wstp 库使用 wolfram-app-discovery 来定位包含合适 WSTP SDK 复制的本地 Wolfram 语言安装。如果无法找到 WSTP SDK,wstp 将无法构建。

如果您已将 Wolfram 语言安装到 wolfram-app-discovery 所不知的位置,您可以通过设置 WOLFRAM_APP_DISCOVERY 环境变量手动指定安装位置。有关详细信息,请参阅 配置 wolfram-app-discovery

开发者笔记

有关向 wstp 库贡献时执行常见开发任务的说明,请参阅 Development.md

有关在 Wolfram 语言新版本发布时保持 wstp 更新的说明,请参阅 Maintenance.md

许可证

根据您的选择,许可协议为以下之一

注意:由 wstp 库链接的 WSTP 库的许可受 MathLink 许可协议 条款的约束。

贡献

除非您明确声明,否则您根据 Apache-2.0 许可证定义的任何旨在包含在作品中的有意贡献,将根据上述许可协议双重许可,不附加任何额外条款或条件。

有关更多信息,请参阅 CONTRIBUTING.md

依赖项

~0.5–4MB
~60K SLoC