订阅软件研发RSS CSDN首页> 软件研发

系统级编程语言性能大PK D语言成首选

发表于2013-07-25 15:21| 次阅读| 来源CSDN| 0 条评论| 作者夏梦竹

摘要:C/C++已经统治系统编程很久,除了ObjectiveC之外语言都无法获得很高的关注。有人用多种系统级语言编写了同样的地图生成工具来测试它们的性能,包括D(DMD,LDC,GDC)、Go(GCC-Go,6g)、Haskell(GHC)和Rust.

C/C++已经统治系统编程很久,除了Objective-C之外语言都无法获得很高的关注。有人用多种系统级语言编写了同样的地图生成工具来测试它们的性能,包括D(DMD,LDC,GDC)、Go(GCC-Go,6g)、Haskell(GHC)和Rust。>>>查看Github项目列表


大部分的运行时间是花在这个上面(以Haskell为例)


C语言在各编译器下测试比较

注:LDC、Rust使用的是LLVM版本,Clang是GCC 3.2,GCCGo使用的是GCC4.7.3版本;而GDC使用的是GCC 4.6.4。Rust使用的是0.8-pre (9da42dc 2013-07-17 04:16:42 -0700),GHC是7.6.2版本;DMD是2.036;Go语言使用的是6g 1.1.1版本。

相比C/C++,这些语言都原生支持了诸如垃圾回收这些高级特性,也因此无一能达到C/C++的运行速度。这其中表现最差的是原生Go语言编译器6g,只有Clang 22%的速度,而表现最好的是基于LLVM的D语言编译器LDC,达到了79%。由于原生就使用了LLVM编译,Rust成为各语言原生编译器里最快的一个,但也只达到了45%。

从结果来看,D语言一定是首选。由于D语言许多特性都依赖垃圾回收,如果需要关闭垃圾回收而又要保持良好的使用体验,则推荐Rust。(注:文中部分内容引自Solidot

更多详细内容参见:Togototo


补充:文中第一句提到C/C++已经统治系统编程很久,那么为什么说C语言是系统级编程的首选?

笔者在知乎上看到张泊宁的回答很有见解,引用至此分享给大家:

第一,C语言编译出来的代码执行效率高。Java是编译出来的是字节码而不是计算机可直接读的指令,执行时候还要再翻译一遍。虽说这个翻译过程还是很快的,但对于性能要求比较高的系统级软件仍然是效率优先,不能使用类似Java、C#编译出的字节码程序。

第二,C语言的指针功能非常强大,一些像树、表这样的数据结构离开指针可谓寸步难行。而且指针操作非常高效。但指针操作对于程序员来说很容易在使用中出错,因此Java不支持指针。再加上上面说的效率问题,所以没有指针的Java不能用来编写系统级应用。

第三,使用C语言编写的程序可以非常方便地移植到另一套指令系统的计算机上。参见Unix和Linux。

为什么不用效率更高的汇编语言?因为用汇编语言编写程序极其费时费力,而且不便移植。所以大多数情况下用的是嵌入式汇编,即高级语言程序内部对于时间或空间要求非常苛刻的一段使用汇编语言书写,但整个程序仍以如C这样的高级语言为主。况且汇编语言是跟指令系统紧密联系在一起的,不方便移植。

0
0
  • CSDN官方微信
  • 扫描二维码,向CSDN吐槽
  • 微信号:CSDNnews
程序员移动端订阅下载

微博关注

相关热门文章