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


19

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

Я видел разговоры о Haskell, F #, Scala и так далее. Но я не имею ни малейшего представления о различиях между языками и их сообществами, и меня это особо не волнует; кроме как в контексте разработки игр.

Итак, с точки зрения разработки игр, какой функциональный язык программирования имеет больше всего возможностей для программирования игр? Например, существуют ли функциональные библиотеки / движки / фреймворки для разработки игр или графические движки для функциональных языков? Есть ли язык, который лучше обрабатывает определенные структуры данных, которые обычно используются в разработке игр?

Итог: какой функциональный язык программирования лучше всего подходит для функционального программирования игр и почему?

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


2
"Что вы имеете в виду, 2D-игры или 3D-игры?" «Ха? Я не знаю - AIEEEE »
Циклоп

@ Циклоп, а? Я не понимаю ...
Рикет

@Ricket, отчасти это была просьба уточнить , что тип игры вы говорите, 2D или 3D (и , возможно , на основе поворота в режиме реального времени или). Частично это была шутка Монти-Питона, которая затемнила первую часть. Wups. :) И я думаю, что определение типа игры полезно - если не существует единого функционального языка, который идеально подходит для всего , тогда разные языки могут быть лучше в разных вещах.
Циклоп

Я не верю, что 2D или 3D влияют на выбор языка, за исключением разнообразия движков / библиотек, доступных для языка. Я лично интересуюсь как 2D, так и 3D, поэтому я не думал ни о том, ни о другом, когда писал этот вопрос. Но в целом, 2D и 3D-игры имеют много общих систем и структур данных (например, аудио, ввод, AI, структура программы, игровой цикл), и есть много 3D-игр, которые можно перенести в 2D или наоборот. И да, я не видел Монти Пайтона, поэтому я его вообще не понимал. :)
Рикет

1
Я не думаю, что есть определенный ответ о лучшем языке.
Вэй Ху,

Ответы:


12

F #, входящий в семейство Microsoft .net, имеет доступ к XNA, которая является фантастической базой для создания игр. Немного прибегая к помощи гугла, вы найдете несколько уроков, видео и статей. Великие документы по XNA также должны помочь.

В Haskell также было некоторое движение в играх, смотрите здесь . Вы, вероятно, будете использовать привязки openGL.

Поскольку Scala играет в среде Java, он интегрируется со всеми доступными механизмами / привязками Java, см. Этот пост SO .

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

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


2
Между проблемами с JVM и незрелостью реализации компилятора я обнаружил, что производительность Scala неприемлема при использовании функционального стиля, даже если сам язык хорошо его поддерживает. В конечном итоге он работает примерно так же быстро, как, скажем, Python или Ruby, а не F # или OCaml. (Скорость Scala конкурентоспособна для более оригинальных / процедурных стилей.)

Я действительно получил проект F #, на котором запущен XNA (это пустое окно XNA с васильковым синим цветом, только код был F #, а не C #.
RCIX

8

Я бы сказал, Лисп.

Он использовался в играх в качестве языка сценариев, по крайней мере, в Naughty Dog (или я так думаю), и является очень зрелым языком.

Преимущество Lisp заключается в десериализации, которая является основной частью того, что мы называем управлением активами. Десериализация lisp тривиальна, код и данные едины. Это облегчает иметь формат файла для активов и поведения. Это не похоже на один файл в json / xml / yaml / bin и один файл F # для AI. Вы можете сохранить все как s-выражения, что значительно упростит конвейер активов.


TBH я бы рекомендовал против этого. Языки сценариев предназначены не только для разработчика; Моддерам захочется модифицировать игру, и ничто не отпугнет их быстрее, чем (() ()))) () ((()). Плюс, даже в том, что касается функциональных языков, Lisp эзотеричен.
RCIX

7
Если вас беспокоит отпугивание мододелов, переход на функциональный язык, вероятно, не правильный шаг.
Пол Уикс

3
@RCIX & @Joe - Necro powers ACTIVATE. Во всяком случае, схема будет использоваться в качестве языка обучения. SICP - это что-то вроде половины степени CS в одной книге, и она используется множеством школ (включая MIT до недавнего времени), а HTDP - менее жесткое введение.
Джесси Милликен

1
@RCIX & Джо действительно. шепелявость и схема являются в вводных языках многих университетов.
Оберхамси

1
Лисп - это не то, что вы хотите использовать. У Naughty Dog был ОДИН, единственный программист на Лиспе, и когда он вышел, они перевели все свои движки на С ++. Понятия не имею, почему устаревший движок одной компании все время таскают как яркий пример =)
Патрик Хьюз,

8

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

Причины:

  • Производительность - Clojure - это динамический язык. Он имеет отличные возможности для интерактивной разработки в стиле REPL, например, вы можете использовать REPL для запроса или изменения состояния внутри экземпляра запущенного игрового приложения. Код в Clojure также часто до смешного лаконичен. Я предполагаю, что я в 3-5 раз более продуктивен в Clojure, чем в Java или C #.
  • Нечисто - хотя я ценю красоту и элегантность чистых функциональных языков, таких как Haskell, программирование игр - грязное занятие, в котором побеждает прагматизм. Я хочу иметь возможность добавлять побочные эффекты в мои функции, когда они мне нужны, и Clojure позволяет это. Сказав это, идиоматический стиль Clojure должен быть чисто функциональным большую часть времени .
  • Метапрограммирование. Лиспское наследие Clojure как гомоиконического языка делает его идеальным для метапрограммирования / генерации кода. Легко «расширить язык», чтобы создать свои собственные DSL или устранить биопланшет. Вы можете легко использовать Clojure в качестве собственного языка сценариев игры, а динамическая компиляция кода означает, что ваши сценарии будут работать так же быстро, как и ваш основной игровой движок.
  • Доступ к библиотекам Java . Вы можете использовать все библиотеки Sound / Graphics / AI / Networking из Java, что является огромным преимуществом по сравнению с большинством других функциональных языков (где вам придется либо писать их с нуля, либо разрабатывать много хитрого интерфейса). Это может быть спасением жизни.
  • Кроссплатформенность - это бесплатно для запуска на JVM, но это хороший бонус.
  • Производительность - для динамического функционального языка Clojure работает настолько быстро, насколько вы можете. Он всегда компилируется JIT, никогда не интерпретируется. с помощью интеллектуальной оптимизации вы можете сопоставить скорость чистого низкоуровневого Java-кода в Clojure. Например, вы можете использовать массивы примитивов Java или предоставить подсказки типов, чтобы компилятор генерировал статически типизированные вызовы функций в критичном для производительности коде.
  • Параллелизм - Clojure имеет отличную модель для управления параллельным состоянием, поддерживаемую впечатляющей программной системой транзакционной памяти. Стоит посмотреть это видео, чтобы узнать больше о том, как это работает.

Единственный случай, когда я бы не подумал о Clojure, был бы, если бы я писал современную графически интенсивную игру, в которой вам нужна передовая производительность (где я все еще думаю, что вам нужен C / C ++).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.