LINUX.ORG.RU

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

 , , , ,


1

3

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

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

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



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

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

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

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

Ну у меня есть склонности к смене ориентации, но не такие, как у него

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

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

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

gedisdone ★★★
()

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

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

xaizek ★★★★★
()

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

Norgat ★★★★★
()

Питон из плюсов вызывать крайне неприятно, наоборот норм.

AntonI ★★★★
()

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

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

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

LINUX-ORG-RU ★★★★★
()

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

Forth, Scheme

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

У - Уходи

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

Ну тут вероятно lua. ИМХО кто смог разобраться с JS - разберётся и с ним нормально.

SM5T001
()

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

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

AlexKiriukha ★★★★
()

луа вроде используют для такого, в с/с++ легко встраивается.

cetjs2 ★★★★★
()

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

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

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

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

Octagon
()

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

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

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

torvn77 ★★★★★
()

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

anonymous
()

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

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

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

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

В Lua ООП на таблицах, это всё что надо знать о Lua

«эмуляция» ООП в луа занимает 10 строк кода в начале проекта.
дальше пишешь как будто у тебя ООП

Egor_
()

Для своей собираюсь писать на lua из-за удобности встраивания, но пока что, это только намерения

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

слайсов нет

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

Egor_
()
Ответ на: комментарий от stasolog

Мне, если честно, просто луа нравится больше как язык. Ну а что насчет QuickJS, то я еще думаю.

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

ну тогда нужно переписать жабу на жабе, чтобы она была быстрее, пока она есть быстрее

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

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

xaizek ★★★★★
()

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

https://wasmer.io/

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

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

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

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

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

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

В те времена вариантов больше особо и не было, а теперь уже поздно сдавать назад.

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

Просто.

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

Евка изначально на нём и была написана. Как сейчас – не знаю.

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

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

LuaJIT все.

Kuzy ★★★
()

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

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

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

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
()
Ответ на: комментарий от Harald

мне кажется, или раньше у тебя кот был слева?

Он всегда был слева (если чувак повёрнут лицом). Или справа.

mord0d ★★★★★
()
Ответ на: комментарий от 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)

Lua или JavaScript.

Можешь попробовать wasm интегрировать, хотя, думаю, пока не готов.

Legioner ★★★★★
()

Забаньте тщеславного болезного по ип уже. Туловище так и будет скороблудить пока до толксов не дорвется.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.