Per quanto ne so e capisco,linguaggi statici e di riflessione
Riflessione è la capacità di creare/modificare il codice sorgente in fase di esecuzione.
Da Wikipedia:
- Discover e modificare costruzioni codice sorgente (come blocchi di codice, classi, metodi, protocolli, ecc) come oggetto prima classe al runtime.
- Converti una stringa che corrisponde al nome simbolico di una classe o funzione in un riferimento a o una chiamata di tale classe o funzione.
- Valuta una stringa come se fosse un'istruzione di codice sorgente in fase di esecuzione.
Creare un nuovo interprete per il codice byte della lingua per dare un nuovo
significato o scopo per un costrutto di programmazione.
I linguaggi dinamici sono linguaggi che possiamo eval (valutare diretto dalla stringa) a run-time.
Da wikipedia: "estensione del programma, con l'aggiunta di nuovo codice, estendendo gli oggetti e le definizioni, o modificando il sistema di tipo"
Ok, ora, la mia domanda è: Come statica lingua ד (senza capacità di valutazione) può avere una riflessione (ad es. Java)? (il nuovo codice sorgente non valuta?: /)
Grazie in anticipo!
Java ha una libreria di manipolazione del codice byte chiamata [ASM] (http://asm.ow2.org/).Reflection non viene utilizzato per aggiungere nuovo codice come descritto nella domanda. –
Reflection consente di alterare (sì, può essere dannoso in alcuni casi) con una classe interrogando sui suoi metodi, campi, livelli di accesso e simili ma non si genera nuovo codice_. Ha altri usi come, ad esempio, il richiamo di un metodo definito in alcune classi basato solo sui dati su di esso (* metadata *). Ottieni un'istanza da una classe, ne ottieni un metodo basato sulla sua azienda e quindi la invochi. – Gamb
@Gamb 10x, ma se si modifica un codice sorgente, quindi si genera un codice sorgente (come dice wikipedia), vero? – gran33