В статье говорится о трудностях оптимизации, возникающих из-за чрезвычайно динамичных языков, таких как JavaScript, плюс наследование прототипов.
В таких языках, как Ruby или JavaScript, структура программы может изменяться во время выполнения.Классы могут получить новый метод, функции могут быть созданы eval () и многое другое.Это усложняет время выполнения для оптимизации их кода, потому что никогда не гарантируется, что структура будет задана.
Прототипное наследование труднее оптимизировать, чем более традиционные языки на основе классов.Я подозреваю, что это связано с многолетним опытом исследований и внедрения виртуальных машин на основе классов.
Интересно, что V8 (движок JavaScript Chrome) использует скрытые классы как часть своей стратегии оптимизации.Конечно, JS не имеет классов, поэтому в V8 макет объекта более сложный.
Макет объекта в V8 требует минимум 3 слов в заголовке.В отличие от виртуальной машины Dart требуется всего 1 слово в заголовке.Размер и структура объекта Dart известны во время компиляции.Это очень полезно для разработчиков виртуальных машин.
Другой пример: в Dart есть реальные списки (или массивы).У вас может быть список фиксированной длины, который проще оптимизировать, чем нереальные массивы JavaScript и всегда переменной длины.
Подробнее о компиляции Dart (и JavaScript) в эффективный код с этой презентацией: http://www.dartlang.org/slides/2013/04/compiling-dart-to-efficient-machine-code.pdf
Другим аспектом производительности является время запуска.По мере усложнения веб-приложений количество строк кода увеличивается.Конструкция JavaScript усложняет оптимизацию запуска, потому что синтаксический анализ и загрузка кода также выполняет код.В Dart язык был тщательно разработан, чтобы его можно было быстро проанализировать.Dart не выполняет код, так как загружает и анализирует файлы.
Это также означает, что виртуальные машины Dart могут кэшировать двоичное представление проанализированных файлов (называемое снимком) для еще более быстрого запуска.