Come posso combinare C / Fortran con JavaScript?

6

Sto lavorando a un progetto in cui ho bisogno di pesanti calcoli numerici per essere visualizzato in tempo reale con qualcosa di flessibile come D3.js. Ci sono quadri che permetteranno a me di raggiungere questo risultato senza dolore? O devo usare una sorta di codice "colla" scritto, per esempio, in Python?

    
posta pav3l 27.11.2012 - 19:20
fonte

2 risposte

7

Quello che stai chiedendo è l'interoperabilità tra C / Fortran e Javascript, l'interopazione può essere fatta in molti modi, i due più comuni che vengono in mente sono:

BFI (Foreign Function Interface) e Inter-Process Communication (IPC).

FFI è il luogo in cui un protocollo standard concordato viene incorporato nell'assembly in fase di compilazione, consentendo l'accesso alle strutture degli assembly da parte di lingue straniere. Ci sono una varietà di interfacce standard FFI, ma non ho familiarità con nessuno che permetta ad un linguaggio interpretato di interfacciarsi con un linguaggio compilato o viceversa; il concetto non si adatta all'uso degli interpreti in quanto i loro script sono in testo semplice senza alcun assembly da interfacciare.

Detto questo, l'interprete potrebbe disporre di strutture per l'accesso FFI. Node.JS viene in mente come un interprete javascript che probabilmente dispone di strutture per l'accesso FFI. In alternativa potresti usare il tuo programma C per ospitare un interprete javascript come il motore V8 di Chrome per far eseguire direttamente al tuo C il javascript se questo ti può aiutare, anche se non sospetto che lo farebbe.

La comunicazione tra processi (IPC) è il luogo in cui si esegue il processo in una lingua e l'altro processo nell'altra lingua, quindi si utilizza una forma di IPC per comunicare tra i due. Comunemente questo viene fatto tramite spazio di memoria condivisa in cui entrambi i processi possono mettere i dati in quello spazio di memoria e leggere da esso per inviare messaggi avanti e indietro. La stessa tecnica viene utilizzata con i file a volte sebbene si tratti di una tecnica di alto costo dovuta ai costi di I / O, tuttavia offre una durata nel caso in cui uno o entrambi i processi si blocchino o anche la macchina perdi potenza.

La tecnica di memoria condivisa per IPC spesso si presenta in due modi:

  • Un processo padre che chiama un processo figlio e utilizza "pipe" per inviare messaggi direttamente al processo figlio. Credo che Node.JS suggerisca questa tecnica per interoperare con altre lingue
  • Tubi con nome che sono spazi di memoria condivisa a livello di sistema registrati con il kernel e accessibili da un identificatore

Oltre alla memoria condivisa o al disco, l'altra tecnica IPC ampiamente utilizzata è la comunicazione di rete. Ogni volta che il tuo browser accede a un sito web sta comunicando con un altro processo, quindi questo è IPC, e in questo modo i servizi web sono diventati un modo estremamente comune di realizzare IPC. Le tecniche TCP dirette sono ancora utilizzate come pure l'UDP per determinate attività, ma il punto è che la rete può agire come uno strato di comunicazione tra processi proprio come lo spazio di memoria o lo spazio su disco.

Tutto ciò detto, il mio suggerimento è che tu usi i servizi web per IPC come tecnica di interoperabilità linguistica, perché desideri la visualizzazione su un browser.

Questo è tutto. Spero che tu abbia imparato qualcosa, continua:)

    
risposta data 27.11.2012 - 20:59
fonte
1

Scrivi un CGI , crea il server HTTP e il resto del browser.
Se hai bisogno di più prestazioni in seguito, puoi trasformarlo in FastCGI .

Se tu (i tuoi capi) sei davvero tanto disperato da sembrare che non ci sia un browser che fa il pesante trasporto, cerca di includere un widget WebKit (multipiattaforma) o di incorporare un frame MSIE (tutto intorno più facile e più veloce, ma disponibile solo su Windows e potrebbe causare problemi con le versioni MSIE) nella tua app in finestra.

    
risposta data 06.08.2013 - 14:15
fonte

Leggi altre domande sui tag