За последние несколько недель у меня было несколько случаев, когда мне приходилось объяснять, чем я занимаюсь на работе.

Объяснить, как мне повезло и как приятно работать над интересными задачами, легко.

Сказать, что я провожу большую часть времени у кофеварки, ожидая либо перекомпиляции нашей кодовой базы, либо результатов тестов, это как-то точно, но слишком мелко. Я также занимаюсь оптимизацией результатов нашего компилятора, структур данных, работаю над инфраструктурой тестирования или пишу документацию.

Но что мы делаем как компания?

Существует пересечение между этим и бизнес-презентацией, клиентам всегда рады, но основное внимание уделяется тому, чтобы убедить вас в том, что проводить время, играя с нашими технологиями, весело и полезно. И это может быть даже полезно.

И что мы делаем: компилятор, то есть инструмент для перевода с одного языка программирования на другой. В нашем случае входными данными являются файлы C/C++/Java/.jar. И на выходе получается смесь JavaScript и WebAssembly.

Много красивых модных словечек, но что это значит/что я могу показать?

  • Cheerp: компилятор кодовых баз C/C++ в JS и/или Wasm
  • CheerpJ: компилятор из Java в JavaScript
  • наш новый проект CheerpX 🚀
  • несколько избранных статей
  • многопользовательский шутер в стиле ретро

Если немного помахать рукой, то, как правило, можно использовать наши продукты для частного использования или для проекта с открытым исходным кодом. Это должно охватывать большую часть некоммерческого использования продукта. И вы всегда можете перепроверить у нас, в конце концов, вы найдете, как связаться с нами.

1. Подбодрить

Cheerp — это ответвление LLVM/Clang, которое позволяет компилировать произвольный код C++ в Интернет. Это открытый проект, прилично задокументированный.

Это инструмент командной строки, который работает в основном как замена clang (он даже вызывается как /path/to/cheerp/directory/bin/clang++), принимая большинство параметров clang.

Затем он создаст файл JavaScript, который создаст экземпляр модуля Wasm, и они будут идти рука об руку, при этом сторона JavaScript взаимодействует с API-интерфейсами браузера, входными и выходными данными, а сторона Wasm выполняет все необходимые вычисления. (Доступны и другие режимы компиляции, такие как чистый JS, но мы сосредоточимся на основном)

Большинство небольших примеров будут скомпилированы из коробки, и волшебство будет работать именно так. В больших кодовых базах это может работать или не работать с одной строкой, поскольку систему сборки необходимо будет адаптировать, и, как правило, вероятность возникновения проблем выше. Пользовательские предупреждения и ошибки хорошо описаны и помогут найти правильное решение.

Бонусная часть: модель памяти

Память для Wasm — это, по сути, большой кусок памяти, адресуемый через целое число, и это вполне естественно отображается в управлении памятью C++, но как все работает на стороне JavaScript?

Вы можете работать с моделью «большой кусок памяти», но как тогда вы сможете взаимодействовать с API браузера или другим кодом JavaScript? Откуда вы знаете, следует ли сохранить память живой или освободить ее? Либо вы сильно ограничиваете возможные взаимодействия с другими библиотеками, либо можете положиться на то, что компилятор создаст объекты C++ как обычные объекты JavaScript.

Это создает множество других возможных проблем, например, в JavaScript нет концепции указателей, поэтому арифметика/упорядочивание указателей невозможны. Но эту и другие проблемы решает компилятор (а до этого мы 😺).

Таким образом, компилятор Cheerp будет внутренне помечать каждый класс/структуру как относящийся либо к одной модели, либо к другой. Объекты, похожие на JavaScript, обеспечивают взаимодействие с нулевыми издержками, в то время как объекты с большим объемом памяти могут быть в целом более производительными.

Теперь вы можете следовать инструкциям вики и начать экспериментировать, или я могу показать две демонстрации:

Teeworlds

Бессерверная многопользовательская ретро-игра, в которой вы можете прыгать и стрелять.

Здесь все начинается со сложной кодовой базы C++, которая требует аудио, видео, связи с другими партнерами, настройки производительности и многих других проблем.

В результате получается увлекательный игровой процесс в браузере, установка не требуется. И вы можете прыгать и стрелять в совершенно незнакомых людей.

Быстрый BigInt за вечер

Моя статья (ссылка), где я показываю, как за несколько часов работы портировать сложную библиотеку C на чистый JavaScript. Поскольку это всего лишь чистый JavaScript, производительность может быть непосредственно оценена в выбранном вами браузере здесь: сравните меня.

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

Эта статья также является своего рода учебным пособием, и замена BigInt любой библиотекой, которая вам может понадобиться, должна быть интересным способом начать играть с Cheerp.

2. Подбодрить J

CheerpJ — это компилятор с Java на JavaScript.

Есть 3 способа экспериментировать с ним:

Ява-скрипка

Онлайн-редактор Java, позволяющий компилировать и запускать произвольный код Java прямо в браузере.

Сайт нуждается в редизайне (хотите помочь?), но он должен быть достаточно интуитивно понятным. Вы в основном кодируете любую Java слева, нажимаете «скомпилировать и запускать», а справа вы увидите вывод консоли + любой визуальный элемент, который вы, возможно, нарисовали.

CheerpJ Applet Runner

Расширение Chrome для запуска любого Java-апплета.

Это в основном предназначено для пользователей веб-сайтов, на которых есть устаревшие апплеты Java, и это безопасная альтернатива возне с параметрами безопасности вашего браузера.

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

Вот статья о том, как это решает проблему для профессора средней школы: Археология Java Applet.

Установка CheerpJSlides докладов еще не закончена, но, надеюсь, скоро появится здесь: https://2019.viewsourceconf.org/#.

В следующем году ViewSource!

CheerpJ также является инструментом командной строки: он берет файл .jar и создает эквивалентный файл JavaScript. Ознакомьтесь с документацией для начала работы!

3. CheerpX

SpaceX — это круто, так почему бы не CheerpX?

Неясно, является ли название технологии временным или нет, но вы можете прочитать больше о том, над какими сюрпризами мы работаем, прямо в статье нашего технического директора Алессандро:



4. Статьи

Чтобы все эти технологии работали все лучше и лучше, за кулисами проделывается много интересной работы. Иногда мы находим время и силы, чтобы написать небольшие статьи о том, чем мы занимаемся на работе.

Вот два замечательных предложения Юрия, нашего инженера-компилятора:





Контактная информация

Если есть сомнения, есть два чата для разработчиков по адресу https://gitter.im/leaningtech/cheerp или https://gitter.im/leaningtech/cheerpj, мы приветливы и как бы реагируем на любые запрос, отчет об ошибке или просто за то, что указали вам правильное направление.

Или на сайте: страница контактов.