LINUX.ORG.RU

Какой язык выбрать для внутренних игровых скриптов?

 , , , ,


1

3

Сам движок на C++, для скриптов выбираю между Lua и Python. Что лучше? Или есть другие лучше? Можно ли использовать Rust как скриптовой язык? Он вроде как лучше, чем C и C++, но говорят, что его используют только приверженцы ЛГБТ и модераторы (что одно и то же).

С питоном неприятная история была, что он использовался в дропбоксе (а дропбокс шпионит за пользователями).

На каком языке не пишут модераторы? Не хочется зашквариться.

Зависит от производительности. Если нужна, то Lua, если нужно чтобы код быстро писался, то Python. А вообще костыли с C# или Java.

И это, уже DELIRIUM-а от подражателей отличать трудно становится.

peregrine ★★★★★ ()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

Если нужна, то Lua, если нужно чтобы код быстро писался, то Python

Ну, Lua не выглядит как совсем инопланетный язык, не думаю, что разница в написании на Python и на Lua кардинальна.

gedisdone ★★★ ()

Lua более куцый, что вообще достоинство для встраиваемого языка, но и удобств в нём меньше (зато он не indentation-based, хотя индексы в нём с 1), слайсов нет, классы надо эмулировать. Но для внутренней логики Lua может и больше подойти, да и интегрировать его вроде проще чем питон (C API удобнее). Кода в нём намного меньше и проще добавить в проект будет.

Для игр кто-то ещё wren сделал, там есть OOP, если надо. А вообще их куча.

xaizek ★★★★★ ()

По поводу скриптового движка и Python - там какие-то подводные камни с его встраиванием были (читал статью давно, подробностей не помню, ссылку потерял, но мб будет полезно).

Norgat ★★★★★ ()

С питоном неприятная история была, что он использовался в дропбоксе (а дропбокс шпионит за пользователями).

Эмм. Укажи мне тут на логичкескую связь? Питон какашка, но как он тут причастен? Не нагоняй лишнего.

Внутренние игровые? Lua или AngelScript

LINUX-ORG-RU ()

Или есть другие лучше?

Forth, Scheme

Можно ли использовать Rust как скриптовой язык?
С питоном неприятная история была, что он использовался в дропбоксе (а дропбокс шпионит за пользователями).

У - Уходи

Dark_SavanT ★★★★★ ()
Последнее исправление: Dark_SavanT (всего исправлений: 1)

Я бы попробовал guile в качестве эксперимента.

Недавно начал использовать AngelScript (не знаю что там с лицензией), чем-то похоже на С++. Вроде норм.

AlexKiriukha ★★★★ ()

cpython не встраивается вообще никак. В Sublime Text, например, он бежит отдельным процессом и обменивается данными через IPC с основным процессом.

EVE Online умудряется использовать stackless python, хз как.

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

А еще есть встраиваемый JS движок, мне понравился.

Octagon ()

Какой язык выбрать для внутренних игровых скриптов?

Как показал опыт Godot любой внешний интерпретатор приводит к падению производительности и неэкономному использованию ОЗУ при использовании нескольких процессов, многопоточное использование скриптов становится просто не возможным.

В общем хочешь присоединяйся к Godot’овцам, хочешь пиши свой интерпретатор.

torvn77 ★★★★★ ()

Deno - есть крэйт core_deno

JS раз в 50 быстрее питона(я как то переписал питоновский скрипт на ноду)

Кроме того есть TypeScript т.е. можно делать нормальный рефакторинг кода и все опечатки отлавливаются компилятором.

grim ★★★☆ ()
Ответ на: комментарий от xaizek

слайсов нет

эээ… а нафиг они вообще нужны?
если очень хочешь в луа слайс как first class citizen, то сделай класс Slice с тремя полями: указатель на массив, стартовый индекс, стоповый индекс, опиши для этого класса операторы через метатаблицу (вдруг ты захочешь конкатенацию двух слайсов или ещё что-нибудь странное) и передавай объект этого класса.

Egor_ ()

Раз этот тред уже и так полон бесполезных советов, то пришла и моя очередь

https://wasmer.io/

Сам движок на C++

https://docs.wasmer.io/integrations/c/setup

А в сам WebAssembly уже компилируй что угодно.

P.S. Это если делать нечего

vertexua ★★★★☆ ()
Последнее исправление: vertexua (всего исправлений: 3)

С питоном неприятная история была, что он использовался в дропбоксе (а дропбокс шпионит за пользователями).

А гитлер ел огурцы, ну да.

Слишком толсто.

intelfx ★★★★★ ()
Ответ на: комментарий от xaizek

отсутствие оператора индексирования у строк

оператор индексирования строк делается в одну строку

getmetatable"".__index = function(s,i)return type(i)=="number" and s:sub(i+1,i+1) or string[i] end

проверяем

s="abcdef"
print(s[3])  --> d
Egor_ ()
Последнее исправление: Egor_ (всего исправлений: 1)
Ответ на: комментарий от Kuzy

LuaJIT все

он не всё.
он просто застыл в своём совершенстве
баги по-прежнему оперативно исправляются автором
а вот новые фичи добавляются усилиями коллабораторов, автор слегка обиделся, что на спонсорские деньги прожить не получилось
германия - недешёвая страна (вот жил бы он в белоруссии…)

Egor_ ()
Последнее исправление: Egor_ (всего исправлений: 3)

Меня вот интересует реализация внутреигровых скриптов на java, если совсем точно, то игра на андроид и как лучше для нее это реализовать? В java есть какой-то механизм или нужен какой-то костыль, но кроме lua мне ничего в голову не приходит, а это дичь какая-то и уж точно не для андроида. С java я не знаком, подскажите кто знает.

anonymous ()
Ответ на: комментарий от KundaMasha

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

Ну я как для меня стало обычным написал только пловину.

Godot’овцы не только обругали внешний интерпретарор, но и как решение проблемы создали свой внутрениий и получили по их словам большой прирост производитльности.

Основными причинами создания своего собственного скриптового языка для Godot были:

  • Слабая поддержка потоков, которые использует Godot, в виртуальных машинах скриптовых языков (Lua, Python, Squirrel, JS, AS, и пр.).
  • Poor class-extending support in most script VMs, and adapting to the way Godot works is highly inefficient (Lua, Python, JavaScript).
  • Многие существующие языки имеют ужасные интерфейсы для привязки к C++, что приводит к большому количеству кода, ошибкам, «бутылочным горлышкам» и общей неэффективности (Lua, Python, Squirrel, JS и т.д.). Мы хотели сосредоточиться на качественном движке, а не на большом количестве интеграций.
  • Отсутствие родных векторных типов (vector3, matrix4 и др.) приводило к серьёзному уменьшению производительности, когда использовались собственные типы (Lua, Python, Squirrel, JS, AS и т.д.).
  • Сборщик мусора приводит к остановке или излишне большому использованию памяти (Lua, Python, JS, AS и т.д.).
  • Сложная интеграция с редактором кода для обеспечения автодополнения, редактирования в реальном времени и т.д. (все языки). Это очень хорошо поддерживается GDScript.

https://docs.godotengine.org/ru/stable/about/faq.html#doc-faq-what-is-gdscript

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 1)