1

今天我的另一个比较模棱两可的问题,对不起。

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

我的计划是在我的 VPS 上无限期地运行该软件,并构建某种前端 GUI 允许用户探索漂亮的粒子等等。在我使用的 JSON 库、C/C++、OpenFrameworks 和该死的 Xcode4 之间,我已经产生了太多的 SIGBIRT 和 GDB 错误需要处理。我已经走到虚拟世界的尽头来修复它们,一遍又一遍地重写所有内容。我什至设法 SIGBIRT openframeworks draw circle 方法,哈哈!

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

提前谢谢大家!

4

2 回答 2

5

Haskell(或者更具体地说是 GHC)的数字运算速度正在接近 C++,但稍微落后了一点。但是,这当然不可怕,Haskell 在并行性方面的优势可能会变得很重要。也就是说,如果您首先直接用 Haskell 编写它,那么很有可能很容易将它重构为现在或将来并行运行。对于 C++,情况并非如此。

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

您提到的崩溃听起来可能表明您的问题有点复杂。Haskell 擅长的地方在于管理......好吧,任何事情的复杂性。所以,如果问题很复杂,那么 Haskell 会很好地为您服务。

Haskell 中的外部函数接口设计得很好,尽管您需要在 Haskell 和 C++ 之间编写 C 胶水。因此,这是您处理数字的另一种选择。

对于 Web 界面,请看一下“yesod”,它正在看到非常活跃的开发并宣传自己在做 RESTful。

于 2011-09-11T21:31:09.043 回答
2

AFAIK,数字运算速度并不是 Haskell 的强项——它是一种高度抽象的语言,与“金属”相去甚远;它在数字处理上下文中的优势在于其语义的“数学性”——Haskell 代码通常读起来很像数学证明,它的许多概念都是从数学的各个领域借来的。

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

OTOH,如果您有一个用于繁重工作的库,并且您只需要编写胶水以使各个部分一起工作,那么请使用您最喜欢的任何东西 - python、C#、java、haskell、C++ , ... - 只要它们对您的所有库都有绑定,您就很好。如果你没有库,那么你也可以考虑用 C 编写性能关键部分,然后将它们拉入你最喜欢的高级语言中——这在 C++ 中是微不足道的,在 python 或 haskell 中稍微难一些,而且非常该死在java中不方便。

于 2011-09-11T14:04:47.733 回答