Sto cercando linguaggi di programmazione con un certo paradigma o il nome del paradigma che funziona come segue:
- Inizi a scrivere il codice sorgente di un programma o qualcosa di simile a uno script.
- Questo viene quindi eseguito dal "compilatore" (interpretato o appena compilato nel tempo) e produce un eseguibile effettivo.
- Esegui il codice macchina prodotto.
Quindi il compilatore non traduce solo il codice sorgente in codice macchina, ma fornisce anche un ambiente runtime mentre lo fa. Il codice viene eseguito dal compilatore in uno, senza interazione dell'utente, solo il codice sorgente come input (nessun ciclo Read-eval-print, console o simili).
Ad esempio, C ++ (11/14/17) quindi andare in questa direzione con cose come i modelli ricorsivi e constexpr, dove possono essere eseguite intere funzioni in fase di compilazione (non di runtime). Ma lo immagino ancora più generico e permettendo di riflettere (come Smalltalk, dove tutto è un oggetto). Potrebbe aiutare a ridurre la ridondanza del codice sorgente e consentire una maggiore astrazione.
Esempio di codice:
const char* names[] = { "a", "b", "c", ... };
template<int size>
struct S {
assert(size < sizeof(names)/sizeof(void*));
for(int i = 0; i < size; ++i)
this.add_field(Type::float, names[i]);
}
Questo non può essere fatto in C / C ++, D ha un po 'più di funzioni come ifs statico e così via, ma nessuna lingua che conosco lo supporta.
Esiste un nome per questo paradigma e ci sono linguaggi che si basano strongmente su di esso?