Есть ли какой-нибудь язык сценариев, который бы быстро, легко встраивался и подходил для высокоуровневого игрового программирования? - PullRequest
4 голосов
/ 16 июня 2011

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

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

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

Кроме того, разработчик игры должен иметь возможность обрабатывать все ситуации, с которыми они сталкиваются, на языке сценариев.В то время как базовые компоненты, такие как рендерер и сетевое взаимодействие, будут реализованы в C ++, специфичные для игры механизмы, такие как вращение нескольких сотен объектов вокруг планеты, будут обрабатываться на языке сценариев.Это означает, что язык сценариев должен быть безумно быстрым, скорость 1/10 С, вероятно, минимальная.

Тогда возникает проблема отладки.Информация о функции, трассировке стека и состояниях переменных, в которых произошла ошибка, должна быть доступна.

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

Изучая два предложенных языка, lua и python, lua быстро (luajit) и его легко интегрировать, но его стандартные средства отладки кажутсябыть не хватает.Что еще хуже, у lua по умолчанию вообще нет системы типов.Конечно, вы можете реализовать это самостоятельно, но синтаксис всегда будет странным и неинтуитивным.

С другой стороны, Python очень удобен в использовании и имеет базовую систему классов.Тем не менее, это не так просто интегрировать, это парадигма, на самом деле не включающая проверку типов, и она определенно не достаточно быстра для более сложных игр.Я еще раз хотел бы отметить, что все будет сделано в Python.Я хорошо знаю, что python, вероятно, будет достаточно быстрым для 90% кода.

Есть также Scala, которую я до сих пор не предлагал.Кажется, что Scala на самом деле удовлетворяет большинству требований, но встраивание Java VM в C кажется не очень простым, и обычно кажется, что java ожидает, что вы создадите свое приложение на основе java, а не наоборот.Я также не уверен, что функциональная парадигма Scala подойдет для интуитивно понятной разработки игр.

РЕДАКТИРОВАТЬ: Обратите внимание, что этот вопрос не о поиске решения любой ценой.Если нет лучшего языка, чем lua, я просто скомпрометирую и использую его (у меня уже есть вещь, связанная с моей программой).Я просто хочу убедиться, что я не пропускаю что-то, что было бы более подходящим, прежде чем сделать это, поскольку Луа далека от идеального решения для меня.

Ответы [ 4 ]

2 голосов
/ 18 июня 2011

Вы можете рассмотреть моно .Мне известна только одна история успеха этого подхода, но он большой: движок C ++ с моно-скриптингом - это подход, принятый в Unity .

1 голос
/ 22 марта 2016

Попробуйте язык программирования Ring http://ring -lang.net

Это универсальный язык сценариев для нескольких парадигм, который может быть встроен в проекты C / C ++, расширен с использованием кода C / C ++ и / или использован в качестве автономного языка. Поддерживаемые парадигмы программирования: императивное, процедурное, объектно-ориентированное, функциональное, мета-программирование, декларативное программирование с использованием вложенных структур и естественное программирование.

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

Компилятор + Виртуальная машина - это 15 000 строк кода C

Встраивание Ring Interpreter в программы на C / C ++ https://en.wikibooks.org/wiki/Ring/Lessons/Embedding_Ring_Interpreter_in_C/C%2B%2B_Programs

1 голос
/ 17 июня 2011

Поскольку никто, кажется, не знает комбинацию лучше, чем lua / luajit, я думаю, что я оставлю это на этом.Спасибо за вклад каждого в этом.Лично я считаю, что lua очень не хватает как языка высокого уровня для программирования игр, но это, вероятно, лучший выбор.Поэтому, кто бы ни нашел этот вопрос и имеет те же требования (быстрый, простой в использовании, простой для встраивания), вам придется либо использовать lua / luajit, либо создать свой собственный.:)

1 голос
/ 16 июня 2011

Для встраиваемости вы можете заглянуть в Tcl , или, если вы в Схеме, посмотрите SIOD или Guile .Конечно, я бы предложил Lua или Python в целом, но ваш вопрос исключает их.

...