Quali interfacce esistono per legare Erlang con C++?Integrazione di Erlang con C++
risposta
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.
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.
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.
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.
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) –
È 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
- 1. Integrazione dello stato di Erlang e C/C++?
- 2. Erlang - C ed Erlang
- 3. C e Erlang: esempio Erlang Port
- 4. Conversione di esempio porta Erlang-C in Erlang-Golang
- 5. Integrazione di Python nell'applicazione C#
- 6. Integrazione di Jetty con RESTEasy
- 7. Erlang C nodo connessa interrogazione
- 8. invio di dati tra erlang e C++
- 9. Java a messaggi di Erlang
- 10. Analisi HTML con Erlang
- 11. C# - Integrazione di dati (immagini) in .exe
- 12. Codice di esempio di integrazione C++ \ IronPython?
- 13. Integrazione di Wix con MSBuild
- 14. Test di integrazione con aerospike?
- 15. Integrazione di Alembic con SQLAlchemy
- 16. Test di integrazione con Authlogic?
- 17. Integrazione di FosUserBundle con FosRestBundle
- 18. Integrazione di GitLab con TeamCity
- 19. Test di integrazione con Redis
- 20. Integrazione di Facebook con iOS
- 21. Integrazione di OpenSceneGraph con Qt
- 22. Erlang - script di avvio
- 23. Integrazione di Unity con Eclipse - Comunicazione?
- 24. Compilazione di Erlang - Erlang come eseguibile autonomo
- 25. integrazione gitlab con sonarqube
- 26. Integrazione Paypal con Braintree
- 27. integrazione R con Rsruby
- 28. integrazione RFID con PHP
- 29. Integrazione VS2010 con Subversion
- 30. Integrazione con google drive
NFI sono ancora sperimentali ... ma sono fiducioso e attendo con impazienza un'interfaccia stabile per questi! – jldupont
È 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
Sì, concordo! – jldupont