L'articolo si riferisce alle difficoltà di ottimizzazione che provengono da linguaggi estremamente dinamici come JavaScript, più ereditarietà prototipale.
In lingue come Ruby o JavaScript, la struttura del programma può cambiare in fase di esecuzione. Le classi possono ottenere un nuovo metodo, le funzioni possono essere eval() ed esistenti e altro ancora. Ciò rende più difficile ai runtime di ottimizzare il loro codice, perché la struttura non è mai garantita per essere impostata.
L'ereditarietà del prototipo è più difficile da ottimizzare rispetto a più tradizionali linguaggi basati su classi. Sospetto che ciò dipenda dal fatto che ci sono molti anni di esperienza di ricerca e implementazione per VM basate su classi.
È interessante notare che V8 (motore JavaScript di Chrome) utilizza classi nascoste come parte della sua strategia di ottimizzazione. Naturalmente, JS non ha classi, quindi il layout degli oggetti è più complicato in V8.
Il layout degli oggetti in V8 richiede un minimo di 3 parole nell'intestazione. Al contrario, la Dart VM richiede solo 1 parola nell'intestazione. La dimensione e la struttura di un oggetto Dart sono conosciute al momento della compilazione.Questo è molto utile per i progettisti VM.
Un altro esempio: in Dart sono presenti elenchi reali (ovvero matrici). Puoi avere una lista di lunghezza fissa, che è più facile da ottimizzare rispetto ai non-array di JavaScript e sempre a lunghezze variabili.
Per saperne di più sulla compilazione Dart (e JavaScript) per codice efficiente con questa presentazione: http://www.dartlang.org/slides/2013/04/compiling-dart-to-efficient-machine-code.pdf
dimensione Un'altra prestazione è il tempo di start-up. Man mano che le app web diventano più complesse, il numero di righe di codice aumenta. Il design di JavaScript rende più difficile ottimizzare l'avvio, poiché l'analisi e il caricamento del codice eseguono anche il codice. In Dart, il linguaggio è stato accuratamente progettato per renderlo veloce da analizzare. Dart non esegue il codice mentre carica e analizza i file.
Ciò significa anche che le macchine virtuali Dart possono memorizzare nella cache una rappresentazione binaria dei file analizzati (nota come snapshot) per un avvio ancora più rapido.
Benchmark o non è successo. Speculare sulle prestazioni di qualcosa che non è in vendita è una cazzata. – fijal
La cosa divertente è che Dart sembra essere ** più lento ** di JS. – c69