一次顺带的语言性能评测 -- 以2D水波特效的实现为例

    本来一开始我只是想学习一下如何实现2D水波特效,关于这个问题早有现成的效果不错且简单的算法,google一下可以找到很多资料,比如这篇http://freespace.virgin.net/hugo.elias/graphics/x_water.htm。但是由于性能上的问题,导致我更换了多种开发语言,最终也使得这次的学习变成了一次编程语言的shoot-out游戏。

    简单来说,2D水波特效是个2D图像处理问题,着迷于DSL的我首先选择了Pan#(http://www.haskell.org/edsl/pansharp.html),一种函数式的针对图像处理的DSL,它的思想、语法和语义都完全来源于Haskell社区的Pan(http://conal.net/Pan/)。作为一种图像处理的DSL,它的基本思想是将图像看成是把2D连续空间映射为色彩的函数,通过应用各种各样的变换函数便可以改变图像函数的映射规则,从而改变图像,这也就实现了各种各样的图像处理。但是当我开始动手做的时候,还是发现了不便。其实Pan#提供的编程模型与流(stream)编程非常类似,同一个2D连续空间中的点与点(同一个流里的元素)之间是比较独立的,绝大多数时候它们不会同时参与运算。但是水波特效不同,图像所在的2D空间中相邻的点与点之间是要进行混合运算的。而且由于Pan#是纯函数式的,没有可变状态(mutable state),所以我用了一些手段迂回地实现了一个demo,但是很可惜它能编译通过,但是启动时却会抛出CLR异常(Pan#是针对.NET平台的)。

    接下来,我换用NetLogo(http://ccl.sesp.northwestern.edu/netlogo/)。这是一个用Java实现的大规模多主体(multi-agent)可编程系统。因为NetLogo支持大规模并发,我想当然地认为它在计算密集型的图像处理中也能胜任,但是最后的结果却惨不忍睹。

    然后我选择了Haskell,底层采用SDL。这个版本的实现我尽量能够functional一点,并且此

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值