All streams
Search
Write a publication
Pull to refresh
9
0
Пройдаков Евгений @proydakov

C++ Tech Lead. Пишу на крестах ✝✝

Send message

Добрый день.

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

Также, пока мы работали на WebAssembly реализацией, работа над основным продуктом не останавливалась. Было бы крайне тяжело всё это переписать на другой язык программирования и поддерживать одновременно две версии.

Сторонний код, в отличие от стандартной библиотеки, пишется на XP. Для него был реализован отдельный компилятор в Wasm. Но это тема для отдельной статьи.

Отчасти так, но как обычно дьявол кроется в деталях. Проблема состоит в следующем. У нас есть доверенный код среды исполнения. Этот код проходит сертификацию. Далее исполняемые файлы поставляется клиентам где они будут работать на их оборудовании.

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

Для решения этой задачи компания разрабатывает спецификацию языка XP, формат представления AST, компилятор, стандартную библиотеку и среду исполнения. Собственно с помощью WebAssembly предполагалось заменить AST и часть стека исполнения.

Мы пробовали четыре машинки: wamr, wasmtime, wasmedge, v8. На начальном этапе wamr с AOT компиляцией показал самую высокую производительность на базовых примерах.

Также её удалось очень быстро встроить в приложение и pipeline разработки. Плюс разработчики довольно оперативно реагировали на наши вопросы в github трекере. Поэтому решили начать с неё, а потом уже было сложно поменять.

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

Интересный курс. К сожалению времени на полноценное посещение сейчас нет. Планируется ли выкладывать записи лекций? Я бы с удовольствием прослушал несколько тем.

Отличная статья.

Было бы интересно увидеть как выглядит график стеков собранный через perf record для приложения использующего такую модель. Какое количество от общего времени работы будут занимать используемые примитивы синхронизации?

Так же интересно как отслеживать такие вещи как длины очередей. Когда мы хотим выполнять много задач на каком-то конкретном потоке или пулле потоков. Те делаем много телепортов в 1 поток?
Перепроверил. Все окей.
Решил попробовать. http://try.kotlinlang.org/#/Examples/Canvas/Hello,%20Kotlin/Hello,%20Kotlin.kt
Нажимаю запуск. Ни для какого типа сборки не работает. Выдает портянку ошибок.
Статья супер. Спасибо огромное.

1) Не задумывались ли об использовании google protobuf при сериализации Java / C++? Что мотивировало написать свое решение?
2) Вопрос по «Занятная статистика». На Javascript написано немного-немало 70к строк кода. Для чего используется Javascript?
3) Интересно как у вас устроена система обновлений сервера. Например, найдена серьезная ошибка в сервисе игровой механики или аккаунт-сервисе. Будет stop the world всего сервера (всех JVM)?
Вот здесь подробно описана проблема и способ ее решения: http://www.java.com/en/download/help/java_blocked.xml.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Software Architect