Penso che tu sia sostanzialmente corretto. Un runtime linguistico è già un sistema completamente flessibile e basato sui dati. Prende un pezzo di dati (il programma) e lo usa per determinare come dovrebbe agire su altri dati. Potrebbe anche avere uno schema multiutente per memorizzare il codice da riutilizzare da altri programmi (che vanno da un percorso di inclusione a una corretta gestione dell'installazione).
Un "linguaggio di scripting", in parole povere, è un runtime di linguaggio in cui questo input di codice è leggibile. Un compilatore pone un passaggio in più tra l'utente e il runtime. Le lingue "Joke" come Malbolge e APL non devono necessariamente essere leggibili in alcun modo. Ma è la stessa cosa a un livello, e comunque leggibile dall'uomo non significa che tutti i potenziali utenti abbiano le capacità per leggerlo o scriverlo, o ci si può aspettare che lo sviluppino.
Ci sono buone ragioni perché normalmente non esporti un runtime di lingua direttamente agli utenti finali. Il principale è che la rimozione della flessibilità aumenta la praticità.
Se voglio scrivere un post SO, voglio solo scriverlo. Sono perfettamente in grado di scrivere invece un programma C ++ per l'output, ma non utilizzerei un browser Web che esponeva un editor di programmi C ++ al posto di una normale casella di testo. Le persone che non conoscono il C ++ non solo non userebbero il browser, non potevano.
Se voglio configurare determinati parametri di business, non voglio necessariamente farlo usando un linguaggio di specifica completo di Turing, e anche se l'ho fatto questo probabilmente non è distinguibile da "hard- codifica "quegli stessi parametri di business in qualsiasi altro linguaggio di programmazione. Hai ancora bisogno di considerare se ciò che stai scrivendo significa ciò che vuoi che significhi. Hai ancora bisogno di testare che le modifiche siano corrette. Cioè, hai ancora bisogno di capacità di programmazione per qualsiasi compito che non sia banale e non anticipato da qualcuno che fa abbia capacità di programmazione che hanno preparato un sottosistema specializzato ("applicazione") da configurare ( "uso").
Quindi, se stai per imbarcarti in un sistema basato sui dati al 100%, che può fare qualsiasi cosa, dati i giusti dati, hai due domande da porsi:
- Siamo nel business di inventare i linguaggi di programmazione, o dovremmo esserlo?
- Il nostro nuovo linguaggio di programmazione sarà migliore (per i nostri scopi) di quello che abbiamo già e lo supporteremo e lo svilupperemo in base alle esigenze?
A volte le risposte sono sì e scrivi un linguaggio specifico del dominio. O anche un vero linguaggio di programmazione generico se sei Sun / Microsoft / Stroustrup / van Rossum / molti altri. A volte le risposte sono no e hai l'effetto "piattaforma interna" - dopo molti sforzi e tentativi ed errori si finisce con qualcosa. Se sei fortunato è solo leggermente inferiore al linguaggio di programmazione in cui l'hai scritto e non è più facile da usare.
Alcune lingue sono più difficili o più facili da usare rispetto ad altre, in particolare se sono specializzate per uno scopo come R, quindi alcuni utenti le troveranno molto più facili. Ciò che probabilmente non farai, è rendere la programmazione di applicazioni generali fondamentalmente più semplice. In qualsiasi momento ci sono probabilmente diverse persone / organizzazioni nel mondo che hanno il potenziale per farlo, ma il tuo capo / azienda deve onestamente considerare se includerlo o meno.
C'è un trucco spesso usato per i giochi, che è quello di esporre i binding Lua al motore del gioco. Ciò consente ai progettisti di programmare in un linguaggio relativamente facile, ma coinvolgere comunque un programmatore "reale" ove necessario per le prestazioni o per accedere a particolari funzionalità del motore o della piattaforma. Gli script Lua risultanti sono "dati" per quanto riguarda il motore. Non tutti hanno bisogno di includere gran parte di ciò che chiamereste "logica" in contrapposizione ai dati di configurazione, e spesso definiscono praticamente tutta la trama e l'ambiente, ma non l'intero gameplay. Questo non è al 100% guidato dai dati e certamente non è al 100% privo di errori, ma è un compromesso pratico interessante.