Функциональный глютен? - PullRequest
       15

Функциональный глютен?

4 голосов
/ 26 августа 2009

Я немного изучаю функциональное программирование в Gambit-C Scheme, ограничивая себя тем, что не использую set !. Я подумал, что было бы забавно написать небольшую игру OpenGL с использованием этой среды, которая, кажется, хорошо подходит для разработки игр.

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

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

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

Ответы [ 4 ]

3 голосов
/ 26 августа 2009

Вам будет очень трудно реализовать функциональную графическую систему. Даже привязки Haskell к GLUT используют императивное программирование через монаду IO. Самое близкое, что я слышал о том, что вы пытаетесь сделать, это Функциональное реактивное программирование , но библиотеки еще не готовы к прайм-тайм, и для этого существует серьезное отсутствие реальных учебных пособий. .

2 голосов
/ 26 августа 2009

Вы можете посмотреть библиотеку FieldTrip для некоторых идей по функциональной графике.

1 голос
/ 26 августа 2009

Это очень важно для конечного автомата, такого как openGL, что у него есть состояние!

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

0 голосов
/ 26 августа 2009

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

...