Какие интерфейсы существуют, чтобы связать Erlang с С++?
Интеграция Erlang с С++
Ответ 1
-
Встроенные реализованные функции: доступна в последней версии Erlang/OTP, позволяет реализовать любую из ваших функций в C.
-
Драйвер портов: вы можете связать код C с Erlang VM и получить доступ к нему с помощью команды port_command.
-
C Узлы: с помощью библиотеки ei вы можете имитировать виртуальную машину и поговорить с вашими виртуальными машинами Erlang, используя формат распространения Erlang.
Ответ 2
Ближайшая вещь, которую я знаю для взаимодействия Erlang с С++, - это EPAPI. Конечно, он полагается на проверенный и проверенный C erl_interface
, который входит в стандартную комплектацию с дистрибутивом Erlang.
Ответ 3
В Zed отличный ответ, я бы добавил open_port()
. Он позволяет вам запускать внешнюю программу и общаться с ней из Erlang, используя свой стандартный вход и выход. Вы можете использовать его как Unix-каналы, указав параметр {line, L}, а также параметр длины с префиксом {пакет, N}, который я считаю более безопасным и эффективным.
Преимущество этого над NIF и драйверами портов заключается в том, что ваш код Erlang полностью изолирован от кода C. Программа C может разбить свой собственный стек, двойные блоки памяти, ввести бесконечный цикл, что угодно. Ничто из этого не останавливает ваш код Erlang. В худшем случае вы закрываете порт Erlang и снова открываете его, если что-то становится грушевидным.
Ответ 4
Любой, кто интересуется аспектом интеграции erlang/С++, также может захотеть проверить эту статью: Переписывание Playdar: С++ в Erlang, огромная экономия:
Ive услышал много анекдотов и утверждений о том, сколько строк кода сохраняется, когда вы пишете в Erlang вместо [С++/другой язык]. Я рад сообщить, что теперь у меня есть опыт из первых рук и некоторые данные для обмена.
Я изначально написал Playdar на С++ (используя библиотеки Boost и Asio), начиная с февраля этого года. Мне посчастливилось работать с некоторыми опытными разработчиками, которые помогли мне смириться с С++. Мы были трое из нас, взламывая его регулярно вплоть до нескольких месяцев назад, и, несмотря на то, что были относительно новыми для С++, я говорю, что мы закончили с хорошо продуманной и надежной базой кода, все рассмотрено.