将Erlang与C ++联系起来有哪些接口?
答案 0 :(得分:26)
Native implemented functions:在最新的Erlang / OTP版本中提供,允许您在C中实现任何功能。
Port drivers:您可以将C代码链接到Erlang VM,并使用port_command访问它。
C节点:使用ei库,您可以模拟VM并使用Erlang分发格式与Erlang VM通信。
答案 1 :(得分:3)
我知道将Erlang与 C ++直接连接的最近的事情是EPAPI 。当然,它依赖于Erlang发行版标配的久经考验的 C erl_interface
。
答案 2 :(得分:0)
对于Zed的优秀答案,我会添加open_port()
。它允许您启动外部程序并使用其标准输入和输出从Erlang与它进行通信。您可以通过提供{line,L}选项来像Unix管道一样使用它,或者还有长度前缀{packet,N}选项,我觉得它更安全,更有效。
这比NIF和端口驱动程序的优势在于您的Erlang代码完全与C代码隔离。 C程序可以粉碎自己的堆栈,双重释放内存块,进入无限循环,无论如何。这些都不会阻止您的Erlang代码。最糟糕的是,如果事情变成梨形,你会关闭Erlang端口并重新打开它。
答案 3 :(得分:0)
任何对erlang / C ++集成方面感兴趣的人也可能想看看这篇文章:Rewriting Playdar: C++ to Erlang, massive savings:
我听过很多关于用Erlang而不是[C ++ /其他语言]编写时会保存多少行代码的轶事和说法。我很高兴地报告说,我现在拥有第一手经验和一些数据可供分享。
我最初在今年2月开始用C ++编写Playdar(使用Boost和Asio库)。我很幸运能与一些经验丰富的开发人员合作,帮助我接受C ++的使用。直到几个月前,我们有三个人经常黑客攻击它,尽管对C ++来说相对较新,但我会说我们最终得到了一个设计良好且功能强大的代码库。