将 Erlang 与 C++ 集成
存在哪些接口可以将 Erlang 与 C++ 结合起来?
What interfaces exist to tie Erlang with C++?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
存在哪些接口可以将 Erlang 与 C++ 结合起来?
What interfaces exist to tie Erlang with C++?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
本机实现的函数:在最新的 Erlang/OTP 版本中可用,允许您可以用 C 实现任何函数。
端口驱动程序:您可以将 C 代码链接到 Erlang VM,并使用 port_command 访问它。
C 节点:使用 ei 库,您可以模仿虚拟机并与您的虚拟机对话。使用 Erlang 分发格式的 Erlang VM。
Native implemented functions: available in the latest Erlang/OTP version, allows you to implement any of your functions in C.
Port drivers: you can link a C code to the Erlang VM, and access it using port_command.
C Nodes: With the ei library you can mimic a VM and talk to your Erlang VMs using the Erlang distribution format.
据我所知,Erlang 与 C++ 直接交互的最接近的方法是 EPAPI。当然,它依赖于 Erlang 发行版标准的久经考验的 C
erl_interface
。The closest thing I know for interfacing Erlang with C++ directly is EPAPI. Of course it relies on the tried and tested C
erl_interface
that comes standard with the Erlang distribution.对于 Zed 的出色回答,我会添加
open_port()
。它允许您启动外部程序并使用其标准输入和输出从 Erlang 与其进行通信。你可以像 Unix 管道一样使用它,通过提供 {line, L} 选项,或者还有长度前缀的 {packet, N} 选项,我发现它更安全、更高效。与 NIF 和端口驱动程序相比,它的优点是您的 Erlang 代码与 C 代码完全隔离。 C 程序可以破坏自己的堆栈、双重释放内存块、进入无限循环等等。这些都不会阻止你的 Erlang 代码。最坏的情况是,如果事情进展不顺利,您可以关闭 Erlang 端口并重新打开它。
To Zed's excellent answer, I would add
open_port()
. It lets you start an external program and communicate with it from Erlang using its standard in and out. You can use it like Unix pipes by giving the {line, L} option, or there's also the length-prefixed {packet, N} option which I find to be safer and more efficient.The advantage of this over NIFs and port drivers is that your Erlang code is totally insulated from the C code. The C program can smash its own stack, double-free blocks of memory, enter an infinite loop, whatever. None of this stops your Erlang code. At worst, you close the Erlang port and re-open it if things go pear-shaped.
任何对 erlang/C++ 集成方面感兴趣的人,可能还想查看这篇文章:将 Playdar:C++ 重写为 Erlang,节省大量资金:
Anyone interested in the erlang/C++ integration aspect, may also want to check out this article: Rewriting Playdar: C++ to Erlang, massive savings: