<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; Релиз Cheerp 1.3, компилятора C++ в JavaScript ]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=38494</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=38494&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Релиз Cheerp 1.3, компилятора C++ в JavaScript ».]]></description>
		<lastBuildDate>Thu, 09 Feb 2017 16:33:02 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Релиз Cheerp 1.3, компилятора C++ в JavaScript ]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=452003#p452003</link>
			<description><![CDATA[<p><br />&nbsp; &nbsp; После года разработки состоялся&nbsp; релиз&nbsp; Cheerp 1.3 (бывший Duetto), открытого инструментария для разработки клиентских и серверных web-приложений на языке C++, а также для портирования существующих C++ программ для работы в Web-браузере. Код распространяется под свободной лицензией UI/NCSA, также используемой в проекте LLVM. Библиотеки поставляются под лицензией&nbsp; GPLv2+.&nbsp; &nbsp; &nbsp; По своей сути Cheerp напоминает систему Emscripten и также использует наработки LLVM для обеспечения компиляции кода C++ в представление на языке JavaScript. Ключевым отличием Cheerp от Emscripten является ориентация на достижении более высокой производительности получаемого JavaScript-кода и предоставление средств для использования из С++ программ всех возможностей DOM, браузерного API и HTML5, в том числе WebGL. Cheerp не пытается, как Emscripten, эмулировать традиционное адресное пространство при помощи типизированных массивов, а обеспечивает прямой маппинг C++ объектов в объекты JavaScript, что позволяет снизить потребление памяти, так как сборщик мусора JavaScript имеет возможность удалять неиспользуемые объекты. Cheerp также поддерживает использование стандартных библиотек libc и libc++, и позволяет применять инструменты сборки cmake/autotool.&nbsp; &nbsp; &nbsp;По поставленным перед проектом задачам Cheerp позиционируется как платформа для создания интегрированных клиент/серверных web-приложений на языке C++. В существующей практике, обычно используется выполняемый в браузере фронтэнд, написанный на языке JavaScript или компилируемый в JavaScript из&nbsp; Coffe­Script, Microsoft Type­Script, Google Dart, Google GWT, с раздельной серверной частью на языках&nbsp; PHP, Python, Ruby или JavaScript/node.js. Cheerp предоставляет средства для создания целостных web-приложений на языке C++, в которых бэкенд и фронтэнд поддерживаются в единой кодовой базе. В процессе компиляции серверная часть компилируется в нативный код, а интерфейс преобразуется в JavaScript-представление. Отладка всех компонентов проекта, в том числе преобразуемых в JavaScript, осуществляется&nbsp; по исходным текстам на языке C++ с использованием технологии Source Map (при возникновении ошибки можно увидеть участок кода на C++, поддерживается установка точек останова в коде C++ и построчного пошагового выполнения С++ кода).&nbsp; &nbsp; &nbsp; В новом выпуске отмечено значительное увеличение производительности кода, скомпилированного в Cheerp. Значительного ускорения удалось добиться не только оптимизацией кода компилятора, но и благодаря совместной работе с разработчиками движка SpiderMonkey, используемого в Firefox. В итоге, по сравнению с прошлым выпуском код проектов на языке C++, скомпилированный в JavaScript при помощи Cheerp 1.3, стал выполняться в браузере в среднем на 11% быстрее. В ресурсоёмких тестах выигрыш составляет около 25%, в тесте на основе физического движка Bullet - 33%, а в тесте Box2D - 20%.&nbsp; &nbsp;<span class="postimg"><img src="https://www.opennet.ru/opennews/pics_base/0_1486668986.png" alt="https://www.opennet.ru/opennews/pics_base/0_1486668986.png" /></span><br />&nbsp; &nbsp; При сравнении со скоростью выполнения нативного кода, собранное в&nbsp; &nbsp;Cheerp представление на JavaScript работает медленнее приложения сокмпилированного в машинный код в среднем в 2.5 раза. Если сузить выборку до крупных тестов (Bullet, Box2D), то в 3.7 раза.&nbsp; &nbsp; <span class="postimg"><img src="https://www.opennet.ru/opennews/pics_base/0_1486669313.png" alt="https://www.opennet.ru/opennews/pics_base/0_1486669313.png" /></span><br />&nbsp; &nbsp; Результирующий размер сгенерированного в новой&nbsp; версии кода стал в среднем на 25% меньше, чем при использовании Cheerp 1.2, и на 5-40% меньше по сравнению с&nbsp; результатами компиляции в Emscripten.&nbsp; &nbsp; <span class="postimg"><img src="https://www.opennet.ru/opennews/pics_base/0_1486668607.png" alt="https://www.opennet.ru/opennews/pics_base/0_1486668607.png" /></span><br />&nbsp; &nbsp; &nbsp; В новой версии также проведена работа по улучшению работы генератора кода, расширению спектра поддерживаемых конструкций C++ и улучшению переносимости с JavaScript. Улучшена работа алгоритма PreExecuter, обеспечивающего упреждающее выполнение порций кода на этапе компиляции. Например, в текущей реализации PreExecuter используется для исключения запуска во время выполнения JavaScript консрукторов, используемых для инициализации глобальных объектов C++, которые можно вычислить на этапе компиляции и добавить в JavaScript в виде инициализированного среза памяти. В новой версии подобный метод упреждающей инициализации стал доступен для сложныъ структур данных.&nbsp; &nbsp; В области переносимости между&nbsp; C++ и JavaScript/Web API улучшена поддержка тега &quot;[[cheerp::jsexport]]&quot;, который теперь может применяться для отдельных функций, а не только для классов, что позволяет представить в JavaScript любую часть приложения C++. В новой версии также сняты ограничения по определению глобальных переменных&nbsp; в пространстве имён клиента, улучшена поддержка&nbsp; вариативных аргументов и расширена поддержка объединений (union). Для упрощения выявления некорректно сгенерированного JavaScript-кода в компилятор добавлены две новые опции (-cheerp-bounds-check и -cheerp-defined-members-check) для выполнения дополнительных проверок.&nbsp; <br />&nbsp; &nbsp; Источник: <strong>http://www.opennet.ru/opennews/art.shtml?num=46011</strong><br />&nbsp; &nbsp; <br /><a href="http://www.opennet.ru/opennews/art.shtml?num=46011">_источник</a></p>]]></description>
			<author><![CDATA[null@example.com (R2-D2)]]></author>
			<pubDate>Thu, 09 Feb 2017 16:33:02 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=452003#p452003</guid>
		</item>
	</channel>
</rss>
