VoxelEngine-Cpp icon indicating copy to clipboard operation
VoxelEngine-Cpp copied to clipboard

[ENHANCEMENT] Добавить JavaScript в качестве языка для скриптинга

Open movpushmov opened this issue 1 year ago • 18 comments

Связан ли ваш запрос на добавление функции с проблемой? Пожалуйста, опишите. нет

Опишите желаемое решение Можно использовать V8 с libuv и встроенной поддержкой TypeScript для комфортной разработке на JavaScript, это расширит круг людей, которые могут создавать контент

Так же судя по тестам JS намного быстрее

Опишите альтернативы, которые вы рассматривали можно было бы попытаться использовать node api или bun, но они node тяжёлый, а bun не стабильный

Дополнительный контекст

movpushmov avatar Dec 02 '24 03:12 movpushmov

И питона питон

BitParker avatar Dec 02 '24 16:12 BitParker

Половина всего кода движка - интеграция с LuaJIT с соответствующими оптимизациями, обеспечивающими максимальную производительность при правильном использовании. В представленном по ссылке сравнении я не вижу никаких упоминаний LuaJIT, что используется в движке и демонстрирует крайне высокую производительность, в сравнении с обычным Lua. Так что пока не вижу убедительных причин рассматривать предложенный вариант.

MihailRis avatar Dec 02 '24 16:12 MihailRis

Просто напомню, чистый Lua, без JIT, в проекте тоже не рассматривается, как и не поддерживается на уровне API проекта.

MihailRis avatar Dec 02 '24 16:12 MihailRis

Половина всего кода движка - интеграция с LuaJIT с соответствующими оптимизациями, обеспечивающими максимальную производительность при правильном использовании.

не понял смысла этого тейка) работа разных машин исполнения едва ли будет аффектить друг друга

стоит упомянуть, что я не предлагаю вырезать и сжечь всю часть с луа, просто задался вопросом, могу ли я попытаться интегрировать JS)

Так что пока не вижу убедительных причин рассматривать предложенный вариант.

не разобран тейк с популярностью JS'a на рынке, что явно поспособствует притоку аудитории

Ну, если нет, то ок + можешь закрывать)

movpushmov avatar Dec 02 '24 16:12 movpushmov

Попытка №2

не вижу никаких упоминаний LuaJIT, что используется в движке и демонстрирует крайне высокую производительность

image

источник

полностью не читал, только циферки глянул, поэтому мог неправильно интерпретировать информацию

movpushmov avatar Dec 02 '24 16:12 movpushmov

Это к тому, что интеграцию каждой существующей скриптовой функции нужно будет продублировать для интерпретатора JS + введение ряда дополнительных уровней абстракции для скриптинга, что только в идеальном мире не приведёт к ухудшению производительности в обоих языках. А в последнем скриншоте Попытка №2 почему-то приведена Java, которая, как-бы не JavaScript, а другой язык, причём старой версии, что совсем не является скриптовым ЯП. Node JS же является браузерным движком.

MihailRis avatar Dec 02 '24 16:12 MihailRis

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

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

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

А в последнем скриншоте Попытка №2 почему-то приведена Java, которая, как-бы не JavaScript, а другой язык, причём старой версии, что совсем не является скриптовым ЯП.

а node.js 16.4 это не JS?) причём нода намного тяжелее, чем чистый V8

movpushmov avatar Dec 02 '24 16:12 movpushmov

ну типо можем сделать в отдельной ветке и проверить, насколько это будет хуже)

если при норм перфе у этого есть шансы заехать в основную репу

если нет, то как бы и нет смысла как будто обсуждать

movpushmov avatar Dec 02 '24 16:12 movpushmov

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

MihailRis avatar Dec 02 '24 16:12 MihailRis

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

тогда как будет время и силы я попытаюсь занести ПР, а там глянем)

есть конкретные методички, как замерять производительность?

movpushmov avatar Dec 02 '24 16:12 movpushmov

Сейчас из средств замера производительности есть лишь класс timeutil::ScopeLogTimer - хедер util/timeutil.hpp.

На ближайшие обновления я планирую ввести в движок Unit-тесты, имеющие полный доступ к API движка, которые можно выполнять в headless режиме GitHub Actions, что буду реализовывать самостоятельно.

MihailRis avatar Dec 02 '24 17:12 MihailRis

Го ещё туда же добавим саппорт ассемблера x86, а? P.S. Joke.

RomanDonw avatar Jan 02 '25 13:01 RomanDonw

@movpushmov ну как со временем?)) готов помочь в правках твоего ПР, я сам middle front

iamcsharper avatar Feb 16 '25 12:02 iamcsharper

@movpushmov ну как со временем?)) готов помочь в правках твоего ПР, я сам middle front

навыки фронтендера ничем тут не помогут

копаюсь потихоньку

movpushmov avatar Feb 16 '25 15:02 movpushmov

@movpushmov ну как со временем?)) готов помочь в правках твоего ПР, я сам middle front

навыки фронтендера ничем тут не помогут

копаюсь потихоньку

Спасибо!

Помогут навыки разработки js/ts. Как минимум для реализации стандартной библиотеки с lua на js

iamcsharper avatar Feb 16 '25 16:02 iamcsharper

@movpushmov ну как со временем?)) готов помочь в правках твоего ПР, я сам middle front

навыки фронтендера ничем тут не помогут копаюсь потихоньку

Спасибо!

Помогут навыки разработки js/ts. Как минимум для реализации стандартной библиотеки с lua на js

любая стандартная библиотека JS в любой среде основанной на V8 реализуется нативно и пробасывается в контекст, так делает node js, к примеру

movpushmov avatar Feb 16 '25 16:02 movpushmov

@movpushmov ну как со временем?)) готов помочь в правках твоего ПР, я сам middle front

навыки фронтендера ничем тут не помогут копаюсь потихоньку

Спасибо! Помогут навыки разработки js/ts. Как минимум для реализации стандартной библиотеки с lua на js

любая стандартная библиотека JS в любой среде основанной на V8 реализуется нативно и пробасывается в контекст, так делает node js, к примеру

Биндинги то все равно пишутся на js. Или хотя бы типы:)

iamcsharper avatar Feb 16 '25 17:02 iamcsharper

@movpushmov ну как со временем?)) готов помочь в правках твоего ПР, я сам middle front

навыки фронтендера ничем тут не помогут копаюсь потихоньку

Спасибо! Помогут навыки разработки js/ts. Как минимум для реализации стандартной библиотеки с lua на js

любая стандартная библиотека JS в любой среде основанной на V8 реализуется нативно и пробасывается в контекст, так делает node js, к примеру

Биндинги то все равно пишутся на js. Или хотя бы типы:)

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

movpushmov avatar Feb 18 '25 12:02 movpushmov