Подходят ли функциональные языки программирования для графического программирования? - PullRequest
38 голосов
/ 18 марта 2012

Просто очень любопытно по этому поводу, из моего собственного опыта, все графическое программирование кажется связанным с C или C ++.Как и Direct10X.Предоставляет ли функциональный язык программирования своего рода графическую библиотеку для разработки видеоигр?

Ответы [ 3 ]

79 голосов
/ 18 марта 2012

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

Это простая игра, но я написал Ironclad: Steam Legions в Clojure как упражнение по функциональному программированию для разработки игр.

Вот некоторые уроки, которые я выучил / общие замечания по использованию Clojure для программирования игр:

  • Вы должны быть осторожны с производительностью , поскольку игры могут быть очень требовательными, а функциональные языки накладывают некоторые накладные расходы. Clojure, безусловно, «достаточно хорош» для большинства игр, но вам нужно знать хитрости, чтобы ваш код был оптимизирован. Например, функциональные языки могут быть немного перегружены GC, создавая много временных объектов. Чтобы избежать этого, вам необходимо освоить приемы (например, использовать метод Reduce таким образом, чтобы избежать создания новых объектов последовательности или используя примитивную арифметику)

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

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

  • Clojure отлично подходит для сценариев игры . Динамическая природа в сочетании с компиляцией во время выполнения и возможностью определять произвольные DSL с помощью макросов является огромной победой. Фактически, даже если бы я писал игру на языке ООП, таком как Java, я бы серьезно подумал об использовании Clojure (или другого Lisp) для сценариев.

  • Clojure потрясающе для интерактивной разработки . Я часто запускал игру в одном окне, одновременно взламывая код запуска в REPL. Забавно изменять структуры игровых данных и сразу же видеть эффекты! Это потрясающее видео также дает вам представление о том, что возможно с разработкой в ​​стиле Clojure.

  • По крайней мере, в Clojure вы часто захотите использовать библиотеки Java для графики , например. Качаем для 2D или LWJGL для 3D. В некоторых случаях обертки для них уже существуют, однако я обнаружил, что использовать их непосредственно из Clojure достаточно просто. В конце концов, Java-взаимодействие так же просто, как (.methodName object arg1 arg2)

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

19 голосов
/ 18 марта 2012

Это хорошая серия на эту тему: (4 части) Чисто функциональные игры .Вы можете использовать этот подход в Clojure и использовать базовые библиотеки игр Java для управления графикой.

5 голосов
/ 23 июня 2017

Вероятно, никому нет дела до этого теперь пятилетнего вопроса, возможно, даже от первоначального вопроса.Но, как старый парень в области графики в Лиспе, я хотел взвесить. В названии упоминается «графическое программирование», тогда возникает вопрос о библиотеках для разработки игр.Стоит отметить, что графическое программирование включает в себя множество тем, не связанных с программированием игр.(Так, например, выполнение визуализации данных в Clojure было бы примером «функциональных языков программирования, подходящих для графического программирования», но не игрового программирования.) Существует также различие между функциональными языками (такими как Lisp, где все является функцией, норазрешены побочные эффекты) и языки, которые являются чисто функциональными только с неизменяемыми типами данных (например, Haskell или Clojure).

Конечно, существуют основанные на Лиспе графические системы, написанные в стиле «мультипарадигмы», который предназначен дляскажем, не чисто функциональный / неизменный.Например, я работал в Symbolics в начале 1980-х годов, когда мы создали одну из первых систем «создания цифрового контента» (например, Maya или AutoCAD) полностью на Лиспе.Моя дипломная работа в 1978 году была посвящена предметно-ориентированному языку на основе Lisp для процедурной анимации под названием ASAS.Мы использовали это в Triple-I (Information International Inc.), чтобы сделать очень раннюю работу CGI для спецэффектов в художественных фильмах, включая TRON 1982 года.(Это описано в этой статье SIGGRAPH .) Наконец, игровая студия Naughty Dog запрограммировала игровую логику нескольких названий (Crash Bandicoot, Jak и Daxter?) На языке, вдохновленном Scheme, под названием Game Oriented Assembly Lisp (ЦЕЛЬ).

Говоря о более современных усилиях и более строго функциональных / неизменных языках: «LambdaCube 3D - это чисто функциональный язык, специфичный для Haskell, для программирования GPU (графический процессор)».

В своей речи Джона Кармака на Quakecon 2013 он подробно (около 30 минут) рассказал о своем интересе и экспериментах с чисто функциональными языками для разработки игр.По его мнению, использование функционального программирования имеет очевидные преимущества, но есть некоторые проблемы, и что он не продвинулся достаточно далеко, чтобы иметь твердое мнение.Он говорит об экспериментах с Хаскеллом и Лиспом.Эта тема относится к 1: 17: 00-1: 49: 00 в этом видео .

...