I programmi di lingue diverse possono comunicare informazioni senza file io? [duplicare]

2

È possibile scrivere un programma C ++ che, per esempio, passa un array int a un programma java senza scriverlo su un file?

Motivazione per la domanda: mi chiedevo quale matlab è e come è diventata un'applicazione che è stata scritta in diverse lingue (al contrario di essere disponibile in diverse lingue cioè, c'è una versione di esso in C ++, Java, ecc ... che contiene le stesse caratteristiche).

    
posta Minh Tran 21.07.2015 - 17:07
fonte

3 risposte

3

Sì. La risposta generale è che hanno una sorta di interfaccia binaria condivisa. Tipicamente l'API C de facto. Per semplificarlo un po ', questo significa scrivere una funzione nel linguaggio A che chiama una funzione scritta in C, e quella funzione scritta in C chiama una funzione scritta nel linguaggio B. Alcuni esempi utili:

  • Lua è un linguaggio di scripting progettato per essere incorporato nel codice C. Il caso d'uso più famoso è un videogioco con il motore scritto in C ma tutti gli elementi di alto livello scritti in Lua.

  • Alcune lingue (incluso Java, Python e molto altro ancora) contengono una speciale libreria FFI (interfaccia di funzioni esterne) al solo scopo di chiamare le funzioni C.

  • Come altri hanno sottolineato, quasi tutti i meccanismi IPC (comunicazione interprocesso) e i protocolli di comunicazione di rete sono indipendenti dalla lingua. Girano tutti intorno all'invio di una serie arbitraria di byte, lasciandola al destinatario per dare un senso a quei byte.

Non riesco a trovare alcuna informazione definitiva, ma persone casuali su Internet sembrano pensare che l'interfaccia utente di MATLAB sia scritta in Java e usi IPC per parlare all'interprete scritto in C ++.

    
risposta data 21.07.2015 - 17:21
fonte
3

Sì. Ogni processo può comunicare con un altro utilizzando una cosa chiamata IPC, o Inter Process Communication (non sorprendentemente!). Ci sono molte diverse forme di IPC, il file IO è quello usato da un discreto numero di programmi unix, ma puoi usare socket, named pipe o memory-maps, o anche un database (usando qualcosa sulla falsariga del modello architettonico della lavagna) .

La lingua utilizzata per creare un processo è irrilevante (tranne che per il suo supporto per accedere allo stesso meccanismo IPC).

    
risposta data 21.07.2015 - 17:19
fonte
3

Quasi tutte le lingue che vale la pena scrivere hanno un modo di interfacciarsi con una libreria dinamica C. In java ciò avviene con l'interfaccia nativa Java o ospitando la JVM in memoria come un motore di script di sorta.

Con matlab c'è un setup simile a quello di java.

Da C chiameresti Engine engine = engopen(NULL); e userai il motore per inviare comandi al matlab elaborare utilizzando un servizio COM o un set di pipe.

    
risposta data 21.07.2015 - 17:21
fonte

Leggi altre domande sui tag