"Cose sbagliate" qui significa il sovraccarico necessario all'interprete per analizzare ed elaborare il codice. È collegato alla nozione di linguaggi interpretati e compilati. Esistono diversi modelli di traduzione del codice in uso, che ricadono approssimativamente in una delle seguenti categorie:
- Compilazione nativa: il codice sorgente viene compilato direttamente nel codice macchina. Le migliori prestazioni a scapito della portabilità. Comunemente associato a C e C ++,
- Compilazione intermedia - il codice sorgente è compilato in un linguaggio intermedio semplificato (bytecode), che viene successivamente interpretato o compilato (compilazione just-in-time) in codice macchina durante l'esecuzione. Portabilità migliore rispetto al codice nativo, prestazioni migliori rispetto alla pura interpretazione pur mantenendo alcuni dei lati positivi dell'interpretazione (come l'associazione tardiva). Gli esempi includono C #, Java e altri linguaggi che hanno come target JVM e .NET CLR,
- Interpretazione - il codice sorgente non viene tradotto direttamente in codice macchina, ma è interpretato ed eseguito da un programma interprete dedicato. Gli interpreti variano in termini di sofisticazione, nell'implementazione ingenua, tuttavia si riduce all'analisi, all'analisi e all'esecuzione del codice sorgente riga per riga. L'interpretazione consente una maggiore flessibilità rispetto alla compilazione, quindi i linguaggi interpretati fanno un uso più ampio della tipizzazione dinamica o della riflessione, ad esempio. I linguaggi interpretati sono spesso visti come un aumento della produttività degli sviluppatori, in quanto richiedono un numero inferiore di codice e si prestano bene alla prototipazione rapida. Il lato negativo è una prestazione ridotta. Comunemente associato a JavaScript, Ruby o Python.
Quindi la scelta tra linguaggio interpretato e compilato si riduce alla domanda, cosa apprezziamo di più, produttività degli sviluppatori o prestazioni? La migrazione descritta nell'articolo sembra seguire la stessa linea di pensiero, con un linguaggio di prototipazione strong che Ruby viene sostituito da Scala basato su JVM a causa di considerazioni sulle prestazioni.