为什么还用C编程?

本文翻译自Dr. Dobb's杂志主编Andrew Binstock的文章“Why Code in C Anymore?”,以下是翻译正文。

传统的那些选择C而不是C++的理由的说服力已经逐渐地被削弱。还有什么继续使用C的更好的理由么?

一个 Dr. Dobb's的老读者最近问我:为何人们还在使用C编程。这个话题最近曾在我们站点的评论中出现过。早期也曾出现在与一些行业公司的对话过程中,尤其是微 软。在C++早期,根据你的需要,你可以有许多使用C或C++的理由;但随着C++的演化,C的大量传统的杰出特性已经变得不那么优越了。考虑到 这些点一般是在比较两门编程语言时首先会被考虑到的,因此我们来一起看一下。

性能。通常我们都认为C++应用的性能要比C的慢。但在大多主流平台上,这个性能上的差距在今天已经变得非常小了。比 如,Alioth上的计算机基准测试报告显示C++(运行在32位Linux上)在运行基准测试时的性能要比C慢27%。其他一些研究结果显示这个差 距或略大或略小些。但在几乎所有例子中,C++都是仅次于C的运行第二快的编程语言。它通常要比运行在JVM和.NET平台上的语言快出很多。因 此,尽管C在基准测试上依旧保持有优势,但对于大多已经可以接受Java性能的应用(比如企业应用或面向客户端的应用)而言,这个差距显得并不是那么重要 了。

普遍性。在嵌入式编程领域,C仍然保持着首选语言的舒适地位,这缘于这样一个事实:每个硬件供货商都会提供一个C编译器。而大家普遍 也认为C++在嵌入式开发方面表现没有那么强势。不过,当今大多提供编程工具的组件供货商也提供了C++编译器。(但PIC微控制器方面继续保持 着例外)。这是一个正在逐渐缩水的好处。

可移植性。C++曾被认为是一个可移植的老大难(实际上在C89标准出台以前,C也是一个老大难)。然而,当今的编译器对C++语 言的核心实现的十分充分,以至于大多软件可以通过重新编译进行移植,不需要什么调整。如果真的需要进行调整的话,请提供像Brian Kernighan曾经说过的那样的使用语言中段的代码(译注:所谓语言中段的代码,即那些平台无关,不涉及可移植性的代码语法和元素)。库的可移植 性是一个更令人头疼的因素,不过C库也存在同样的问题。在C和C++中,编译器的标准遵守程度迥异,因此使用那些没有获得全面支持的新特性 (C99、C11以及C++11)将会是一个内在的风险。也就是说,C89可能是世界上最具可移植性的代码了。(为此,当可移植性成为最关心的事 情的时候,我们将选择它。例如,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++将继续在原生语言中占据主导位置,并且很可能扩大其足迹。

果果的蛇年春节独白

我叫果果,现在两岁零9个月了。我的身高快到1米了,人家都说我长得又高又大^_^,我比邻居家的小哥哥还要高,要知道他可比我年长8个月呢。

最近我很开心,因为我和爸爸妈妈一起回老家与爷爷奶奶过春节了。春节是什么,我还不是很清楚。但我的印象中一到春节周围的人都很开心,家家户户都挂上了红灯笼,门上都贴着福字和对联,还燃放那种让我怕怕的很响的鞭炮。春节最让我高兴的是爸爸妈妈都不用去上班了,可以天天陪我一起玩,给我买好吃的,还有新衣服穿,新书看,新玩具玩^_^。春节前爸爸妈妈都很忙,每天都加班,很晚才会来,我可想他们了,每天都盼望他们早点下班回家。

听爸爸说,这是他结婚后第一次回爷爷奶奶家过年,也是第一次带我回家过年,他很高兴。我也高兴,因为我的语言能力已经有了很大提高了,我可以用语言表达我的意思了,可以和爷爷奶奶聊天了^_^,只是我的吐字还不那么清晰,也不知道我说的话爷爷奶奶能不能听懂^_^。

记得我是坐爸爸的车回老家的。爸爸的车开得好快,要比平时我看到的马路上的车快多了,据妈妈说这是高速公路,让我有些小兴奋哦。奶奶和爷爷老早就在门口等着我们呢。我一年到头与爷爷奶奶见面的次数都很有限,不过不知道为什么,一见到爷爷奶奶我就感到很亲切,很喜欢让他们抱抱我^_^。爷爷准备了我最爱吃的菜,那天我没让妈妈喂我,我是自己吃的,让爷爷奶奶看看我长大了,我吃的很饱。

除夕那天我和爸爸妈妈又去奶奶家了,听说除夕是一大家人团圆的日子。这回我们一家五口人算是真正团圆了。这天爷爷做的菜比以往都要多得多,我们都没有吃完,还剩了好多菜,爷爷做的菜真好吃。晚上我还吃到爷爷奶奶包的饺子了,特别香。大人说除夕夜都要吃饺子。我还不会包,长大一定和奶奶学,给他们包上一顿饺子,他们一定很开心。

初一。爸爸妈妈给我穿上了新衣服。爸爸妈妈一见到奶奶爷爷就行礼拜年,他们拜后,还让我拜。这可是我第一次拜年,还不是很熟练。不过之前姥姥教我好几遍了,于是我就说:“爷爷奶奶过年好,祝你们身体健康,长命百岁”。说完后,我看爷爷奶奶都特别高兴,还给我压岁钱了呢。

初二。爸爸妈妈带我去了爸爸的姥姥家。爸爸的姥姥家地方不大,但里面的人可真多,大家都微笑着瞅我,弄得我怪不好意思的。妈妈爸爸让我拜年,我就把姥姥教给我到拜年话说了很多遍,说得我口都渴了,不过好多人给我压岁钱,我还是蛮高兴的。让我更高兴的是我的两个小姐姐也来了,这样我就可以和她们一起玩了,我们一起玩走迷宫,一起玩涂鸦,好开心的。今天的午饭好丰盛哦,比除夕那天爷爷做的菜种类还要多出一倍。不过我是小孩,不能上桌,于是妈妈就把我爱吃的菜挑出来喂我^_^。我特别喜欢喝露露,不过每次我说要喝露露,他们都开心的笑,似乎我的发音不准,把“露露”发音成“怒怒”了^_^。

初三和初四两天我比较忙,一直都跟着爸爸妈妈到处走亲访友,所到之处我都成为了大家的关注焦点。

好不容易会一趟老家,我要多陪陪奶奶和爷爷,于是我初五一整天都和奶奶爷爷在一起。爷爷还给我炖了一只笨鸡,不过我还是喜欢菜里的蘑菇,因为鸡肉我嚼不烂:(。晚上爸爸还实现了一个他对我的承诺:放烟花给我看。爸爸说小烟花是不出响的,不用害怕。爸爸一共给我放了8个小烟花,都特别好看。

一转眼就到初六了,年过得真快啊,爸爸妈妈的假期要结束了,今天我们就要返回沈阳了。爷爷奶奶和姥爷给我们拿了好多东西,大包小裹的,我也不知道是啥,估计都是吃的吧,把爸爸车的后备箱装得满满登登的。车开走了,也不知道下次何时回来探望爷爷奶奶和姥爷。初六中午我们就回到沈阳的家里了。家里可真是热,我只穿一套衬衣衬裤还冒汗呢,爸爸说屋里温度有28度。由于这几天每天都有好吃的,我脸上都起痘痘了,爸爸说可能是吃鱼虾多过敏了,于是让我改吃青菜了。

初七。爸爸似乎还想多在家里陪陪我,于是他又请了一天假,我真高兴。妈妈还有两天假,我还可以与爸爸妈妈一起玩。

初八。爸爸上班了。不过妈妈在家。妈妈这两天一直守着电视,看那个叫“甄寰传”的电视剧,从这个台调到那个台,看得不亦乐乎。还好,昨天爸爸给我买了新拼插玩具,够我玩上一阵子的。

最近天气也转暖了。爸爸说春天快来了,外面的冰雪也开始融化了。姥姥说下个月又要送我上幼儿园了,在家里待了这么多天,不知道还能不能适应幼儿园的环境了。唉,焦虑啊。

下面是爸爸妈妈在春节期间用手机给我拍的一些照片,大家看看我是不是长大了^_^。

出水芙蓉^_^

今儿真高兴儿!

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats