Увидел свет (http://blog.leaningtech.com/2016/02/cheerp-12-c-to-javascrip...) стабильный релиз Cheerp 1.2 (http://leaningtech.com/cheerp/) (бывший Duetto), открытого инструментария для разработки клиентских и серверных web-приложений на языке C++, а также для портирования существующих C++ программ для работы в Web-браузере. Код распространяется (https://github.com/leaningtech) под свободной лицензией UI/NCSA (http://llvm.org/releases/2.8/LICENSE.TXT), также используемой в проекте LLVM. Библиотеки поставляются под лицензией GPLv2+.
По своей сути Cheerp напоминает систему Emscripten (https://www.opennet.ru/opennews/art.shtml?num=35313) и также использует наработки LLVM для обеспечения компиляции кода C++ в представление на языке JavaScript. Ключевым отличием Cheerp от Emscripten является (https://github.com/leaningtech/cheerp-meta/wiki) ориентация на достижении более высокой производительности результирующего JavaScript-кода и предоставление средств для использования из С++ программ всех возможностей DOM, браузерного API и HTML5, в том числе WebGL. Cheerp не пытается как Emscripten эмулировать традиционное адресное пространство при помощи типизированных массивов, а обеспечивает прямой маппинг C++ объектов в объекты JavaScript, что позволяет снизить потребление памяти, так как сборщик мусора JavaScript имеет возможность удалять неиспользуемые объекты. Cheerp также поддерживает использование стандартных библиотек libc и libc++, и позволяет применять инструменты сборки cmake/autotool.По поставленным перед проектом задачам Cheerp позиционируется как платформа для создания интегрированных клиент/серверных web-приложений на языке C++. В существующей практике, обычно используется выполняемый в браузере фронтэнд, написанный на языке JavaScript или компилируемый в JavaScript из CoffeScript, Microsoft TypeScript, 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-кода на выходе.
URL: http://blog.leaningtech.com/2016/02/cheerp-12-c-to-javascrip...
Новость: https://www.opennet.ru/opennews/art.shtml?num=43804
есть реальные примеры применения? только не надо про крузис в браузере на ультра
Вот, например, один товарищ роазвлекался: http://gamemusic.multimedia.cx/js-prototype/
Это Emscripten, правда.
Linux firefox 44 - 30% firefox, 8% xorg. Почти всё тратится на вывод битмапа. Ну как всегда, я уже привык к тормозной графике в Linux :)
а как смотрели, на что тратится?
Профилировщик?
Ну я вот не знаю, как в браузере выяснить, что время уходит именно на работу с битмапом, а не на что-то ещё. во всяком случае, если не пытаться отлаживать сам браузер - а это очень стрёмное дело, и вышенаписавшйи аноним почти наверняка подобным не занимался.
по эмскриптен есть дофига примеров, правда я не встречал что-то использующееся на продакшене.
вот именно( вышел компилятор sh->python->c++->php->ruby->java->c#->etc...
Все это зациклить :)
> я не встречал что-то использующееся на продакшене.Копаться в разы больше чем с компиляцией нативного бинаря для того чтобы получить огромный и лагучий JS - развлечение на любителя.
> не встречал что-то использующееся на продакшене.
https://kagami.github.io/webm.js/ (как аналог онлайн-конвертверов, но не требующий сервера).
Вот ещё дофига примеров: https://github.com/kripken/emscripten/wiki/Porting-Examples-...
Из пустого в порожнее.
Нельзя не вспомнить анекдот. Висит объявление: "Перевожу с грузинского и армянского на Ваганьковсое"
На что "люди" время тратят...
Некоторые, например, других осуждают...
> На что "люди" время тратят...Надо принять закон о правильной трате времени людьми, а то у россияненов остаётся слишком много времени на написание кода и на трындёж на форуме, что приводит к различным угрозам тысячелетней суверенной государственности.
>> На что "люди" время тратят...
> Надо принять закон о правильной трате времени людьми, а то у россияненов
> остаётся слишком много времени на написание кода и на трындёж на
> форуме, что приводит к различным угрозам тысячелетней суверенной государственности.Три ошибочных утверждения в одном предложении:
- Причем здесь россияне к сабжу?
- Причем здесь российские законы к сабжу?
- Причем здесь российские законы ко мне?Ваши навязчивые думы о россиянах пробивают потолки неадеквата.
Компиляция в Java это хороший способ поднять спрос на оперативку!
> Компиляция в Java это хороший способ поднять спрос на оперативку!Нет, компиляция в Script.
> Нет, компиляция в Script.Тем более.
Шо ява, шо яваскрипт, какая в жепу разница?
Большая. Например Java машина куда более прожорливая, чем все JS движки.
> Большая. Например Java машина куда более прожорливая, чем все JS движки.Движки без фреймворка, конечно они легче.
Высокой страсти не имея
Для звуков жизни не щадить,
Не мог он джав от джаваскриптов,
Как мы ни бились, отличить.
Попробовал потыкать - выглядит интересно, особенно то, что есть API для коммуникации с браузером, а не просто тупо перегоняется абстрактный код.
Что это? Вот есть, например в C вызов bind. Что это будет в javascript?
враппер для websocket api
Во-первых bind конечно же есть не в C а в libc.
Во-вторых никакого враппера в вебсокеты не будет потому что websockets api и сокеты из сетевого стека ОС совершенно разного уровня фичи, и имеют слишком разные возможности, и соответственно семантику bind для сетевых сокетов замапить на вебсокеты не представляется возможным вообще никак.
Тебе шашечки или ехать? Эти врапперы дают возможность более-менее простого портирования сетевого слоя приложений. Понятно, что вместо чистого TCP будет эмуляция поверх webSockets. Вот такая, например: https://github.com/kanaka/websockify
Я бы ещё понял если бы наоборот.
А так... Что-то на уровне Лиспа/Хаскелля. Круто, прикольно, но бесполезно.
Ну почему же бесполезно.Вот например есть похожая штука Ocsigen js_of_ocaml: собственно то и делает, что перегоняет код на ocaml в код на js. Таким образом получаем код на js с качественной проверкой типов, произведённой ещё на этапе компиляции.
Ну и по поводу лиспа/хаскеля -- это Вы заблуждаетесь, но я не намерен спорить об этом сейчас.
А они это оформили чище чем emscripten, который вообще вылетел из Debian, а то, что осталось в sid не обновляется.
Надо бы декодер H264 транслировать.
лучше бы из JS в С++ сделали транслтор
Но зачем?
Является Wt конкурентом для сабжа?
Является ли сабж конкурентом для Wt?
Так что более предпочтительнее? В чем существенный выигрыш одной из фреймворков?
Т.е. одного фреймворка над другим?
А ты кого любишь больше - маму или папу? Тaщeмта одно - компилятор, второе - фреймворк.
Все это от "лукавого". Все эти решения заметно деградировали уровень программного обеспечения в угоду сраным бизнесменам, которым надо быстрее, выше, сильнее за копейки.
Вот тут вы ошибаетесь. Что больше подходит для rapid разработки? Какой язык требует более высокой квалификации? То-то же! Давайте все писать на ссях!
Cheerp вроде быстрей делает javascript и работа с памятью C++ более эффективна чем javascript оригинал?
после распостранения wasm надобность в вещах типа cheerp отпадет
> или компилируемый в JavaScript из CoffeScript, Microsoft TypeScript, Google Dart, Google GWT, с раздельной серверной частью на языках PHP, Python, Ruby или JavaScript/node.jsможно добавить Scala. Код на скале тоже может компилироваться в js: https://www.scala-js.org/