2009-11-28 82 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