Sono l'autore di LikeMagic, una libreria di binding C++ per la lingua Io. (Io non sono l'autore di Io.)
http://github.com/dennisferron/LikeMagic
Uno dei miei obiettivi espliciti con LikeMagic è completa e totale interoperabilità C++, in entrambe le direzioni. LikeMagic eseguirà il marshalling dei tipi Io nativi come tipi C++ (compresa la conversione tra i contenitori STL e il tipo Lista nativo di Io) e rappresenterà classi, metodi, campi e array C++ all'interno di Io. È anche possibile passare un blocco del codice Io fuori dell'ambiente Io e utilizzarlo in C++ come un funtore !!
Il wrapping di tipi C++ per il consumo nello script Io è semplice, rapido e facile. L'accesso agli oggetti script da C++ richiede una funzione di "eval" come quella descritta, ma la conversione e il marshaling di tipo basato su modello facilita l'accesso al risultato dell'esecuzione di una stringa di script. E c'è la già citata capacità di trasformare oggetti Io block() in funtori C++.
In questo momento il progetto è ancora nelle fasi iniziali, sebbene sia pienamente operativo. Ho ancora bisogno di fare cose come documentare i suoi passi di costruzione e le dipendenze, e può essere costruito solo con gcc 4.4.1+ (non Microsoft Visual C++) perché usa le funzionalità C++ 0x non ancora supportate in MSVC. Tuttavia, supporta pienamente Linux e Windows e una porta Mac è pianificata.
Ora la cattiva notizia: Rendere gli script producono file .he .so o file dll richiamabili dal C++ non solo richiede un compilatore (di una specie), ma avrebbe anche essere un compilatore JIT. Questo perché (in molti linguaggi di scripting, ma soprattutto in Io) i metodi ei campi di un oggetto non sono noti fino al runtime - e in Io, i metodi possono anche essere aggiunti e rimossi da oggetti live! All'inizio stavo per dire che il fatto stesso che me lo chiedi mi fa chiedere se forse non capisci veramente che linguaggio dinamico è. Ma io credo in un modo di progettare in cui provi per la prima volta a immaginare il modo ideale o più semplice di fare qualcosa, e poi a ritroso da lì a ciò che è effettivamente possibile. E così ammetto da un punto di vista della facilità d'uso, quello che descrivi è più facile da usare.
Ma mentre è ideale, e appena possibile (utilizzando un linguaggio di script con compilation JIT), non è molto pratico, quindi non sono ancora sicuro se quello che stai chiedendo è quello che vuoi veramente. Se i file .h e .so/.dll sono JITted dallo script e lo script cambia, è necessario ricompilare il programma C++ per sfruttare la modifica! In primo luogo, non viola il vantaggio principale dell'utilizzo di script?
L'unico modo in cui è pratico sarebbe se le interfacce definite gli script non cambiano, e state semplicemente creando wrapper C++ per le funzioni di script. Si finirebbe con l'avere un sacco di funzioni C++ come:
int get_foo() { return script.eval("get_foo()"); }
int get_bar() { return script.eval("get_bar()"); }
Devo ammettere che il codice più pulito guardando dal punto di vista dei chiamanti della funzione wrapper. Ma se è quello che vuoi, perché non usare la reflection nel linguaggio di scripting e generare un file .h fuori dagli elenchi dei metodi memorizzati negli oggetti script? Questo tipo di riflessione può essere easily done in Io. Ad un certo punto ho intenzione di integrare lo OpenC++ source-to-source translator come libreria richiamabile da LikeMagic, il che significa che potresti persino usare un robusto generatore di codice C++ invece di scrivere le stringhe.
Il q l'aspetto sembra non essere fuori tema per me. – sergiol
Ci dispiace, ma perché dovresti usare un linguaggio di scripting? Cos'altro fornisce oltre all'input dell'utente? – kim366
@DiegoSevilla è nato un altro linguaggio di programmazione. Si chiama ZetScript Non so se sei ancora alla ricerca di un motore di script, ma guarda se è adatto alle tue esigenze! http://zetscript.org –