将 Erlang 与 C++ 集成

发布于 2024-08-12 23:11:56 字数 35 浏览 3 评论 0原文

存在哪些接口可以将 Erlang 与 C++ 结合起来?

What interfaces exist to tie Erlang with C++?

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

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

发布评论

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

评论(4

呆橘 2024-08-19 23:11:56
  • 本机实现的函数:在最新的 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.

葬﹪忆之殇 2024-08-19 23:11:56

据我所知,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.

停滞 2024-08-19 23:11:56

对于 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.

迷途知返 2024-08-19 23:11:56

任何对 erlang/C++ 集成方面感兴趣的人,可能还想查看这篇文章:将 Playdar:C++ 重写为 Erlang,节省大量资金

我听过很多轶事和说法,说当你用 Erlang 而不是 [C++/其他语言] 编写时可以节省多少行代码。我很高兴地向大家报告,我现在拥有第一手经验和一些数据可以分享。

我最初是从今年 2 月份开始用 C++(使用 Boost 和 Asio 库)编写 Playdar 的。我很幸运能够与一些经验丰富的开发人员一起工作,他们帮助我熟悉了 C++。直到几个月前,我们三个人还在定期对它进行黑客攻击,尽管对 C++ 来说相对较新,但我想说的是,考虑到所有因素,我们最终得到了一个设计良好且健壮的代码库。

Anyone interested in the erlang/C++ integration aspect, may also want to check out this article: Rewriting Playdar: C++ to Erlang, massive savings:

I’ve heard many anecdotes and claims about how many lines of code are saved when you write in Erlang instead of [C++/other language]. I’m happy to report that I now have first-hand experience and some data to share.

I initially wrote Playdar in C++ (using Boost and Asio libraries), starting back in February this year. I was fortunate to be working with some experienced developers who helped me come to terms with C++. There were three of us hacking on it regularly up until a few months ago, and despite being relatively new to C++, I’ll say that we ended up with a well designed and robust codebase, all things considered.

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