The OpenNET Project / Index page

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

Представлен Cheerp 1.2, компилятор C++ в JavaScript

02.02.2016 20:28

Увидел свет стабильный релиз Cheerp 1.2 (бывший 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++ и построчного пошагового выполнения С++ кода).

Новый выпуск основан на кодовой базе LLVM/Clang 3.7 и примечателен существенным сокращением времени загрузки и увеличением производительности выполнения получаемого JavaScript-кода. Итоговый JavaScript-код, генерируемый при помощи Cheerp с применением динамической системы управления памятью, всего в 2-6 раз медленнее скомпилированных из C++ машинных инструкций. По сравнению с Emscripten, JavaScript-код Cheerp заметно отстаёт при применении Asm.js в Emscripten, но в режиме Split Memory (без Asm.js, но позволяет выделять больше памяти) в 2-3 раза быстрее при исполнении средних и больших тестов и примерно на том же уровне при выполнении мелких тестов. По времени загрузки созданный в Cheerp код грузится в 10-11 раз быстрее, но так как разница в диапазоне миллисекунд, она не ощущается пользователем.





Из изменений, связанных с функциональностью, отмечается поддержка 64-разрядных целых чисел, возможность накопления информации о типах в процессе выполнения (RTTI - Runtime Type Information), расширение диагностических сообщений и экспериментальная поддержка изоляции генерируемого кода от других скриптов через его вынос в модули. Отдельно выделяется реализация техники PreExecuter, позволяющей преобразовывать C++-код инициализации глобальных структур в простые наборы данных, что существенно сокращает размер JavaScript-кода на выходе.

  1. Главная ссылка к новости (http://blog.leaningtech.com/20...)
  2. OpenNews: Открыт код Duetto, системы для запуска в web-браузере проектов на языке C++
  3. OpenNews: Вышел Pythonium 0.4.7, компилятор из Python в JavaScript
  4. OpenNews: Увидел свет Emscripten 1.4, компилятор байткода LLVM в JavaScript-представление
  5. OpenNews: Выпуск Duetto 0.9.6, системы для запуска в web-браузере проектов на языке C++
  6. OpenNews: Реализация языка Python на JavaScript и транслятор кода Python в JavaScript
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/43804-cpp
Ключевые слова: cpp, llvm, javascript, compile
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (46) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 20:49, 02/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    есть реальные примеры применения? только не надо про крузис в браузере на ультра
     
     
  • 2.3, Crazy Alex (ok), 21:04, 02/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Вот, например, один товарищ роазвлекался: http://gamemusic.multimedia.cx/js-prototype/
    Это Emscripten, правда.
     
     
  • 3.8, Аноним (-), 21:22, 02/02/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Linux firefox 44 - 30% firefox, 8% xorg. Почти всё тратится на вывод битмапа. Ну как всегда, я уже привык к тормозной графике в Linux :)
     
     
  • 4.17, Crazy Alex (ok), 01:20, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    а как смотрели, на что тратится?
     
     
  • 5.38, Никто (??), 15:10, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Профилировщик?
     
     
  • 6.49, Crazy Alex (ok), 22:32, 05/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Ну я вот не знаю, как в браузере выяснить, что время уходит именно на работу с битмапом,  а не на что-то ещё. во всяком случае, если не пытаться отлаживать сам браузер - а это очень стрёмное дело, и вышенаписавшйи аноним почти наверняка подобным не занимался.
     
  • 2.4, омномномнимус (?), 21:11, 02/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    по эмскриптен есть дофига примеров, правда я не встречал что-то использующееся на продакшене.
     
     
  • 3.7, Аноним (-), 21:15, 02/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    вот именно( вышел компилятор sh->python->c++->php->ruby->java->c#->etc...
     
     
  • 4.10, Вареник (?), 21:52, 02/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Все это зациклить :)
     
  • 3.14, Аноним (-), 23:33, 02/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > я не встречал что-то использующееся на продакшене.

    Копаться в разы больше чем с компиляцией нативного бинаря для того чтобы получить огромный и лагучий JS - развлечение на любителя.

     
  • 3.28, Alex (??), 09:35, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > не встречал что-то использующееся на продакшене.

    https://regex101.com/

     
  • 2.43, Аноним (-), 21:27, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    https://kagami.github.io/webm.js/ (как аналог онлайн-конвертверов, но не требующий сервера).
    Вот ещё дофига примеров: https://github.com/kripken/emscripten/wiki/Porting-Examples-and-Demos
     

  • 1.2, Аноним (-), 20:59, 02/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Из пустого в порожнее.
     
  • 1.6, печень трески (?), 21:14, 02/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Нельзя не вспомнить анекдот. Висит объявление: "Перевожу с грузинского и армянского на Ваганьковсое"
     
  • 1.9, Вареник (?), 21:51, 02/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    На что "люди" время тратят...
     
     
  • 2.23, Тот_Самый_Анонимус (?), 06:49, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Некоторые, например, других осуждают...
     
  • 2.25, Аноним (-), 07:52, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > На что "люди" время тратят...

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

     
     
  • 3.41, Вареник (?), 20:01, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> На что "люди" время тратят...
    > Надо принять закон о правильной трате времени людьми, а то у россияненов
    > остаётся слишком много времени на написание кода и на трындёж на
    > форуме, что приводит к различным угрозам тысячелетней суверенной государственности.

    Три ошибочных утверждения в одном предложении:
    - Причем здесь россияне к сабжу?
    - Причем здесь российские законы к сабжу?
    - Причем здесь российские законы ко мне?

    Ваши навязчивые думы о россиянах пробивают потолки неадеквата.

     

  • 1.11, Rodegast (??), 21:53, 02/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Компиляция в Java это хороший способ поднять спрос на оперативку!
     
     
  • 2.15, Аноним (-), 00:31, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Компиляция в Java это хороший способ поднять спрос на оперативку!

    Нет, компиляция в Script.

     
     
  • 3.31, Аноним (-), 11:36, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Нет, компиляция в Script.

    Тем более.

     
  • 2.24, Аноним (-), 07:49, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Шо ява, шо яваскрипт, какая в жепу разница?
     
     
  • 3.40, Аноним (-), 18:51, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Большая. Например Java машина куда более прожорливая, чем все JS движки.
     
     
  • 4.42, Вареник (?), 20:03, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Большая. Например Java машина куда более прожорливая, чем все JS движки.

    Движки без фреймворка, конечно они легче.

     
  • 2.37, Аноним (-), 15:02, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Высокой страсти не имея
    Для звуков жизни не щадить,
    Не мог он джав от джаваскриптов,
    Как мы ни бились, отличить.
     

  • 1.13, Lester (?), 22:41, 02/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Попробовал потыкать - выглядит интересно, особенно то, что есть API для коммуникации с браузером, а не просто тупо перегоняется абстрактный код.
     
  • 1.16, fa (??), 01:14, 03/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что это? Вот есть, например в C вызов bind. Что это будет в javascript?
     
     
  • 2.18, Crazy Alex (ok), 01:24, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    враппер для websocket api
     
     
  • 3.36, zy (?), 14:09, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Во-первых bind конечно же есть не в C а в libc.
    Во-вторых никакого враппера в вебсокеты не будет потому что websockets api и сокеты из сетевого стека ОС совершенно разного уровня фичи, и имеют слишком разные возможности, и соответственно семантику bind для сетевых сокетов замапить на вебсокеты не представляется возможным вообще никак.
     
     
  • 4.45, Crazy Alex (ok), 18:29, 04/02/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тебе шашечки или ехать? Эти врапперы дают возможность более-менее простого портирования сетевого слоя приложений. Понятно, что вместо чистого TCP будет эмуляция поверх webSockets. Вот такая, например: https://github.com/kanaka/websockify
     

  • 1.19, A.Stahl (ok), 02:57, 03/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Я бы ещё понял если бы наоборот.
    А так... Что-то на уровне Лиспа/Хаскелля. Круто, прикольно, но бесполезно.
     
     
  • 2.44, freehck (ok), 16:07, 04/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Ну почему же бесполезно.

    Вот например есть похожая штука Ocsigen js_of_ocaml: собственно то и делает, что перегоняет код на ocaml в код на js. Таким образом получаем код на js  с качественной проверкой типов, произведённой ещё на этапе компиляции.

    Ну и по поводу лиспа/хаскеля -- это Вы заблуждаетесь, но я не намерен спорить об этом сейчас.

     

  • 1.20, Андрей (??), 05:52, 03/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А они это оформили чище чем emscripten, который вообще вылетел из Debian, а то, что осталось в sid не обновляется.
     
  • 1.21, Аноним (-), 06:10, 03/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Надо бы декодер H264 транслировать.
     
  • 1.27, Аноним (27), 08:41, 03/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    лучше бы из JS в С++ сделали транслтор
     
     
  • 2.29, anonymous (??), 10:19, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Но зачем?
     

  • 1.30, Аноним (-), 10:58, 03/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Является Wt конкурентом для сабжа?
     
     
  • 2.32, Аноним (-), 12:11, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Является ли сабж конкурентом для Wt?
     
     
  • 3.33, Аноним (-), 12:35, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Так что более предпочтительнее? В чем существенный выигрыш одной из фреймворков?
     
     
  • 4.34, Аноним (-), 12:37, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    Т.е. одного фреймворка над другим?
     
  • 4.35, Аноним (-), 13:53, 03/02/2016 [^] [^^] [^^^] [ответить]  
  • +/
    А ты кого любишь больше - маму или папу? Тaщeмта одно - компилятор, второе - фреймворк.
     

  • 1.39, bOOster (ok), 17:47, 03/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все это от "лукавого". Все эти решения заметно деградировали уровень программного обеспечения в угоду сраным бизнесменам, которым надо быстрее, выше, сильнее за копейки.
     
     
  • 2.46, Аноним (-), 19:18, 04/02/2016 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот тут вы ошибаетесь. Что больше подходит для rapid разработки? Какой язык требует более высокой квалификации? То-то же! Давайте все писать на ссях!
     

  • 1.47, Витя2016 (?), 20:15, 04/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Cheerp вроде быстрей делает javascript и работа с памятью C++ более эффективна чем javascript оригинал?
     
  • 1.51, Аноним (-), 13:04, 08/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    после распостранения wasm надобность в вещах типа cheerp отпадет
     
  • 1.52, vn971 (ok), 23:09, 10/02/2016 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > или компилируемый в JavaScript из Coffe­Script, Microsoft Type­Script, Google Dart, Google GWT, с раздельной серверной частью на языках PHP, Python, Ruby или JavaScript/node.js

    можно добавить Scala. Код на скале тоже может компилироваться в js: https://www.scala-js.org/

     

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



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

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