检查 C 中的 OCaml 类型签名

发布于 2024-11-28 20:51:20 字数 441 浏览 1 评论 0原文

假设我有一个 OCaml 函数

let _ = register "cbf_coh_insert" (fun k v -> print_endline ("Inserted key=" ^ k ^ " value=" ^ v))

,这是一个带有两个参数的函数。在 C 端,我会用 caml_callback2(*caml_named_value("cbf_coh_insert"), k, v); 来调用它。在 C 端,有没有办法检查参数数量(本例中为 2)是否匹配?除了我猜想调用它并试图捕获 SIGSEGV 之外。谢谢!

更新一些背景

Let's say I have an OCaml function

let _ = register "cbf_coh_insert" (fun k v -> print_endline ("Inserted key=" ^ k ^ " value=" ^ v))

That is a function that takes two arguments. On the C side, I would call that with caml_callback2(*caml_named_value("cbf_coh_insert"), k, v);. Is there a way, on the C side, to check that the number of arguments (2 in this case) match? Other than I guess calling it and trying to trap a SIGSEGV. Thanks!

UPDATE: some background.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

挖鼻大婶 2024-12-05 20:51:20

NO WAI

这应该在编译时确保(手动或通过代码生成或通过解析和检查 C 和 OCaml 代码是否同步)

UPDATE

示例寄存器函数:

let on_cbf_coh_insert (f : string -> string -> unit) = register "cbf_coh_insert" f

UPDATE

我希望能够将闭包/let 绑定直接传递到 C 中。

您为什么认为这是不可能的?查看始终执行此操作的现有绑定。

顺便说一句,这个问题完美地说明了XY问题

NO WAI

This should be ensured at compile time (either manually or by code generation or by parsing and checking whether C and OCaml code are in sync)

UPDATE

Example register function :

let on_cbf_coh_insert (f : string -> string -> unit) = register "cbf_coh_insert" f

UPDATE

I wish it was possible to pass a closure/let binding straight into C.

Why do you think it is not possible? Look at existing bindings that do this all the time.

BTW This question is a perfect illustration for XY problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文