Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

为什么仍还用C编码?

$
0
0
作者Andrew Binstock

概述:作者论述了C语言仍然屹立不倒,长久不衰的原因:过去C语言在性能和可移植上面有巨大优势,但随着时间的流逝其他语言(C++等)在性能和可移植上与C的差距越来越小.但为什么C还很火.作者认为是因为C语言的简洁性,使它在系统级别上仍然无可替代.但是对于应用程序开发还是选择其他语言较好,因为开发效率更重要.


正文:



偏好C而非C++的传统的理由正在慢慢的消逝.还有什么好的理由仍然使用C吗?


一个Dr Dobb's的长期读者最近问我一个问题:为什么人们还要用C去编码.这个主题最近出现在发布在我们网站上的一些评论中,更早些时候也出现在与一些特别是来自Microsoft的业界人物的对话中.在C++的早期时候,有很多理由根据需求来选择C还是C++;但是因为C++已经进化了,许多传统的有区别的C的特性已经变得不那么有优势了.因为这些优点当比较二种语言时总是首先出现,我们来审视一下:
1. 性能. C++过去总是比起C慢很多.但是在许多主流平台上,在今天这区别已经很小了.例如,Alioth上的计算机标准检查程序显示在32位Linux上C++运行一系列测试比C要慢27%.其他调查显示这种区别略高或略低.但是在大多数情况下,C++是除以外最快的语言.它通常要比JVM和.NET上的语言快多了.所以尽管C在标准测试上仍然有优势,在大多数应用都能接受Java的性能情况下(比如,任何企业级应用或者面向客户端的软件), 这种区别并不严重.
2.普遍性.在C仍然作为首选语言的嵌入式世界里,偏爱C是因为每一个硬件厂商都提供C语言编译器.过去C++在嵌入式世界里并不强势.然后今天大多数提供编程工具的组件厂商都会提供一个C++编译器.(PIC 微控制器总是一个例外).这是一个在退化的优势.
3. 可移植性.C++曾经很难移植(C89标准出现以前的C也一样难移植).然而今天的编译器已经足够地实现了C++语言核心保证软件可以在需要的情况下做很小的调整就能重新编译,前提是代码能够像Brian Kernighan曾经说的在语言的中间写.库的可移植性是一个更多麻烦的因素,但是C语言库也存在同样的问题.对C和C++二个语言,各种编译器对标准的支持程度差距非常大,所以使用没有完全支持的特性(C99,C11和C++11)风险是一样的.那就是说,C89可能是世界上最具移槙性的代码了.(也是基于这个原因,当移槙性是绝对顾虑时总是选择C语言.例如,Lua团队基于性能和这个原因而选择C).


凭心而论,对于性能,普遍性和可移植性C比C++有优势,但是这些优势正在渐渐的消逝.从这看,C++社区做的很好,通过它的使用者解决了曾经是采用的严重障碍.问题是:这些缩减的优势补偿了C++的好处了吗?包括面向对象,异常处理,更好的类型管理,模板,更加丰富的标准库等.没有了这些益处,C的每个项目都感觉像在用剪刀在修剪草坪.


那些特性确实可以帮你实现代码,但是它们是有复杂性代价的,这点上C跟C++还是有巨大的不同.C是少数几个小巧且足够简洁到可以整个怀抱下的编程语言之一.完全知道语言的来胧去脉以及对标准库了解到不用查看API手册就能用的很好是完全可能的.我相信这在其他语言中是不大可能的,起码确信在C++中不行.


这种小巧是语言的一个魅力.你可以快速的学习它也可以快速的达到卓有成效.别外一个少有提及的特性:最高的清晰度提升了这种简洁性.我的意思 是除了句法外的语义上的清晰度.从语义上讲,在C中仅有一些有限的方法做事.因此,当你阅读任何其他人的代码时,能确切的知道他们在做什么.对比在C++中,有太多不同的方法能达到同样的效果,这是程序所喜爱的灵活性.因为这个层面上的C的清晰性,对于实现复杂的架构来说C是卓越的语言.基于这个原因,JRockit JVM(现在是Oracle的首要JVM)的原作者选择了C.几年前的一次对话中,他们阐述了选择了C而非C++的观点,他们可以让开者更快速的上手.并且当深入代码之中时,他们可以比在C++更容易理解他们看到的代码.


单就这个原因,在系统级别代码中C仍然是非常棒的选择:速度快,可移植,易读易理解.然而对于重点多在开发效率的应用程序,显然C++会继续统治着本地语言并且很可能会扩张它的足迹.

原文: Why Code in C Anymore?


原文下的评论也很有意思比如第一条JSawyer说到:他理解不了为什么TIOBE把C列为第二受欢迎的语言.是不是因为Google搜索时把++和#字符去掉了所以统计显示人们搜索的是"C Programming"?
作者:hitlion2008 发表于2013-3-17 23:16:38 原文链接
阅读:37 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>