2009-11-28 21 views

Respuesta

23
  • Native implemented functions: disponible en la versión más reciente de Erlang/OTP, le permite implementar cualquiera de sus funciones en C.

  • Port drivers: se puede enlazar un código C para la máquina virtual de Erlang, y acceder a ella usando port_command.

  • C Nodos: Con la biblioteca ei puede imitar una VM y hablar con sus máquinas virtuales Erlang utilizando el formato de distribución Erlang.

+3

NFI son todavía experimentales ... pero estoy esperanzado y esperando ansiosamente una interfaz estable para estos! – jldupont

+1

Cierto, son experimentales, pero tener una implementación de la función Erlang "fallback" es tan buena que incluso vale la pena cambiar tu código C para cada próxima versión :) – Zed

+0

¡Sí, estoy de acuerdo! – jldupont

2

Lo más parecido que conozco para interactuar con Erlang C++ directamente EPAPI es. Por supuesto, se basa en el probado C erl_interface que viene de serie con la distribución de Erlang.

+0

EPAPI está en la versión 0.7, así que supongo que uno aún es experimental: o) – Zed

+0

No obstante, es muy estable :-) – jldupont

0

Para la excelente respuesta de Zed, agregaría open_port(). Le permite iniciar un programa externo y comunicarse con él desde Erlang usando su entrada y salida estándar. Puede usarlo como las tuberías de Unix dando la opción {line, L}, o también existe la opción {paquete, N} con prefijo de longitud que me parece más segura y más eficiente.

La ventaja de esto sobre NIF y controladores de puerto es que su código Erlang está totalmente aislado del código C. El programa C puede destruir su propia pila, bloques de memoria doblemente libres, ingresar un bucle infinito, lo que sea. Nada de esto detiene su código Erlang. En el peor de los casos, cierra el puerto de Erlang y lo vuelve a abrir si las cosas van en forma de pera.

0

Cualquier persona interesada en el aspecto de integración Erlang/C++, también puede que desee revisar este artículo: Rewriting Playdar: C++ to Erlang, massive savings:

He escuchado muchas anécdotas y reclamos acerca de cuántas líneas de código se guardan cuando se escribe en Erlang en lugar de [C++/otro idioma]. Me complace informar que ahora tengo experiencia de primera mano y algunos datos para compartir.

Inicialmente escribí Playdar en C++ (usando las bibliotecas Boost y Asio), comenzando en febrero de este año. Tuve la suerte de trabajar con desarrolladores experimentados que me ayudaron a aceptar C++. Hubo tres de nosotros hackeando regularmente hasta hace unos meses, y a pesar de ser relativamente nuevo en C++, diré que terminamos con una base de código sólida y bien diseñada, considerando todo.

+0

Comenzaron a escribir 8,035 líneas de código, y unas semanas más tarde escribieron 10,067 líneas de código. código, el 80% de los cuales tiraron, no había agregado ninguna funcionalidad nueva en el proceso, esto es un ahorro? Debe ser una fuente de código abierto, ya que no hay forma de que un negocio justifique eso. (Escribirlo en Erlang para empezar sería una cuestión diferente) –

+1

Es un ahorro importante cuando se trata de reducir la deuda técnica futura. Menos líneas de código = más fáciles de mantener, depurar y agregar nuevas características más adelante. – DSimon