Sto lavorando su un progetto C ++ di medie dimensioni (probabilmente finirò per circa 50k linee) e dovrò fornire un'interfaccia terminale interattiva. Il programma produce dati scientifici come output e l'interfaccia interattiva consente a un ricercatore di modificare una rappresentazione visiva di ciò che verrà calcolato prima di completare effettivamente il calcolo.
Non sono appassionato di programmi interattivi che definiscono il proprio linguaggio poiché sono tutti diversi (che portano a confusione) e se supportano molte funzioni quasi richiedono allo sviluppatore di implementare un interprete di "corretto" parser per sintassi.
Mi piacerebbe anche la possibilità di definire i file di configurazione "intelligenti" usando questo programma (evitando così la necessità di copiarlo esternamente).
Mi sembra che la risposta corretta sia quella di implementare un linguaggio di scripting esistente con una propria libreria di supporto che possa creare callback in C ++. Da quando gioco con Common Lisp di recente ho deciso di provare a farlo usando ECL (follemente eccessivo per i miei scopi) e ho associato le funzioni a Lisp e ho creato un Lisp REPL in grado di eseguire questi callback.
Mentre questo funziona più o meno, questo non sembra essere il caso d'uso per cui ECL è stato progettato, dal momento che devo fare un grande sforzo per estrarre l'input dell'utente in modo sicuro, e io m utilizzando pochissime funzionalità.
Questa non è una richiesta per un suggerimento di libreria (anche se accetterei felicemente anche una risposta), ma una domanda metodologica. I miei utenti non sono eccessivamente abituati a molti linguaggi di programmazione (il dipartimento utilizza principalmente IDL), ed è raro che venga utilizzata qualsiasi altra lingua. Un'implementazione Common Lisp completa sembra un vero e proprio maglio per rompere un dado e la sintassi sarà abbastanza estranea agli utenti (che per molti versi è quello che volevo evitare usando una lingua predefinita).
Sto esaminando il problema della costruzione di un ambiente REPL dalla direzione sbagliata - dovrei invece costruire il mio programma in una libreria e utilizzare un linguaggio interattivo con FFI contro di esso?
In sostanza:
- Voglio aggiungere un sistema REPL like al mio programma C ++ affinché l'utente possa impostare i suoi dati.
- Preferirei evitare di definire il mio dialetto / sintassi / linguaggio per questo scopo, invece di usare un interprete già pronto e richiamare semplicemente in C ++
- Sarebbe bello avere la possibilità di usarlo per i file di configurazione "intelligenti", che hanno una logica al loro interno (flusso di controllo di base e aritmetica).
- Facile da usare il più possibile per i non programmatori.
Se hai risolto questo problema / hai avuto un dilemma simile in passato sarei interessato a sentire i tuoi pensieri (ho capito che questo è piuttosto un argomento basato sull'opinione pubblica). Grazie!