2009-11-28 63 views

回答

23
  • Native implemented functions:在最新的Erlang/OTP版本,可以让你实现你的任何功能C.

  • Port drivers:您可以将所需的C代码到二郎山VM,和访问使用port_command。

  • C节点:通过ei库,您可以模拟虚拟机并使用Erlang分发格式与您的Erlang虚拟机交谈。

+3

NFI仍然是实验性的...但我希望并热切地等待这些稳定的接口! – jldupont 2009-11-28 11:39:35

+1

确实,它们是实验性的,但是有一个“后备”Erlang函数实现非常好,它甚至值得为每个即将发布的版本改变你的C代码:) – Zed 2009-11-28 15:44:46

+0

是的,我同意! – jldupont 2009-11-28 16:58:32

2

我知道有Ç接口二郎最接近的事++是直接EPAPI。当然,它依赖于经过测试的C erl_interface,这是Erlang发行版的标准配置。

+0

EPAPI在0.7版本,所以我推测其中一个仍然是实验性的:o) – Zed 2009-11-28 15:36:57

+0

尽管如此,它仍然非常稳定:-) – jldupont 2009-11-28 16:55:56

0

对于Zed的优秀答案,我会加open_port()。它可以让你启动一个外部程序并使用标准的Erlang与Erlang进行通信。你可以通过给出{line,L}选项来像Unix管道一样使用它,或者也有长度前缀的{packet,N}选项,我发现它更安全和更高效。

这比NIF和端口驱动程序的优点是你的Erlang代码完全与C代码无关。 C程序可以粉碎它自己的堆栈,双倍空闲的内存块,进入无限循环等等。这些都不会阻止你的Erlang代码。最糟糕的是,如果事情变成梨形,你关闭Erlang端口并重新打开它。

0

任何有兴趣用Erlang/C++集成方面,也可能想看看这篇文章:Rewriting Playdar: C++ to Erlang, massive savings

我听说过很多趣事和权利要求书有多少行代码,当你写保存在Erlang中而不是[C++/other language]。我很高兴地报告,我现在有第一手的经验和一些数据可以分享。

我最初在C++(使用Boost和Asio库)中编写Playdar,从今年2月份开始。我很幸运能够与一些有经验的开发人员合作,他们帮助我了解C++。直到几个月前,我们有三个人经常对它进行攻击,尽管对C++来说是相对陌生的事情,但我会说,我们最终设计了一个设计良好且健壮的代码库,所有事情都考虑在内。

+0

他们开始编写了8,035行代码,几周后他们写了10,067行代码中,他们扔掉了80%的代码,在这个过程中没有添加新的功能,这是一个节约?必须是开源的东西,因为企业无法证明这一点。 (写在Erlang开始将是另一回事) – 2010-02-28 16:21:23

+1

这是减少未来技术债务的主要节约。更少的代码行数=稍后更易于维护,调试和添加新功能。 – DSimon 2015-07-14 20:29:24