Cheerp C ++ на JavaScript


Возможно, вы знаете, что emscripten — это компилятор goto C ++ в JavaScript, но есть и другие. Cheerp, например, работает немного иначе, и его последняя версия 1.1 работает быстрее.

Версия 1 Cheerp была выпущена около года назад. Это компилятор C ++ для JavaScript с открытым исходным кодом, который имеет дополнительную коммерческую поддержку.

Ключевой особенностью новой версии Cheerp является то, что она стала быстрее. Он компилируется в JavaScript, а не в asm.js, как emscripten, и использует другую модель памяти. Вместо использования большого типизированного массива в качестве рабочей памяти Cheerp компилирует объекты C ++ в объекты JavaScript.
Единственным недостатком этого более сложного подхода является то, что исходный код C ++ подвергается более строгой типизации, чем обычно. Утверждается, что на практике большая часть кода C ++ уже хорошо типизирована, а дополнительная работа минимальна.
Ключевой особенностью использования объектов JavaScript для всех данных является то, что использование памяти не ограничивается массивом фиксированного размера. Еще одно почти случайное преимущество заключается в том, что код Cheerp не уязвим для переполнения буфера, поскольку структура памяти не является глобально линейной и всегда применяется защита памяти JavaScript.
Поскольку код представляет собой стандартный JavaScript, он загружается быстрее, чем asm.js, который необходимо проверить перед запуском. Тесты показывают типичное сокращение с 50 мс до примерно 10 мс для asm.js emscripten по сравнению с Cheerp.
После загрузки кода Cheerp 1.1 также работает быстрее; по сравнению с версией 1 последний Cheerp работает в четыре-шесть раз быстрее. Этого недостаточно, чтобы сделать его быстрее, чем emscripten, но теперь они сопоставимы по небольшим тестам, и какой из них будет впереди, зависит от задачи и используемого движка JavaScript. В тестах Cheerp всегда показывал производительность не хуже 10x, а для многих задач этого хватало.
Для более крупных и сложных программ Cheerp по-прежнему медленнее, чем emscripten, в худшем случае в 3–5 раз, но команда уверена, что знает, как догнать следующую версию, поскольку еще предстоит сделать оптимизацию. Вы также должны помнить, что все это делается без использования ускорения, которое может обеспечить asm.js. В будущих версиях планируется разрешить выбор компиляции asm.js для каждого объекта.
В целом Cheerp — интересная альтернатива emscripten, которая обеспечивает более быстрый запуск, лучшую масштабируемость из-за способа выделения памяти и лучшую безопасность с относительно небольшим падением производительности в некоторых случаях.
.


Добавить комментарий