Интеграция Erlang с C ++ - PullRequest
       19

Интеграция Erlang с C ++

22 голосов
/ 28 ноября 2009

Какие существуют интерфейсы для связи Erlang с C ++?

Ответы [ 4 ]

26 голосов
/ 28 ноября 2009
  • Собственные реализованные функции : доступно в последней версии Erlang / OTP, позволяет вам реализовать любую из ваших функций в C.

  • Драйверы портов : вы можете связать код C с виртуальной машиной Erlang и получить к нему доступ с помощью port_command.

  • C Узлы: С библиотекой ei вы можете имитировать виртуальную машину и общаться с вашими виртуальными машинами Erlang, используя формат распространения Erlang.

3 голосов
/ 28 ноября 2009

Самая близкая вещь, которую я знаю для взаимодействия Erlang с C ++ напрямую, это EPAPI . Конечно, он опирается на проверенные и протестированные C erl_interface, которые входят в стандартную поставку дистрибутива Erlang.

0 голосов
/ 28 февраля 2010

Любой, кто интересуется аспектом интеграции с erlang / C ++, может также захотеть ознакомиться с этой статьей: Переписывание Playdar: от C ++ до Erlang, значительная экономия :

Я слышал много анекдотов и утверждений о том, сколько строк кода сохраняется, когда вы пишете на Erlang вместо [C ++ / другой язык]. Я рад сообщить, что теперь у меня есть личный опыт и некоторые данные для обмена.

Первоначально я писал Playdar на C ++ (с использованием библиотек Boost и Asio), начиная с февраля этого года. Мне повезло работать с некоторыми опытными разработчиками, которые помогли мне смириться с C ++. Трое из нас регулярно его взламывали, вплоть до нескольких месяцев назад, и, несмотря на то, что были относительно новыми для C ++, я скажу, что мы получили хорошо продуманную и надежную кодовую базу, учитывая все обстоятельства.

0 голосов
/ 30 ноября 2009

К отличному ответу Зеда я бы добавил open_port(). Это позволяет вам запускать внешнюю программу и общаться с ней из Erlang, используя ее стандартные входы и выходы. Вы можете использовать его как каналы Unix, задав параметр {line, L}, или есть также параметр {package, N} с префиксом длины, который я считаю более безопасным и более эффективным.

Преимущество этого по сравнению с NIF и драйверами портов в том, что ваш код Erlang полностью изолирован от кода C. Программа на C может разбить свой собственный стек, освободить двойные блоки памяти, войти в бесконечный цикл, что угодно. Ничто из этого не останавливает ваш код Erlang. В худшем случае вы закрываете порт Erlang и снова открываете его, если все становится грушевидным.

...