【问题标题】:How to best expose ocaml library to other languages?如何最好地将 ocaml 库暴露给其他语言?
【发布时间】:2014-10-16 14:32:57
【问题描述】:

有多种交换语言 - json 等 - 提供了快速可靠地将数据导出和解析为通用格式的能力。这是语言之间的福音,为此有Piqi,它基本上为您定义的任何类型生成可解析的交换格式;它使编写锅炉代码的过程自动化(编写读取某些交换信息并构建某种任意类型实例的函数)。基本上,迄今为止最好的选择是协议缓冲区,如果我沿着 ocaml-rpc 的路线走,我绝对希望使用协议缓冲区。

如果有一些声明性模式来管理函数公开​​,那就太好了,这样就可以通过某种介质访问 ocaml 库(如 RPC,或将函数映射到带有参数编码的 url)。

想象一下将图书馆作为一项服务提供;您不想或不能在每对语言之间进行实际绑定的地方。但是服务器和数据解析已经写好了……那难道没有办法将两者结合起来,只需要指定应该公开哪些功能以及在哪里/如何公开?

最后,在我看来,protocol buffers 是一种可以快速编码/解码数据的机制,但不是传输机制……是否有某种 ocaml-RPC 规范或某些 ocaml RPC 库?是否有各种 RPC 协议(并且,如果我尝试使用 diff 协议将两种语言相互指向,则会失败)?此外,等待和接收 RPC 调用的服务器机制(可能)是另一个模块(?)

我该如何实现?

【问题讨论】:

    标签: ocaml saas


    【解决方案1】:

    为了更新这一点,piqi 项目下的最新努力旨在生成一个有效的 OCaml RPC 服务。由此,在视觉上,很容易指定在 RPC 服务端公开哪些功能,并且客户端的目标功能选择应该允许一些机械化设施来允许选择这些公开的功能。

    目前,这个 ocaml 的 RPC 系统促进了语言间的数据交换,这些数据可以通过使用 proto-buffers 被解析器重构;它正在开发中,仍然是being discussed here

    【讨论】:

      【解决方案2】:

      我认为ocaml-rpc 库适合您的要求。它可以推断序列化函数,还可以生成客户端和服务器代码。有趣的是,他们使用 OCaml 作为 IDL 语言。例如,这是rpc函数的定义:

      external rpc2 : ?opt:string -> variant -> unit = ""
      

      从中可以推断出服务器和客户端的函数化代码,这些代码将负责传输数据的编组和解组,因此您只需要使用纯 OCaml 数据类型。

      这个库的问题是它几乎没有文档记录,所以你可能会发现它很难使用。

      另外,据我所知,您正在处理 BAP,我想提请您注意一个新的 BAP 1.x,它很快就会准备好,它会有绑定,可以调用它来自任何语言,尽管目前我们主要针对 python。

      【讨论】:

      • @AdamMiller,我已经改变了我的答案,因为现在我了解您的要求。希望对您有所帮助。
      • 啊伙计,bap 1.x?我想帮助并将我的代码发布到 piqi 和 bap 中以实现适当的模块化,但我已经使用 piqi 来提供服务 bap。现在是为其他人发布它的问题。有什么我可以贡献的吗?
      • 当然,我们总是欢迎贡献,例如拉取请求,或者只是通过我们的问题跟踪器提出请求或建议。
      猜你喜欢
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多