Esistono linguaggi interpretati, come Lisp, Tcl, Perl, ecc., Che rendono facile la definizione di lambda/proc/sub all'interno del codice durante il runtime e per valutare all'interno della stessa sessione.Assemblare una funzione secondo necessità e calcolarla velocemente
Ci sono linguaggi compilati, come C++, che dovrebbero essere eseguiti molto più velocemente di quelli interpretati, ma che definiscono una funzione all'interno di un programma compilato durante il runtime e l'esecuzione non è facile, se possibile.
Il problema è quello di effettuare le seguenti operazioni:
definire una funzione durante il runtime: per esempio, sulla base dei dati di input iniziali derivare un modello analitico dei dati.
Esegui rapidamente la funzione sopra descritta in un ciclo: ad esempio, applica il modello analitico derivato per analizzare i dati in entrata.
Una soluzione che ho visto non era molto carina:
Una procedura che rappresenta il modello analitico è derivata incorporato Tcl sulla base dei dati di input iniziali.
Una tabella di ricerca è stata creata valutando la procedura in Tcl su una matrice di punti campione che, in termini ottimistici, coprirebbero l'intervallo di applicabilità.
La tabella di ricerca è stata passata dall'interprete Tcl al binario (che è stato sviluppato in C++).
Quindi i dati in arrivo sono stati analizzati interpolando tra valori "abbastanza vicini" nella tabella di ricerca.
La soluzione di cui sopra funziona, ma presenta alcuni problemi, sia concettuali che computazionali. Quindi la domanda: è possibile definire una funzione puramente in C++ e renderla disponibile per l'esecuzione all'interno della stessa sessione di runtime?
Concettualmente, è possibile fare qualcosa come creare una funzione come stringa, compilarla in memoria e in qualche modo collegarla nuovamente al file binario che viene eseguito?
Ci sono molti compilatori Lisp efficienti là fuori. Ci sono macchine virtuali compilate con JIT come .NET e JVM. Ci sono compilatori C incorporabili (tcc, clang). È anche abbastanza semplice generare LLVM IR direttamente, con tutti i vantaggi di un potente compilatore di ottimizzazione. –
E anche gli interpreti C++ sono ampiamente utilizzati, vedere CINT e ROOT. –