Есть ли игровой движок, использующий функциональный язык программирования? [закрыто]


10

Есть ли игровой движок, использующий функциональный язык программирования, подобный Scheme, Common Lisp, Clojure или JavaScript?

Я пробовал Unity3D, но их «JavaScript» на самом деле не JavaScript, он строго типизирован и не работает.


2
Я использую ThreeJS, но, хотя он полон удивительности, это отсутствие активного сообщества, и документация является серьезной проблемой.
MaiaVictor

5
Почему вы хотите программировать на функциональном языке программирования? С какой проблемой вы сталкиваетесь? Пожалуйста, будьте более конкретны. В сущности, этот вопрос слишком общий, чтобы дать один правильный ответ, и он склонен генерировать список (все в равной степени «правильных») ответов, таких как: - Как насчет Clojure в сочетании с любым игровым движком Java? - Как насчет принятия функционального стиля программирования на языке, который сам по себе не функционален? (Читайте Функциональное программирование на C ++, автор Carmack.) И т. Д.
Эрик,

2
Javascript в Unity3D так же функционален, как и обычный Javascript, вам просто нужно использовать типы C # 4.0, что-то вроде:var add : Func<int, int, int> = ...
fableal

2
Смотрите FAQ о том, какую технологию использовать. Этот вопрос, как показывают ответы, просто создает список. Это не конструктивно, поскольку нет единого правильного ответа (кроме «Да, есть»). Это не место для составления списков.
MichaelHouse

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

Ответы:


7

Есть LambdaCube, который написан на Haskell (это не совсем игровой движок, а скорее как графический движок).


2
Это также может вас заинтересовать (общий комментарий Тима Суини из Epic)
tumdum 28.12.12

Интересная ссылка, есть в п.п. здесь
bobobobo

2

Вы всегда можете использовать f # или железный Python (да, я знаю, что Python не работает) или любой другой .neной язык с XNA на платформе .net.

http://fsharpgamedev.codeplex.com/ http://www.ironpython.info/index.php/XNA_Example_with_a_Bouncing_Sprite

изменить: еще один движок, написанный на Лиспе: http://code.google.com/p/blackthorn-engine/


2

У меня нет ответа на этот вопрос в письменном виде, но я полагаю, что вы, возможно, пытаетесь спросить «почему нет более функциональных игровых движков», чем искать конкретный для использования. Если это правильно, вы должны перефразировать вопрос. Если нет ... игнорируй меня. :)

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

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

Это не значит, что функциональному программированию не место в играх. Я использую очень функциональный стиль кодирования (где это уместно) в C #, Unity JavaScript и даже C ++ 11. Некоторые очень специфические проблемы лучше или, по крайней мере, легче всего решить с помощью функционального стиля, и большинство популярных языков сегодня поддерживают эту форму программирования, хотя и более громоздким способом, чем «настоящие» функциональные языки. Обычно эти проблемы, решаемые с помощью функциональных подходов, отсутствуют ни в коде ядра движка, ни в коде, который выполняется в самой игре. Функциональное кодирование может быть весьма полезным для инструментов и автономной обработки данных (например, моделей выпечки и других активов). Также можно утверждать, что программирование на GPU неопределенно функционально при написании алгоритмов,

Конечно, все же может быть лучше избегать функциональных подходов вне очень специфических обстоятельств, поскольку вы хотите, чтобы эти автономные инструменты работали как можно быстрее. Функциональные языки превосходят параллелизм, что хорошо для некоторых проблем, но абстракции от аппаратных средств обычно приводят к очень неэффективной однопоточной производительности. (Такие языки, как LISP, здесь хороши, потому что они не являются чисто функциональными, и на самом деле Common LISP - это мультипарадигма.) Абсолютно худшая вещь для игрового движка или связанного инструментария - быть узким местом для итерации контента. Причудливый движок с множеством функций, который требует от художников или дизайнеров уровней часов, чтобы сделать то, что можно сделать за 5 минут (или, в идеале, почти мгновенно), просто приведет к низкому качеству игр или отмене из-за увеличения бюджета.


1
См. Чистая библиотека игр (Чистая) и Никки и Роботы (Хаскелл).
Андрес Ф.

1
Этот ответ в основном неверен и, по-видимому, основан на очень плохом понимании реальных функциональных языков.
CA McCann

1
У вас есть какие-то реальные контрапункты?
Шон Миддледич

4
... Какой опыт у вас есть в поставке игр промышленного качества на функциональных языках? Если у вас есть опыт, поделитесь им. Делайте заявления с объяснениями и обоснованиями, а не с обращениями к экспертизе или полномочиям или личными обвинениями. Вероятность такого рода возмущенных споров и личных ссор является именно тем, почему этот вопрос был закрыт.
Шон Миддледич

4
Ты вкладываешь слова в мой рот. Я не говорю о своем опыте, потому что ваше мнение о моих знаниях совершенно не имеет отношения к теме. Не утверждайте, что у вас нет времени на изложение фактов, в то время как у вас есть время для атаки на личные уровни навыков. Возможно, у вас есть реальные исправления, но вам нужно их заявить. «Этот парень не прав», не является ценным ответом для кого-либо. Я могу просто утверждать, что вы не правы, и тогда у нас будет бесконечный и бессмысленный спор. Пожалуйста, скажите, почему ответ неправильный.
Шон Мидлдич

0

Компания Naugthy Dog использовала List в своих игровых движках и называлась Game Oriented Assembly Lisp.

Некоторую информацию можно найти здесь: http://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp

Некоторые примеры кода: http://web.archive.org/web/20070127022728/http://lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html

Он не доступен для публичного использования.


Если вы посмотрите на описание Википедии, быстро станет очевидно, что ЦЕЛЬ вряд ли была функциональным языком, несмотря на происхождение LISP.
Мейсон Уилер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.