The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз Cheerp 1.3, компилятора C++ в JavaScript

09.02.2017 22:33

После года разработки состоялся релиз Cheerp 1.3 (бывший Duetto), открытого инструментария для разработки клиентских и серверных web-приложений на языке C++, а также для портирования существующих C++ программ для работы в Web-браузере. Код распространяется под свободной лицензией UI/NCSA, также используемой в проекте LLVM. Библиотеки поставляются под лицензией GPLv2+.

По своей сути Cheerp напоминает систему Emscripten и также использует наработки LLVM для обеспечения компиляции кода C++ в представление на языке JavaScript. Ключевым отличием Cheerp от Emscripten является ориентация на достижении более высокой производительности получаемого JavaScript-кода и предоставление средств для использования из С++ программ всех возможностей DOM, браузерного API и HTML5, в том числе WebGL. Cheerp не пытается, как Emscripten, эмулировать традиционное адресное пространство при помощи типизированных массивов, а обеспечивает прямой маппинг C++ объектов в объекты JavaScript, что позволяет снизить потребление памяти, так как сборщик мусора JavaScript имеет возможность удалять неиспользуемые объекты. Cheerp также поддерживает использование стандартных библиотек libc и libc++, и позволяет применять инструменты сборки cmake/autotool.

По поставленным перед проектом задачам Cheerp позиционируется как платформа для создания интегрированных клиент/серверных web-приложений на языке C++. В существующей практике, обычно используется выполняемый в браузере фронтэнд, написанный на языке JavaScript или компилируемый в JavaScript из Coffe­Script, Microsoft Type­Script, Google Dart, Google GWT, с раздельной серверной частью на языках PHP, Python, Ruby или JavaScript/node.js. Cheerp предоставляет средства для создания целостных web-приложений на языке C++, в которых бэкенд и фронтэнд поддерживаются в единой кодовой базе. В процессе компиляции серверная часть компилируется в нативный код, а интерфейс преобразуется в JavaScript-представление. Отладка всех компонентов проекта, в том числе преобразуемых в JavaScript, осуществляется по исходным текстам на языке C++ с использованием технологии Source Map (при возникновении ошибки можно увидеть участок кода на C++, поддерживается установка точек останова в коде C++ и построчного пошагового выполнения С++ кода).

В новом выпуске отмечено значительное увеличение производительности кода, скомпилированного с использованием Cheerp. Значительного ускорения удалось добиться не только оптимизацией кода компилятора, но и благодаря совместной работе с разработчиками движка SpiderMonkey, используемого в Firefox. В итоге, по сравнению с прошлым выпуском код проектов на языке C++, скомпилированный в JavaScript при помощи Cheerp 1.3, стал выполняться в Firefox в среднем на 11% быстрее. В ресурсоёмких тестах выигрыш составляет около 25%, в тесте на основе физического движка Bullet - 33%, а в тесте Box2D - 20%.

При сравнении со скоростью выполнения нативного кода, собранное в Cheerp представление на JavaScript работает в среднем в 2.5 раза медленнее приложения, скомпилированного в машинный код. Если сузить выборку до крупных тестов (Bullet, Box2D), то в 3.7 раза.

Результирующий размер сгенерированного в новой версии кода стал в среднем на 25% меньше, чем при использовании Cheerp 1.2, и на 5-40% меньше по сравнению с результатами компиляции в Emscripten.

В новой версии также улучшена работа генератора кода, расширению спектра поддерживаемых конструкций C++ и улучшению переносимости с JavaScript. Улучшена работа алгоритма PreExecuter, обеспечивающего упреждающее выполнение порций кода на этапе компиляции. Например, в текущей реализации PreExecuter используется для исключения запуска конструкторов во время выполнения в браузере. Конструкторы, используемые для инициализации глобальных объектов C++, можно вычислить на этапе компиляции и добавить в JavaScript в виде инициализированного среза памяти. В новой версии подобный метод упреждающей инициализации стал доступен и для сложных структур данных.

В области переносимости между C++ и JavaScript/Web API улучшена поддержка тега "[[cheerp::jsexport]]", который теперь может применяться для отдельных функций, а не только для классов, что позволяет отразить в объекты JavaScript любую часть приложения C++. В новой версии также сняты ограничения по определению глобальных переменных в пространстве имён клиента, улучшена поддержка вариативных аргументов и расширена поддержка объединений (union). В компилятор добавлены две новые опции (-cheerp-bounds-check и -cheerp-defined-members-check) для выполнения дополнительных проверок, упрощающих выявление некорректно сгенерированного JavaScript-кода.

  1. Главная ссылка к новости (http://blog.leaningtech.com/20...)
  2. OpenNews: Проект Browsix развивает окружение для запуска Unix-программ в браузере
  3. OpenNews: Chrome, Firefox и Edge перешли на новый этап тестирования технологии WebAssembly
  4. OpenNews: Представлен Cheerp 1.2, компилятор C++ в JavaScript
  5. Вышел Pythonium 0.4.7, компилятор из Python в JavaScript
  6. OpenNews: Увидел свет Emscripten 1.4, компилятор байткода LLVM в JavaScript-представление
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/46011-compile
Ключевые слова: compile, javascript, emscripten, cheerp
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (35) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, pechen.treski (?), 00:12, 10/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Не судите строго, но вот у меня вопрос. Язык программирования подбирается под конкретную задачу. Нарисовать график из бигдаты (и блевануть от отвращения) - R. Нужен магазин - похапе (куришь электронные сигареты - тогда Ruby). Но вот такие транспайлеры (ок, инструмент для портирования существующих C++ программ для работы в Web-браузере) - он для чего? Можно пример?
     
     
  • 2.5, Crazy Alex (ok), 00:19, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну вот мой случай - подробности не могу разгласить, но общая суть такова. Был некий компонент на C, разработанный для мобил. И его заказчику очень захотелось иметь в вебе. Переписать - ресурсов не хватит, оно БОЛЬШОЕ, писалось не один год и далеко не одним человеком. Emscripten выручил.
     
     
  • 3.11, Аноним (-), 00:24, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Есть опыт юзанья эмскриптена.
    Вот ни за что не поверю, что большой проект на С удалось таким образом в вебе запустить легче, чем переписать все с нуля. Хоть тресни, но не поверю.
     
     
  • 4.14, Crazy Alex (ok), 00:29, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Скажем так - на переписывание ушло бы минимум в сто раз больше времени. Что было бы совершенно неподъёмно.

    Но недоверие понимаю - самого оторопь иногда ебрёт, что мы это таки смогли учудить. Оно не просто большое - оно монстр, больше 50 мегабайт минифицированного (но не жатого) JS на выходе.

     
     
  • 5.31, Ананас (?), 17:41, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    И таки вы хотите убедить нас, что оно работало "в вебе"?
     
     
  • 6.34, Crazy Alex (ok), 20:30, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Говорю же - сам диву даюсь. Единственное, что его не пережило - IE11, в edge - и то нормально. Грузится, конечно, пару минут при первом запуске, дальше - побыстрее, а сама работа - максимум втрое медленнее натива. Оверхед по памяти по сравнению с сями тоже на удивление приемлемый - мегабайт 50-70 (оно и в нативе редко меньше ста жрёт).
     
  • 4.15, Аноним (-), 00:29, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Напиши интерпретатор питона с нуля.
    Благодаря компилятору появился такой проект как pypyjs (http://pypyjs.org)
     
  • 4.32, Аноним (-), 17:55, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Хоть тресни, но не поверю.

    Тресну. https://epicport.com/en/ttd

     
  • 3.26, Аноним (-), 06:36, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    netfilter, LVM можно туда запихать?
     
     
  • 4.30, Crazy Alex (ok), 15:04, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Куски ядра туда записать? Не, ну если совсем не дружить с головой или развлекаться по полной, как Беллард...

    Основной вопрос - зачем? Вот зачем туда нужно засунуть монолитное гуёвое приложение, в которое вложена куча ресурсов - я хоть примерно понимаю.

     
  • 2.27, Аноним (-), 09:07, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Чтобы переписать всё на JS и запускать ОС в браузере. И ничего с этим трендом не поделаешь - такими категориями мыслит молодое поколение айтишников.
     
     
  • 3.41, KroTozeR (ok), 00:16, 12/02/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    А самое страшное, что вылечить такой тотальный маразм сможет лишь глобальный звиздец бизнеса, построенного на всей этой ВЕБ-хрени. Т.е., когда все эти школо-плебеи от ВЕБ-а, гордо и бессмысленно понтующиеся знакомством с Over100+ ВЕБ-фреймворков, всей сапой дружно и крупно попадут на деньги.

    То, ради чего на самом деле разрабатывалась Java, было отправлено к чертям в угоду низкого порога вхождения на HTML+JS+CSS. И всё для чего? Чтоб из трактора сделать бомбардировщик? Понаписать этой хрени, провозгласить браузер средой исполнения??? До они просто БОЛЬНЫЕ ПСИХИ!!! Теперь, вот, на C/C++ покушаются. Только этого не хватало...

    Я, конечно, всегда знал, что бизнес падок на громкие "технологии", как африканский туземец на бусы, но это уже — откровенный маразм... Вон уже даже Microsoft решили Skype продвигать в виде ВЕБ-приложения без нативной альтернативы... Зафига тогда вообще все эти гигагерцы с террабайтами???

    Это не вам лично вопросы. Просто крик души программиста, знающего устройство ПК, пишущего на C/C++ с применением иногда Assembler-а. Человека, который помнит, какие чудеса автоматики делались на Z80.

     
     
  • 4.45, Валик228 (?), 08:52, 15/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    это уже не тот скайп. там от скайпа остался "вебчатик с войсом и видео" и этому гогвну самое место в браузере, а вот нативную программу писать под него - верх идиотизма.
     
     
  • 5.46, KroTozeR (ok), 10:28, 15/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > это уже не тот скайп. там от скайпа остался "вебчатик с войсом
    > и видео" и этому гогвну самое место в браузере, а вот
    > нативную программу писать под него - верх идиотизма.

    К сожалению, лучше пока ничего не придумали. Альтернативодеятели копируют от скайпа не самые лучшие черты.

    Например, чего НЕ копируют, а стоило бы:

    * Возможность редактировать и удалять сообщения в течении N-го времени после их написания;
    * Поддержку тегов для форматирования текста, управления чатом, группами, использования скрытых смайлов;
    * Возможность нативной отправки файлов через Torrent-сеть;
    * Локальное кэширование сообщений и контактов в БД;
    * Трансляция рабочего стола в момент разговора;
    * И т.д. и т.п...

     
     
  • 6.47, Ананамус (?), 16:08, 16/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    За редактирование и удаление надо руки выкручивать.
    Я помню под скайп писал программку которая ловит сообщения и логает отдельно, т.к. общался с человеком который любил заниматься удалением и перевиранием.
    Должно быть как в реальности - сказал так сказал, обратно не заберешь.
     
     
  • 7.49, KroTozeR (ok), 17:08, 16/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > За редактирование и удаление надо руки выкручивать.
    > Я помню под скайп писал программку которая ловит сообщения и логает отдельно,
    > т.к. общался с человеком который любил заниматься удалением и перевиранием.
    > Должно быть как в реальности - сказал так сказал, обратно не заберешь.

    Таким образом лишать пользователей возможности исправлять ошибки в тексте? Я бы откручивал руки, а заодно и голову за ОТСУТСТВИЕ возможности редактировать и удалять. Не нужно гробить столь нужный функционал из-за отдельно взятых идиотов. А логи не являются доказательством, кстати. Они легко могут быть поддельными. Можно предоставить функцию просмотра исходного варианта сообщения, в том числе и удалённого.

     

  • 1.6, Вы забыли заполнить поле Name (?), 00:21, 10/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    #include "jquery.h"
     
     
  • 2.23, Аноним (-), 04:07, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +5 +/
    А через пяток лет #include <jquery>
     
     
  • 3.42, key (??), 16:25, 12/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Что за ужасы вы пишите! Это могут читать дети!!!
     

  • 1.10, Вы забыли заполнить поле Name (?), 00:24, 10/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Эта технлогия имеет смысл, если уже есть проект на С++ (изначально написанный не под web) и его хочется запустить в браузере.
    А так ждем WebAssembly. Тогда уже можно говорить об использовании этой технологии только для web.
     
     
  • 2.12, Аноним (-), 00:26, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > А так ждем WebAssembly.

    Че там ждать то? Бери и юзай, уже все готово.

     
     
  • 3.17, Crazy Alex (ok), 00:31, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Где оно готово? В Chrome Canary? Или в ночных сборках файрфокса? Готово оно будет, когда окажется хотя бы процентов в 80 пользователей.
     

  • 1.22, Аноним (-), 03:40, 10/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Мне почему - то всегда казалось что скомпелировать можно только в машинный код, il, а в друной яп - это называется транслировать
     
     
  • 2.24, Вася (??), 06:17, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Тоже недоумеваю от заголовка. Я ещё в ВУЗ курсе на 3-4 писал именно транслятор с С на Фортран в качестве курсовой...
     
     
  • 3.29, LinuxID (ok), 09:22, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Я в свое время (лет 25 назад) писал конвертер из Basic на asm для ZX-Spectrum на его же встроенном Basic'е. Получилось только циклы оптимизировать.
     
  • 2.33, freehck (ok), 18:16, 10/02/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да, да. И не хакеры, а кракеры. И не пинги, а латентность сети.
    Что уж тут поделать, если ошибки так часто повторяются, что все привыкли...
     
     
  • 3.35, Ю.Т. (?), 10:38, 11/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    и не скомпелировать, а скомпилировать
     
     
  • 4.36, freehck (ok), 16:04, 11/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > и не скомпелировать, а скомпилировать

    Это ещё что. На албанских форумах я видел вариант "сканпелять". Вот уж что звучало дико. :)

     
     
  • 5.44, Аноним (-), 10:05, 13/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Это они на ксерокс ругались.
     
  • 2.40, Аноним (-), 17:16, 11/02/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А что считать машинными инструкциями? Внутри процессоров Intel команды интерпретируются в нечто risc-подобное
     
     
  • 3.43, key (??), 16:27, 12/02/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > А что считать машинными инструкциями? Внутри процессоров Intel команды интерпретируются
    > в нечто risc-подобное

    Архитектурные команды. Другой апи только у интела

     

  • 1.28, Аноним (-), 09:16, 10/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Так это они что ли продвигают MS Office Online? (сарказм)
     
  • 1.37, Аноним (-), 16:36, 11/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Я одного не понимаю, а как же гуй? Вот есть десктопная софтина, работает с gtk, qt, whatever. Как оно в браузере заработает?
     
  • 1.39, Аноним (-), 17:14, 11/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А где-то есть сравнение бенчмарков с Emscripen?
     
  • 1.48, Аноним (-), 16:12, 16/02/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я не понимаю, зачем. есть же emscripten
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру