语言比较

计算科学 语言
2021-12-10 02:18:37

我不是想在这里开始一场语言火焰战争。我只想问一个简单的问题:

有没有比较好的科学计算语言资源?

通过比较,我的意思是基于: 可以使用的稳定库的数量。编程努力速度等

我在网上找到了一些比较,但似乎都与一般计算机程序员有关(不适用于数值计算)。

另外,我问的是一般科学计算的问题,不一定是矩阵代数。例如,这还包括统计、工程等。

我并不是要问“我应该学习哪种语言”类型的问题。我要求进行良好的比较。

我对 C、Java、C++、C# 和 Python 尤其感兴趣。目标是使用尽可能多的稳定库在具有不同硬件(包括 Android)的各种科学应用程序中构建可用代码。

我还阅读了并行科学计算软件开发语言?但它过于关注矩阵代数。

3个回答

我对学生的建议始终是:最宝贵的资源是你自己的时间。如果有一种编程语言A可以让你用语言B一半的时间编写程序,但程序慢 20%,那么这仍然几乎总是一个胜利,除非你需要运行程序几个月。

这就是为什么大多数现代科学计算库都是用 C++ 编写的,而不是用 Fortran 或纯 C 编写的:因为用 C++ 编写和调试代码比用 Fortran 快得多,而且因为你有大量的其他库然后可以使用(尤其包括 C++ 标准库),这使得编程变得如此之快。

可以用任何图灵完备的语言进行任何可行的计算。

因此,比较不是在语言之间,而是在编译器、运行时和库集之间。这假设设计和实现算法的人在所选语言方面有足够的能力。运行时和库(交付时)应该使用最低复杂度的算法。

Benchmarks' Game是一个非常棒的资源,可用于教育目的。对于痴迷于性能的类型来说真的是一个大开眼界(如果您正在处理实际大小的问题,那么您就是其中之一)。

然而速度并不是一切——真正的魔鬼在于小细节(正确性):

  • 浮点数是如何解析、舍入和输出的?
  • 是否有任何库函数可以强制使用特定的舍入模式?
  • 数学函数是否适用于极端情况(正负零等)?
  • 是否有任何下溢处理?
  • 处理复数的内置设施是否符合公认的实践和标准?

必须说您的问题具有误导性:在统计和工程以及任何其他学科中,没有矩阵计算就可以完成的事情很少

我会推荐这样一种方法:您应该学习一种通用(生成快速代码 - 编译)语言,如 C/C++ 或 Fortran。我最喜欢的是 C++。在每个您可以轻松使用的 dll 上,您有 BLAS/LAPACK 库,还有用于在 GPU 上计算的 CUDA(Fortran 和 C)或 OpenCL(看起来像 C)扩展。

另一方面,使用面向科学计算的所谓脚本语言很方便,因此您可以轻松检查某些东西是否可以正常工作,轻松制作漂亮的情节等等。我使用过 Scilab,现在我正在为此尝试学习 Mathematica。

我的选择是:C++(大量可用的数值(BLAS/LAPACK、GNU 数学库、CGAL、...)和可视化 (VTK) 库。对于高效工作(不是 HPC 计算)Mathematica 或 Maple 非常有用,但有时很烦人,但真的很强大。