#ocaml #ffi #extension #rust

sys ocaml-sys

Rust的低级OCaml绑定

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开发工具

Download history 2740/week @ 2024-03-14 3415/week @ 2024-03-21 4047/week @ 2024-03-28 4096/week @ 2024-04-04 5061/week @ 2024-04-11 5948/week @ 2024-04-18 6713/week @ 2024-04-25 9323/week @ 2024-05-02 18332/week @ 2024-05-09 20057/week @ 2024-05-16 20716/week @ 2024-05-23 20379/week @ 2024-05-30 11271/week @ 2024-06-06 14296/week @ 2024-06-13 13798/week @ 2024-06-20 11724/week @ 2024-06-27

53,589 每月下载量
4 个crate中使用(2个直接使用)

ISC 许可证

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_VERSIONOCAML_WHERE_PATH,则使用它们的值而不调用 ocamlopt。如果这两个环境变量中的任何一个未定义,则 ocamlopt 将被调用以获取这两个值。

定义 OCAML_VERSIONOCAML_WHERE_PATH 变量对于在 CI 环境中节省时间非常有用,在这些环境中实际上并不需要安装 OCaml(例如,为了运行 clippy)。

功能

  • derive
    • 默认启用,添加 #[ocaml::func]derive 实现,以及 FromValueToValue
  • link
    • 链接原生 OCaml 运行时,这仅在不需要将 OCaml 代码静态链接时使用
  • no-std
    • 允许在 #![no_std] 环境(如 MirageOS)中使用 ocaml

依赖项

~190KB