在很长一段时间内绘制密集粒子系统的安全语言是什么?

时间:2011-09-11 13:54:58

标签: c++ haskell openframeworks

今天另一个我很模糊的问题,抱歉。

目前我已经写了一些不错的软件,它们有一个“滚动你自己的”RESTful客户端,从twitter中提取数据。然后使用Open FrameWorks(一个与c ++一起使用的框架)使用许多粒子系统对这些数据进行可视化。

我的计划是在我的VPS上无限期运行软件,并构建某种前端GUI,允许用户探索漂亮的粒子等等。在我使用的JSON库,C / C ++,OpenFrameworks和吓坏Xcode4之间,我已经产生了太多的SIGBIRT和GDB错误需要关注。我已经到了虚拟世界的末端来修复它们,并且一遍又一遍地重写所有内容。我甚至设法用SIGBIRT openframeworks绘制圆圈方法,HAH!

(TL; DR从这里开始)好吧所以无论如何我从头开始,寻找一种强大的语言,可以通过一组好的粒子来处理数学和爆炸,并在最长的时间内运行得很好。现在我在考虑haskell,有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:5)

Haskell(或更具体地说是GHC)的数字运算速度接近C ++,但它有点落后。然而,它肯定并不可怕,并且Haskell在并行性方面的优势可能变得很重要。也就是说,如果你首先在直接的Haskell中编写它,很有可能很容易重构它现在或将来并行运行。对于C ++来说,情况并非如此。

'vector'包(在Hackage上)对于适合数字运算的数组来说是一个不错的选择。它支持可变数组,以防需要这种方法。但是,如果您准备好进一步处理并且算法可以并行化,那么您可能需要查看“repa”软件包,并在GPU上获得极致性能,请查看“Accelerate”(其中)有效,但仍被归类为实验性的。)

你提到的崩溃声音可能表明你的问题有点复杂。 Haskell做得好的地方在于管理......好吧,任何事情的复杂性。所以,如果问题很复杂,那么Haskell会很好地为你服务。

Haskell中的外部函数接口设计得很好,但是你需要在Haskell和C ++之间编写C胶。所以,这是你数字运算的另一个选择。

对于Web界面,请查看“yesod”,它看到非常活跃的开发并将自己宣传为RESTful。

答案 1 :(得分:2)

AFAIK,数字运算速度不是Haskell的最强点 - 它是一种高度抽象的语言,远非“金属”;它在数字处理环境中的优势在于其语义的“数学性”--Haskell代码通常读起来就像数学证明,其中许多概念都来自数学的各个领域。

对于普通的数字运算,C ++可能仍然是您的最佳选择,因为它允许您保持接近硬件并优化机器级别的紧密循环,同时提供更高级别的编程结构来管理复杂性。

OTOH,如果你有一个适合繁重工作的库,你只需要编写胶水来使各个部分协同工作,然后选择你最熟悉的东西 - python,C#,java, haskell,C ++,... - 只要它们对你的所有库都有绑定,你就会很好。如果你没有库,那么你也可以考虑在C中编写性能关键部分,然后将它们拉到你最喜欢的高级语言中 - 这在C ++中是微不足道的,在python或haskell中稍微有些困难,而且非常该死的在java中不方便。