用于分布式图形处理的Scala与C++

ade*_*rtc 3 c++ scala graph

对于最短路径计算等图形的并行处理,Scala会胜过C++吗?如果没有,它会慢多少(我假设Scala并发比C++"更容易"编写,因为C++没有标准支持这些东西)

我正在考虑学习Scala,既要学习一门新语言,也要学习并发支持.一旦我完成了,我正在考虑编写一个分布式图形库来练习Scala,并且供我自己使用,但是如果C++会更快并且更容易编写代码的好处不值得权衡,当性能是关注,我将不得不重新考虑这个任务.

mik*_*era 13

我建议使用Scala而不是C++,原因如下:

  • 并发 - 正如你所说,JVM上有很好的并发支持,而Scala是一种很好的语言,可以从中受益.这并不是说你不能用C++编写并发代码,但是你会发现它在Scala中更容易"开箱即用".
  • 垃圾收集 - 许多图算法从垃圾收集和其他内存管理方法中获益匪浅.同样,JVM上的垃圾收集非常好(比C++世界中的任何东西都要好),并且会使您的算法更容易编写.
  • JIT编译器的质量 - 为了遍历堆内存中的对象图,我怀疑好的C++代码和JVM JIT生成的代码之间会有明显的性能差异.JVM针对这种用法进行了大量优化.

当然,可以用C++编写性能极高的代码.在某些情况下,手动调优的C/C++代码可以胜过JIT(例如,当您可以证明不需要它们时,无需进行数组边界检查或空指针检查).或者你可以编写自己的内存分配器,专门用于图形处理,理论上可能胜过JVM中的通用垃圾收集器(如果你想尝试这个,你最好是一个真正的天才....)

总的来说,用C++编写所有东西要复杂得多,而理论上你可以实现的边际性能提升几乎肯定不值得.

  • 编写出执行java的c ++并不难,你专注于单一架构.这就是如此接近金属意味着什么.它一般不值得努力. (2认同)
  • 您可能也想考虑D(http://www.d-programming-language.org/).它编译为本机代码,如C/C++,具有并发功能和垃圾收集. (2认同)
  • boost和现代c ++方法可以解决所有这些原因.但scala肯定更直观,需要更少的经验. (2认同)