на Луа, сейчас подумал - раз сама игра на Свифте, может пусть и скрипты будут?
Есть идея кросс-компилировать их в webassembly, и его уже забриджить в программу. Интерпретатор JS будет и sandbox-ом заодно, т.к. если позволить пользователям редактировать и загружать прямо системные модули, то могут абюзить.
Так вот, вопрос. На чем запускать этот webassembly, учитывая, что DOM и прочее из браузера не нужно? V8? что-то другое?
Они и так смогут абюзить, если игра не сетевая и нет проверок на сервере
Ну в целом V8 подойдет, но ты потенциально теряешь в производительности используя WASM. Почему бы нативно не компилится под нужные платформы, если это не браузерная игра
Игра сетевая, скрипты редактируются игроками и должны сразу применяться. Ну как, привелигированными игроками, которые мир создают, но все равно будет плохо, если они доступ к акку игры через скрипт получат. )
Доп. сандбокс... с виртуалкой можно будет лимиты на CPU поставить и убедиться, что не полезли к файловой системе например. В принципе в Луа тоже виртуальная машина была, в V8 наверное не сильно больше оверхед.
Сделай свою VM для скриптов 🤔
Lua — язык, широко используемый для скриптов и, в принципе, знакомый. Свифт для скриптов — ну хз. К тому же, наверное, и ограничения будут всякие.
А не проще через чистый JS? У свифта прекрасный бридж с ним
да может кстати и чистый JS, а как с ним бриджиться на сервере?
Прям на отлично, там есть либа заменитель JavaScriptCore, можно выставлять свои Swift классы в JS, получать и выполнять любые функции и т.п.
И читать/писать файлы можно через JS, а ему нужна изолированная среда. Он запускает на сервере юзерские скрипты
Там JS скрипты же в VM’ке запускаются, вряд ли будет доступ к файлам на сервере
Хмм, ну в node js тоже js в VM запускается. А как ресурсы ограничивать такой вм?
В ноде набор функций в JS экспортируется (реализованных в ноде на C).
Обсуждают сегодня