C语言死了吗?

来源:互联网 发布:部落冲突4级法师数据 编辑:程序博客网 时间:2024/05/17 10:38

  今天上班之后浏览CSDN时,看到这么一篇文章:《C语言已经死了》,文章的作者列举了五个C语言做不到的其它语言的特性或者说是C语言的致命弱点,并且就此作出判断:C语言已经死了。
    以下摘自
Java替代C语言的可能性
    “其实那篇文章是从Ed Burnette的博客上转载来的,原文题目是“Die, C, die!”,直译过来应该是《去死吧,C!》,表达的是一种诅咒,而不是判断。翻译称《C语言已经死了》,显然是一种煽风点火的误读。CSDN网友对于其观点已经进行了批判,不过坦率地说,由于这些批判基于一个扭曲的翻译文本,所以不但没有什么新鲜的地方,而且也没有抓住原作者的重点。
    实际情况是这样的,最近一段时间,在国外的技术社群里刮起了一股风,不少人在讨论Java做为C语言替代者而成为最主流的基础软件编程语言的可能性。从大部分人发表的观点来看,对于Java替代C的趋势还是支持的。”
    可见这纯粹是无知电脑技术员——注意,不是程序员——用它极其挫劣的英语水平在扭曲国外一个高级语言使用者的观点。这是一个悲哀,自己都没搞明白C语言和JAVA语言是什么,就在这里胡吵吵,还硬将别人的文章冠以自己的思想“翻译”出来,放到网上引起一阵争议。姑且将此文的译者和作者称为“阁下”吧!
    作为一个底层软件的开发者,也是一名嵌入式系统工程师,更是一名汇编、C和C++语言的爱好者——我只是偶尔谢谢一些硬件驱动,大部分时间是写液晶驱动和图形程序而已,不是高手。很多年前,我也曾经怀疑学校教的汇编语言和C语言到底有什么用,现在不都用JAVA和C#了吗?你看看形形色色的网站、软件,哪个是用C语言和汇编开发出来的?少之又少。于是,曾有一段时间我也对其极其不屑,甚至上课睡觉,下课玩JAVA——纯粹是玩,没有深入去学习。直到大三了,学校开起了单片机这门课,我才知道,世界上94%以上的CPU芯片市场被嵌入式芯片和单片机占据着,而Intel、AMD和PowerPC等个人电脑处理芯片,却只占了那可怜的4%!这才激起了我对我的专业——电子信息工程——的极大兴趣。于是,我开始学习小汇编——不是宏汇编,在单片机的学习课程里,我复习了微机原理和接口技术,直到这个时候我才知道,原来编程可以这样自由!当我第一次用小汇编在一个以8051单片机为主芯片的板子上面,向八段数码管输出了“I O U”,那时候我的心情真的是像春天一样的。假如那个时候我能有个女朋友,她会不会笑话我的挫作不如人家的FLASH好看好玩?呵呵!
    我也曾经动过这样的念头:用JAVA写单片机程序,可不可行?于是开始翻出我以前所有的JAVA教材,熬了两个通宵,才知道:根本不可行,就算用J2ME,也得好几MB的空间来装,单片机哪有这么多的资源来装这个庞然大物啊?而且,以12Mhz的处理速度来跑JAVA,简直就是做梦,要知道,我的PC机都是奔腾四2.8了,跑起来还不是很顺呢!
    但是功夫没有白费,在搜寻汇编语言的替代方案的过程当中,我知道了有一个叫Keil C的IDE,可以用C语言来写单片机程序,并且速度不错。后来托学校新实验室的福,我用上了伟福仿真器,也就开始用起了Wave6000。刚开始接触伟福的时候,心里就想着:这个玩意儿好啊!以后程序调试不用老是烧录烧录了,直接仿真就可以了。但是,在单片机编程的过程当中,你必须时时注意资源的问题,连标准C语言的库都不可以随便调用,更何况是偌大的一个JAVA API!想问一句《C语言已经死了》的作者和译者,此时你用JAVA写个程序给我看看如何?
    大三读完了,自以为可以在单片机编程和硬件开发领域游刃有余的我,来到深圳一家做嵌入式设备的公司实习。第一天总工程师就问我:你会不会单片机?会不会C语言?我一听乐了:我苦学了一年,还行!于是总工把我领到了他直管的部门,让我看起了资料。从此,我便和嵌入式系统开发结下了不解之缘。从8051到ARM7、ARM9的迁移,让我觉得现在资源“富足”了——我曾经做过一台具有64MB的内存和ARM9嵌入式录象机,我在它上面甚至装上了RED HAT 9,还自己为它写了微型键盘驱动、液晶驱动和USB驱动,没有一样是用JAVA实现的。然而,在我待过的几家搞嵌入式软件和嵌入式系统的公司,没有一家是用JAVA的!因为谁都知道,这样的资源,对于JAVA还是太勉强了!
    在深圳的实习我收获颇丰,最大的收获就是我终于知道自己毕业以后该干什么。实习完毕回到学校继续我的本科生涯,此时,我早已经将自己的一生和嵌入式系统开发紧紧联系在一起了。在我的眼里,当一个嵌入式系统工程师是那么的让我兴奋,至今依然如此!于是,大四一年我只完整看了三本书:《深入理解LINUX内核(第二版)》、《LINUX内核分析及编程》和《C++ Programming With QT》,另外的时间,我用它看完LINUX的源代码。假如说C语言已经死了的人,能够完整看完LINUX上千万行的代码,那么,他就不会有这样的废话了:整个LINUX的源代码,没有一行是用JAVA来实现的。
    JAVA的优点已经有太多人说了,正是因为有太多人说了,才会有那么多人痴迷,才会有那么多人对它死心塌地甚至恶毒的咒骂C语言去死。下面我提出JAVA的几点不足,以作为对《C语言已经死了》一文的回应:
    1、必须运行在虚拟机之上,像C#必须运行在.net Framework之上一样,它永远都必须运行在用汇编和C语言所写的基础软件——操作系统之上。没有操作系统和驱动程序的支持,JAVA根本无法安身立命!而C语言和C++的源代码编译之后就是二进制机器码,只要不调用系统函数和API,C/C++程序可以运行在裸机之上。依赖性是它们最大的区别。也许有一天JAVA的开发者完全推翻以前的设计,使得JAVA不再需要虚拟机了,那时候可能会改观吧!可是,不用虚拟机,JAVA还怎么跨平台?JAVA还是JAVA吗?
    2、体积庞大,内存占用更庞大。C语言的标注库只有几百个KB,就算是C++的标准库加上Boost库,撑死了也不过一两MB而已,但是JAVA的API呢?一个J2RE的运行时库安装后要40多MB,能有几台工控设备装得上它的开发环境?运行起来的速度更是无法想象!阁下可以试试看给一台全自动洗衣机写个程序,就用JAVA,什么时候写出来了别忘了告诉我!
    3、实时性差。作为操作系统和基础软件的开发语言,必须要有非常高的响应速度,试问,纯粹用JAVA写的操作系统谁见过?SUN公司的JAVA Desktop不是也难产了么?
    4、面向对象的弊端。毫无疑问,面向对象的编程思想给了程序员一个崭新的领域,也激起了程序开发领域的日新月异。代码的封装、封装、再封装,调用、调用、再调用,事实上,程序员每天的工作就是这么多而已。而至于数据结构和算法,已经很少有人会去理会了。但是,阁下是一个面向对象编程语言的程序员,阁下无需关心底层的操作,不代表底层的工作不需要人做了。然而,最可笑的是我毕业后第一天上班就听到一个有5年面向对象编程经验的人跟我说:“现在的软件开发在于用最短的时间解决问题,没有人会再关心底层的东西了。”可是,底层的东西没人开发,你哪里来的编译器?哪里来的操作系统?程序赖以生存的环境都没了,你说程序员赖以生存的职业还能存在吗?我们不能想象有一天Windows、LINUX、UNIX和VXWORK(火星探测器用的就是这个操作系统)等操作系统停止开发了,我们程序员还能干什么?高级语言和面向对象让使用它的程序员变得越来越低级,越来越不愿意深究系统的底层了。可是,怎么不用脚趾头想想呢?JAVA的编译器是用JAVA写的么?能么?连SUN公司都在用C语言编写Salaris操作系统,怎么居然有不知道天高地厚者说C语言已经死了?无知啊!
    5、3D加速引擎。很难想象用JAVA来做3D加速引擎程序会是个什么样子!或许,当PC机的CPU频率达到100个G的时候,会有人用JAVA写出像《CS》、《最终幻想》、《DOM》这样的游戏来,但是,到那时候还有人会关心它么?
    6、太年轻。年轻意味着有活力,同样也意味着经验不足。JAVA的许多致命弱点,让它显得还不够成熟。一年一两项新技术,证明了JAVA的活力,也证明了JAVA的不稳定性。谁知道我今天学的EJB明天就没用了呢?正如年轻人谈恋爱,谁知道今天的女朋友,明天会不会变成别人的?
    太多太多的理由,让世界上94%以上的计算机系统无法运行用JAVA开发的“系统”了,这当中包括工业控制系统、航空航天控制、科学研究领域、移动通信领域(支持JAVA的手机可以用来上QQ、MSN和玩一些“益智”游戏了,但是谁见过用JAVA写的手机操作系统?)、小家电领域、汽车电子领域、军工领域等等等等的操作系统或是无操作系统的计算机。而在这些领域,C语言和更低级的汇编语言、机器语言正在发挥着它们的巨大作用,阁下难道熟视无睹吗?还是你根本不懂?
    综上所述,JAVA是一门非常优秀的语言,但是它也是一门非常有限的语言。C语言是一门非常强大而且灵活的语言,但是它也是一门非常“不方便”的语言——当然了,这是对于JAVA程序员而言的——不乐意去学它的人,才会觉得它“不方便”。JAVA无法替代C语言,同样,C语言也无法替代JAVA,它们各有自己的应用领域,没有谁会无缘无故死去。就算死去,也不会是因为另一方的存在。

原创粉丝点击