我正在通过限制自己不使用set!来学习Gambit-C Scheme中的函数式编程。我认为使用这种环境编写一个小型的OpenGL游戏可能很有趣,这似乎很适合游戏开发。功能GLUT?
但是,使用OpenGL和GLUT时,似乎很难坚持功能风格并避免全局状态。我不认为这是游戏编程本身的根本限制,但是基于回调的API(如GLUT)在功能编程方面似乎不太适用。
例如,我试图将世界视为变异状态向量的流,这是一个时间步和用户输入事件交错列表的函数。这个想法似乎没有问题,但对于异步编程似乎并不容易。例如,我必须为GLUT的显示功能注册一个回调函数,它应该以某种方式访问此流中的“当前”项目。与此同时,没有任何东西可以通过从中推动流向前进。在理想情况下,我需要一些“外部”GLUT,一种主要功能,它在某种程度上取决于(或者一次)各种GLUT功能。如何在GLUT周围开发这样一种风格的游戏引擎,或者另一种问题是我怎样才能最成功地将GLUT与我的引擎隔离开来?是否有可能让GLUT生成这样一个交错的事件列表到外部程序?比如,Haskell如何处理这个问题?
这里的问题并不是太多的副作用,而是如何处理GLUT在需要完成某些操作时异步回调的事实,而不是建立功能依赖关系。我想知道是否有一种方法可以让GLUT从某种外部GLUT的角度出现,但也许这不是一个非常明确的想法。 – Steve 2009-08-26 00:07:55
对不起,我没有使用GLUT超出字体插件的OpenGL。我正在考虑openGL弹出/推送状态。 不能真的帮助你。 – 2009-08-26 15:05:02
>当副作用将一些东西绘制到屏幕上时,我看不出如何进行无副作用的函数式编程。 虽然最终的输出步骤吸引了一些东西(“打印”),但我们用纯数字方式编程。同样,功能图形的关键在于提供一种数据类型,它具有丰富有用的代数,其中组合(编程模型)发生,具有精确和易处理的语义并且没有副作用。然后不要担心绘画比你担心如何打印数字更多。 – Conal 2010-04-01 00:16:16