2009-11-28 9 views

risposta

23
  • Native implemented functions: disponibili nella versione più recente Erlang/OTP, consente di implementare qualsiasi delle vostre funzioni in C.

  • Port drivers: è possibile collegare un codice C al Erlang VM, e accedervi usando port_command.

  • C Nodi: con la libreria ei è possibile simulare una macchina virtuale e parlare con le macchine virtuali Erlang utilizzando il formato di distribuzione Erlang.

+3

NFI sono ancora sperimentali ... ma sono fiducioso e attendo con impazienza un'interfaccia stabile per questi! – jldupont

+1

È vero, sono sperimentali, ma avere un'implementazione della funzione Erlang "fallback" è così bello che vale anche la pena di cambiare il codice C per ogni nuova versione :) – Zed

+0

Sì, concordo! – jldupont

2

La cosa più vicina che so per l'interfacciamento con Erlang C++ direttamente è EPAPI. Naturalmente si basa sul collaudato C erl_interface fornito di serie con la distribuzione Erlang.

+0

EPAPI è alla versione 0.7 quindi presumo che uno sia ancora sperimentale: o) – Zed

+0

È comunque molto stabile :-) – jldupont

0

Alla risposta eccellente di Zed, vorrei aggiungere open_port(). Ti permette di avviare un programma esterno e comunicare con esso da Erlang usando il suo standard dentro e fuori. Puoi usarlo come pipe Unix dando l'opzione {line, L}, oppure c'è anche l'opzione {packet, N} con la lunghezza prefissata che trovo più sicura ed efficiente.

Il vantaggio di questo NIF e driver di porta è che il codice Erlang è totalmente isolato dal codice C. Il programma C può distruggere il proprio stack, i blocchi di memoria double-free, inserire un loop infinito, qualunque cosa. Niente di tutto ciò ferma il tuo codice Erlang. Nel peggiore dei casi, chiudi la porta di Erlang e la riapri se le cose vanno a pera.

0

Chiunque sia interessato all'aspetto dell'integrazione Erlang/C++, può anche voler controllare questo articolo: Rewriting Playdar: C++ to Erlang, massive savings:

Ho sentito molti aneddoti e le richieste di quante righe di codice vengono salvate quando si scrive in Erlang invece di [C++/altra lingua]. Sono felice di annunciare che ora ho esperienza di prima mano e alcuni dati da condividere.

Inizialmente ho scritto Playdar in C++ (utilizzando librerie Boost e Asio), a partire da febbraio di quest'anno. Ho avuto la fortuna di lavorare con alcuni sviluppatori esperti che mi hanno aiutato a venire a patti con il C++. Tre di noi ci hanno hackerato regolarmente fino a qualche mese fa, e nonostante sia relativamente nuovo per il C++, dirò che abbiamo finito con un codebase ben progettato e robusto, tutto sommato.

+0

Hanno iniziato a scrivere 8,035 righe di codice e poche settimane dopo hanno scritto 10,067 righe di codice, l'80% di quello che hanno buttato via, non ha aggiunto nuove funzionalità nel processo, questo è un risparmio? Deve essere una cosa open source, in quanto in nessun modo un'azienda potrebbe giustificarlo. (Scrivendolo in Erlang per iniziare sarebbe una questione diversa) –

+1

È un grande risparmio quando si tratta di ridurre il debito tecnico futuro. Meno linee di codice = più facile da mantenere, eseguire il debug e aggiungere nuove funzionalità in seguito. – DSimon