За последние несколько недель у меня было несколько случаев, когда мне приходилось объяснять, чем я занимаюсь на работе.
Объяснить, как мне повезло и как приятно работать над интересными задачами, легко.
Сказать, что я провожу большую часть времени у кофеварки, ожидая либо перекомпиляции нашей кодовой базы, либо результатов тестов, это как-то точно, но слишком мелко. Я также занимаюсь оптимизацией результатов нашего компилятора, структур данных, работаю над инфраструктурой тестирования или пишу документацию.
Но что мы делаем как компания?
Существует пересечение между этим и бизнес-презентацией, клиентам всегда рады, но основное внимание уделяется тому, чтобы убедить вас в том, что проводить время, играя с нашими технологиями, весело и полезно. И это может быть даже полезно.
И что мы делаем: компилятор, то есть инструмент для перевода с одного языка программирования на другой. В нашем случае входными данными являются файлы 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, мы приветливы и как бы реагируем на любые запрос, отчет об ошибке или просто за то, что указали вам правильное направление.
Или на сайте: страница контактов.