Condivisione della funzionalità tra piattaforme e lingue

3

Sono in una situazione in cui ho già un programma C ++ funzionante e ad alte prestazioni con GTK e OpenGL che rende i dati come un grafico in tempo reale. I dati vengono salvati come report in un database che può essere consultato in un secondo momento da un browser. Ora ho bisogno di visualizzare quegli stessi grafici dai rapporti basati sul web (questo non era nei requisiti originali).

Ho provato a generare i grafici da PHP, ma disegnare il tutto con GD richiede più di 20 secondi. Sono in procinto di riscrivere questo in Javascript utilizzando canvas, che sembra essere a posto, anche se ora devo trasferire tutti i dati al browser e analizzarlo, il che è ancora problematico.

Ma il vero problema per me è che sto scrivendo lo stesso programma due volte: in C ++ con OpenGL e in Javascript con canvas.

Sto cercando un consiglio generale su come riutilizzare il codice tra piattaforme diverse che supportano linguaggi diversi, ad esempio tra un ambiente desktop e una pagina web. Ci sono strumenti che possono aiutare? C'è un modo per evitare di mantenere due codebase diversi che fanno la stessa cosa?

Le mie idee finora, nessuna delle quali è particolarmente interessante:

  1. Riusa il codice . Trova un modo per in realtà condividere il codice, come usare un programma C ++ come CGI. Questo non funzionerà se la lingua non è supportata dalla piattaforma (come in un browser).

  2. Riutilizza l'output : scrivi il programma una volta, genera l'output (ad esempio un'immagine) e rendi gli altri programmi "visualizzatori". Questo non funzionerà se l'output è troppo grande per passare.

  3. Traduci il codice : utilizza alcuni strumenti automatici per tradurre da una lingua (o una meta-lingua) a un'altra. Se esiste uno strumento del genere, potrei utilizzare le raccomandazioni.

  4. Riusa il bytecode : utilizza un linguaggio che compila in bytecode che può essere eseguito su varie piattaforme. A parte le applet Java (che la maggior parte delle persone ha disabilitato al giorno d'oggi), non conosco nient'altro che funzioni nei browser.

  5. Sviluppa il mio linguaggio universale : nessuno ha tempo per farlo.

posta isanae 26.06.2015 - 20:06
fonte

2 risposte

2

La condivisione delle funzionalità tra le lingue è un problema complesso e difficile da risolvere, quindi dubito che troverai una soluzione generale. Il desiderio di condividere il codice è un sacco di motivazione dietro tutto da Node.js a Xamarin.Forms a Emscripten .

Non sono chiaro dalla descrizione in cui si desidera elaborare i dati e da dove provengono i dati. Nel nostro caso, abbiamo apportato una variazione al numero 1: abbiamo modificato il nostro codice di plottaggio C ++ per prendere una classe astratta PlotOutput . Per l'app desktop, ha utilizzato un'implementazione della GUI locale; per l'app Web, ha funzionato lato server e ha utilizzato un'implementazione PlotOutput che ha trasformato la trama in Flot JSON per l'utilizzo da parte di un Web app. Ha funzionato bene per noi, anche se non abbiamo avuto bisogno di quasi 60fps. (Passare da JSON a JavaScript typed arrays sarebbe una fonte ovvia di miglioramento delle prestazioni.)

Un'altra possibile soluzione è usare Emscripten per compilare il tuo C ++ in JavaScript. Il blog di Mozilla ha una buona panoramica del porting di un gioco su Emscripten.

    
risposta data 26.06.2015 - 22:04
fonte
2

Se hai già il codice C ++, mi sbaglierei verso il n. 2 (rendendo il C ++ un servizio in cui il codice client chiama). Se l'output è troppo grande, generalmente significa che i dati saranno troppo grandi per essere inviati al client per il rendering. Questo approccio permetterebbe anche al cliente di specificare la dimensione / risoluzione di cui ha effettivamente bisogno, in modo che il server non possa inviare l'intera cosa sul filo.

Per quanto riguarda il # 3, so che esiste già un compilatore C to JavaScript. Vile, lo so ... non so quanto riguarderà gli elementi dell'interfaccia utente, e non so se c'è un buon analogo / estensione C ++ (o se il tuo codice è facilmente trasferibile a C) - ma forse è vale 15 minuti di google due diligence.

    
risposta data 26.06.2015 - 20:27
fonte

Leggi altre domande sui tag