Что такое хороший язык сценариев для интеграции в высокопроизводительные приложения? - PullRequest
8 голосов
/ 27 февраля 2009

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

Ключевые функции для желаемой системы сценариев (в порядке важности):

  • Производительность - ДОЛЖЕН быть быстрым, чтобы вызывать и обновлять сценарии
  • Кроссплатформенность - порт должен быть относительно простым для переноса на несколько платформ (не берите в голову немного работы, но портирование на каждую платформу займет всего несколько дней)
  • Автономная компиляция - возможность предварительного анализа кода скрипта в автономном режиме практически необходима (помогает с размерами файлов и временем загрузки)
  • Способность хорошо интегрироваться с c ++ - Должна быть в состоянии поддерживать OO-код в языке и интегрировать эту функциональность с c ++
  • Многопоточный - не требуется, но желательно. Было бы лучше иметь возможность запускать отдельные его экземпляры в нескольких потоках, которые не мешают друг другу (то есть в глобальном коде нет глобальных переменных, которые нужно изменять во время работы). Решения на основе критических разделов и Mutex могут не применяться.

До сих пор у меня был опыт интеграции / использования Lua, Squirrel (OO язык, основанный на Lua) и я написал виртуальную машину ActionScript 2.

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

Спасибо, Грант

Ответы [ 10 ]

9 голосов
/ 27 февраля 2009

Lua имеет преимущество в том, что оно проверено временем рядом известных разработчиков видеоигр и хорошей базой знающих разработчиков благодаря принятию Blizzard-Activision его в качестве основной платформы для разработки надстроек World of Warcraft.

7 голосов
/ 27 февраля 2009

Lua очень хорошо подходит для ваших нужд. Я возьму их в том же порядке.

Lua - один из самых быстрых скриптовых языков. Быстро компилируется и быстро запускается.

Lua компилируется на любой платформе с компилятором ANSI C, в состав которого входят все игровые платформы.

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

Существует множество инструментов привязки Lua / C ++.

Он не поддерживает многопоточность (вы не можете получить доступ к одному экземпляру интерпретатора из нескольких потоков), но вы можете иметь несколько экземпляров интерпретатора, по одному на поток или даже по одному на игровой объект.

7 голосов
/ 27 февраля 2009

Lua используются в индустрии видеоигр в течение многих лет. Легкий и эффективный.

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

6 голосов
/ 27 февраля 2009
3 голосов
/ 28 февраля 2009

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

Я рекомендую вам больше беспокоиться о памяти, чем о скорости. Большинство скриптовых языков «достаточно быстрые», и если они становятся медленными, вы всегда можете перенести некоторые из этих функций обратно в C ++. Многие из них, тем не менее, прожигают много памяти, а в памяти консоли это еще более дефицитный ресурс, чем процессорное время. Неограниченное потребление памяти в конечном итоге приведет к краху, и если вам придется выделить 4 МБ только для интерпретатора, это все равно, что выбросить 30 текстур в окно, чтобы освободить место.

2 голосов
/ 28 февраля 2009

Если вы еще не посмотрели, я бы посоветовал вам проверить Angelscript .

Я успешно использовал его в кроссплатформенной среде (Windows и Linux только с перекомпиляцией), и он предназначен для хорошей интеграции с C ++ (и объектами, и кодом).

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

2 голосов
/ 27 февраля 2009

Lua , а затем LuaJIT для дополнительной яркости!

просто не ожидайте слишком многого от автоматических библиотек связывания C ++, большинство из них медленные и ограничительные. лучше сделайте свою привязку для ваших собственных объектов.

Что касается параллелизма, либо LuaLanes , либо бросьте свой собственный. если ваша программа на C ++ уже многопоточная, просто вызовите отдельные LuaStates из каждого потока и при необходимости используйте собственные общие структуры C ++ в качестве каналов связи.

Как вы, возможно, уже знаете, наиболее часто повторяющийся ответ в Lua - «катайся сам», и это часто лучший совет! за исключением случаев, когда речь идет о привязках к общим библиотекам C / C ++, в этом случае вполне вероятно, что уже есть одна.

1 голос
/ 27 февраля 2009

Начните с Python .

Если вы можете доказать, что вам нужна большая скорость, посмотрите на Stackless Python . Вот что EVE Online использует для своей игры.

0 голосов
/ 27 февраля 2009

Это приходит на ум:

  • Lua
  • Python с наддувом :: python
  • MzScheme или Guile
  • Рубин с SWIG
0 голосов
/ 27 февраля 2009

JavaScript может быть разумным вариантом из-за огромных усилий, приложенных для оптимизации различных реализаций для использования в веб-браузерах.

...