Почему мы используем скрипты в разработке?

67

В моем текущем проекте сценарии Lua вызываются функциями C ++ на стороне сервера. После этого сценарии снова вызывают функции C ++, все еще находящиеся в этом решении. Почему мы должны делать такие вещи, а не вызывать функцию C ++ напрямую? В каких ситуациях нужны скрипты?

Джош
источник

Ответы:

73

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

Как правило, критический код или код бэкэнда не записываются в сценарии. Этот код должен выполняться быстро, и часто управление памятью имеет решающее значение.
В играх игровая логика и конфигурация обычно содержатся в файлах сценариев. Эти сценарии могут быть легко обновлены непрограммистами (например, дизайнером) для настройки игрового процесса. Языки сценариев просты и действуют для этой цели всепрощающе.

Часто язык сценариев также используется для выполнения сценариев в режиме реального времени . Это удобно для настройки некоторых элементов игрового процесса или даже для отладки. Многие игры предоставляют консоль для этой (в основном, внутренней) цели.

Вполне возможно, что вы создадите игру, используя существующий игровой движок, просто используя сценарии. Таким образом, слой игрового движка полностью отделен от слоя игровой логики . Современные движки обычно могут быть использованы для создания игр FPS или RTS легко, как это, но это невозможно для любого жанра. MMO, вероятно, потребует другой тип двигателя.

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

Неф
источник
7
+1 за то, что говорят, что скрипты обычно легче обновлять непрограммистам. Дизайнеры не всегда программисты, и они не должны быть такими.
Дуб
19
Мне кажется, что я повторяю себя в каждом вопросе о сценариях - если ваш рабочий процесс требует, чтобы не программисты программировали (включая сценарии), он позже укусит вас в задницу. Дизайнеры не всегда являются программистами, но, как только они пишут нетривиальные сценарии (например, как только они пытаются определить функцию или используют цикл), они притворяются таковыми. Если у них нет обучения программированию, это закончится слезами и потраченным временем для всех.
5
Джо - это не лишает законной силы аргумент, это просто означает, что вам нужно решить, где отделить «программный материал» от «дизайнерского», и разделительная линия будет отличаться в зависимости от технических знаний ваших дизайнеров (или отсутствия их).
Ян Шрайбер
3
Я уверен, что любой уважающий себя дизайнер хорошо учится хотя бы на одном языке. Чтобы прояснить ситуацию немного, я бы хотел нюансировать термин «непрограммист», поскольку кто-то, чья профессия не принадлежит программисту. Я сожалею об использовании этого термина, благодаря Джо, я вижу, что это неоднозначно. Я полагаю, что есть широкий круг программистов, от тех, кто пишет простой XML до хардкорных сборок, до математической обработки тяжелых сигналов. Я надеюсь, что это решает проблему двойственности "не программиста".
Неф
8
Я не слышал, чтобы кто-то предлагал, чтобы дизайнеры писали сложные, критически важные сценарии для производства. Тем не менее, дизайнеры со скромным пониманием программирования могут по-прежнему настраивать некоторые сценарии экспериментально (а затем передавать их действительным программистам). Конечно, они могли бы писать простые специальные сценарии с консоли во время выполнения, чтобы облегчить собственное тестирование. Я предполагаю, что дизайнеры, возможно, захотят использовать базовые сценарии для создания прототипов новых дизайнов экрана (даже если это не что иное, как полуфункциональные интерактивные макеты). Множество непроизводственного кода требует написания.
Майк Штробель
38

Вы задали неправильный вопрос. Реальный вопрос, я думаю, заключается в том, почему мы миримся с «не скриптовыми» языками, такими как C, C ++, Java и так далее? И ответ одна причина: производительность. (И, возможно, инерция, но эта инерция есть из-за производительности, и любой, кто может написать хороший C / C ++ / Java, может написать хотя бы сносный Ruby / Python / Lua / JavaScript.)

Мы используем «скриптовые» языки (что на самом деле означает очень высокий уровень, сборщик мусора и, как правило, некоторую форму более свободной типизации и динамической компиляции), потому что они, как правило, более простые языки для написания кода для всех - включая программистов. глупые вещи, такие как не забыть освободить после malloc или убедиться, что ваш код защищен от исключений, или забыть сделать все ваши деструкторы виртуальными. Если бы наши компьютеры были бесконечно быстрыми, мы бы использовали «скриптовые» языки для всего.


источник
4
Мне нравится этот аргумент , так намного лучше , чем «так дизайнеры могут программировать.» Это очень плохая идея - игнорировать ценность быстрого развития и возможности экспериментировать с изменениями без перекомпиляции всего.
ojrac
10

Языки сценариев для игровой логики являются очень хорошим примером структуры архитектуры программного обеспечения Alternate Hard и Soft Layers . На этом сайте (и других, я уверен) есть хорошая дискуссия о преимуществах этого.

тетрада
источник
8
  1. Каждый новый класс lua состоит из двух строк. Каждый новый класс C ++ - это боль.
  2. Не жалуйтесь на типы, когда все, что вам нужно, это перемешивать значения вокруг.
  3. Вывоз мусора.
  4. Код скрипта красиво изолирован на виртуальных машинах, от всех этих отвратительных блуждающих ошибок и переполнений массива.
Заратустра
источник
5

Изменения скрипта легко развернуть. Например, вы можете хранить сценарии в базе данных, что означает, что вместо полного повторного развертывания двоичного кода и возможного перезапуска службы вы просто запускаете один оператор SQL UPDATE, за которым, возможно, следует сигнал запущенной службе для перезагрузки сценария.

Кроме того, языки сценариев часто просты для понимания и легки в программировании, поэтому вам не нужны «хардкорные» разработчики (те, которые занимаются управлением памятью / указателями и оптимизацией на уровне процессора) для большей части кода (если большая RPG, скрипты для ИИ, Заклинаний, Эффектов предметов и самого мира часто больше, чем код движка). Языки сценариев позволяют гораздо больше сосредоточиться на «что», а не «как» из-за сборки мусора (в случае Lua) и более высокого уровня абстракции.

Майкл Стум
источник
4

Один сценарий, в котором полезны скрипты, - это когда мы хотим, чтобы наш движок был расширяемым с помощью плагинов / аддонов. Эти расширения во многих случаях создаются непрофессиональными людьми (например, опытными игроками и энтузиастами). Сценарии безопаснее и проще для этой цели. Используя скрипты, им не нужно использовать компиляторы и не нужно знать указатели ...

Прекрасным примером этого является игра World of Warcraft. Он имеет тысячи аддонов, созданных сообществом. Эти дополнения написаны с использованием LUA + XML.

Дани
источник