23 个版本 (13 个破坏性更新)
0.23.0 | 2022年6月6日 |
---|---|
0.22.1 | 2022年3月23日 |
0.22.0 | 2021年5月16日 |
0.20.1 | 2021年3月16日 |
0.14.0 | 2020年7月3日 |
#1053 在 开发工具 中
53,589 每月下载量
在 4 个crate中使用(2个直接使用)
46KB
1K SLoC
ocaml-rs - 在Rust中直接编写的OCaml扩展
ocaml-rs
允许在Rust中直接编写OCaml扩展,无需C占位符。它最初是从 raml 分支出来的,但由于 OCaml 软件基金会 的支持,几乎完全重写。
与OCaml版本 4.10.0
及更高版本兼容
请在 github 上报告任何问题
注意:虽然 ocaml-rs
可以安全使用,但它不能防止广泛的潜在错误或错误。应将其视为现有C API的Rust实现。可以使用 ocaml-interop 来执行安全的OCaml/Rust交互。
文档
入门指南
ocaml-rust-starter 是一个基本示例,可以帮助您开始使用 ocaml-rs
。
在Rust方面,您需要在您的 Cargo.toml
中添加以下内容
ocaml = "*"
或者
ocaml = {git = "https://github.com/zshipko/ocaml-rs"}
对于macOS,您还需要将以下内容添加到项目 .cargo/config
文件中
[build]
rustflags = ["-C", "link-args=-Wl,-undefined,dynamic_lookup"]
这是因为macOS默认不允许动态库中存在未定义的符号。
此外,如果您计划发布到 opam,您需要将Rust依赖项作为供应商,以避免在构建阶段进行网络请求,因为访问crates.io/github将被opam沙箱阻止。为此,您应运行
cargo vendor
然后按照编辑 .cargo/config
的说明进行操作
构建选项
默认情况下,构建 ocaml-sys
将会调用 ocamlopt
命令来获取 OCaml 编译器的版本和位置。有一些环境变量可以用来控制这个过程。
OCAMLOPT
(默认:ocamlopt
)是调用ocamlopt
的命令OCAML_VERSION
(默认:执行$OCAMLOPT -version
的结果)是目标运行时 OCaml 版本。OCAML_WHERE_PATH
(默认:执行$OCAMLOPT -where
的结果)是 OCaml 标准库的路径。OCAML_INTEROP_NO_CAML_STARTUP
(默认:未设置)可以在将ocaml-rs
库加载到 OCaml 字节码运行时(如utop
)时设置,以避免与caml_startup
的链接问题
如果同时设置了 OCAML_VERSION
和 OCAML_WHERE_PATH
,则使用它们的值而不调用 ocamlopt
。如果这两个环境变量中的任何一个未定义,则 ocamlopt
将被调用以获取这两个值。
定义 OCAML_VERSION
和 OCAML_WHERE_PATH
变量对于在 CI 环境中节省时间非常有用,在这些环境中实际上并不需要安装 OCaml(例如,为了运行 clippy
)。
功能
derive
- 默认启用,添加
#[ocaml::func]
和derive
实现,以及FromValue
和ToValue
- 默认启用,添加
link
- 链接原生 OCaml 运行时,这仅在不需要将 OCaml 代码静态链接时使用
no-std
- 允许在
#![no_std]
环境(如 MirageOS)中使用ocaml
- 允许在
依赖项
~190KB