Ho progettato ciò che ritengo sia una funzionalità utile e riutilizzabile che vorrei:
- Implementare in C / C ++ come libreria open source; e poi
- Scrivi diverse " librerie di binding nativo " per questo in vari linguaggi di livello superiore, in modo che gli utenti finali che scrivono applicazioni in questi linguaggi (Java, Ruby, Python, C #, Haskell, ecc.) possano tutti chiamano lo stesso codice C / C ++ sotto il cofano, ma guidano quel codice all'interno di queste librerie.
Ad esempio, potrei avere il seguente codice C:
// Pseudo-code for simple example only, don't read into this too much!
float square(float x) {
float p;
p = x * x;
return p;
}
E poi scrivi una "libreria di rilegatura Java" che include il codice C compilato come libreria nativa all'interno del JAR e che espone un'API Java per invocarlo:
// Pseudo-code for simple example only, don't read into this too much!
public class SquareManager {
public SquareManager() {
super();
System.loadLibrary("Square");
}
public native float square(float x);
public float calcSquare(float x) {
return square(x);
}
}
Idem per altri linguaggi di alto livello (ancora, Ruby, Python, ecc.).
Quando sento persone che parlano di scrivere codice C / C ++, spesso li sento parlare di targeting varie piattaforme . Con questo, presumo significano che, con C / C ++, devi compilare il codice in binari che possono essere eseguiti su varie combinazioni di OS / set di istruzioni. Ad esempio, potresti avere una distribuzione binaria per l'esecuzione su Windows / x86. Potresti averne un altro per funzionare su Linux / x86. Si potrebbe anche avere una distribuzione per l'esecuzione su Linux / ARM. Quindi per cominciare, se l'affermazione sopra è imprecisa, per favore inizia correggendomi!
Supponendo che io sia più o meno corretto lì, allora mi sembra che dovrei essere in grado di:
- Basta scrivere questo codice C / C ++ una volta; e poi
- Assicurati, per ogni piattaforma (OS / set di istruzioni combinate) che voglio targetizzare, che io abbia un compilatore in esecuzione sulla mia macchina che possa compilare quel codice C / C ++ in un binario che può essere eseguito in modo nativo sul target piattaforma
Ciò sarebbe contrario a ciò di cui sono preoccupato, il che sarebbe una situazione in cui:
- Per qualche ragione, ho bisogno di scrivere una versione / sapore differente del codice C / C ++ per ogni piattaforma mirata; e poi
- Compilare ciascuna versione del codice sorgente in un file binario che può essere eseguito sulla piattaforma desiderata
Quindi chiedo: Sono corretto qui, pensando di poter scrivere il codice C / C ++ una volta, e poi semplicemente compilarlo (probabilmente usando diversi compilatori, o diverse configurazioni di compilatore) più volte, una volta per ogni piattaforma mirata che voglio sostenere? E se sono errato o fuorviato, qui, allora come?