原创 C语言已经死了???

2007-6-28 17:06 3595 9 10 分类: 软件与OS

我绝对不赞同“C语言已经死了”,事实上我每个工作日都要使用C/C++


个人认为C++比C优秀许多许多许多许多许多许多


但是以下文章也不是完全没有道理


仅供各位大虾参考


--------------------------


C语言已经死了,5个需要忘却它的理由2006-12-26 07:00 作者: 作者Ed Burnette、编译李安民 出处: BLOG 责任编辑:方舟   现在,有很多C/C++程序员总是自命不凡,看不起其他开发人员。其实,或许别人更看不起他呢!


  学生时代,我也曾醉心于C/C++,但时至今日,始终无法写出无懈可击的C++代码,所以我始终认为我不会C/C++。这些年,我一直在寻找编写C++代码的最佳模式。但是,老实说,我还没有见到过哪个称得上高手的C++程序员,也没有见到过写得Very good的C/C++代码。C/C++代码总是丑陋不堪,BUG丛生!


  我用C语言编程已经超过20年了。我写过C语言的编译器、C语言的调试器、用C开发的其他语言、游戏、客户端程序和服务器程序,你说吧!还有什么是我没写过的。还有我的书架上充斥着折了角的K&R和Steele的书。我太了解C语言了,但是,我讨厌他。十分讨厌!


  当我读到一篇博客,题目是“为什么每个程序员都应该学习C语言?”时,我真是鸡皮疙瘩满地。如果你真的是个专业的程序员的话,你肯定觉得这是个天大的笑话,尽管作者的本意也许不是这样的。这篇反驳的文章有点意思,但是还是没有抓住本质。所以我展开了说一下。有以下5个原因来说明,为什么那些会C语言,并且使用C语言的程序员,现在不但应该去用别的语言,而且应该忘记他们学习C语言过程中的那些烦人的东西。


  1、内存分配


  仅仅关于这一点我就能写整整一篇文章了,也许能写一本书,甚至还有可能写出能够塞满图书馆技术书籍那块,那么多的内容。内存分配和存储单元分配的存在确确实实是个大麻烦。你要不就是分配太少的内存不够用,要不就是分配了太多内存浪费掉。这里的问题就是:怎么把它初始化为零呢?还是干脆就不初始化它。但最挠头的步骤还是释放内存。所有已有的工具包都会帮助你确认,你是否已经释放了之前分配的每一位的内存,在释放完之后是否永远不使用它,并且会阻止你,永远不要释放它第两次。更严重的是,分配内存和释放内存在C语言中都是很慢的,非常慢。使用内存分配时,要考虑的各种特殊情况,我真是连想都不愿意去想,只要问题(对象)的大小合适,我更愿意使用栈空间或者事先分配的结构空间。如果这么做的话,我就有更值得烦恼的事了。话说回来,发明垃圾处理器那人真应该得诺贝尔奖。


  2、多线程


  我过去是喜欢C语言的,真的。直到我开始用C开发并维护多线程的服务器。在为连接相冲突的线程保护数据方面,C语言没有为程序员提供那怕一点点的帮助。你在使用单线程的日子里获得的每一个直觉、经验,用在多线程的时候都是错误的。至少JAVA有表示同步的关键字和备有证明文件(但是是个很奇怪的文件)的记忆体,但即使是这样,除非你使用新的javax.concurrent,否则也只能在那些巨大的平行摆放的机器们面前崩溃。回到C语言上:在模拟生产的环境下,坚持一个星期在数据中心调试一个死锁(这事真的发生过)。而JAVA却只需要Ctrl+Break!天哪!!!


  3、指针


  指针太难以控制了,太阴险了;我甚至没有委婉一点的方式去形容它。我生命中每年都有几个月被用来调试那些奇怪的指针问题。我过去常常努力获取所有的诀窍,比方说难以理解的构成符、联合体和偏移量,以及重用最后两位做标记,还有所有其他的诀窍。但我发现这么做根本不值得。其他语言的静态引用就可以解决了。


  4、过早的优化


  说到诀窍,你是否曾经浪费脑细胞去研究究竟*p++是不是比p快?你是否曾经花时间去试着做点变化来代替乘法,或者去尝试使循环中的倒置运行更快的方法?还在为传递一个参数的速度和反对添加结构,并且传递它的速度一样而苦恼不已?停吧!算法是速度的关键,程序员的水平决定了他会使用那些算法。知道这一点能让你的程序更好,更快一点并且让你的脑袋少扭几个筋。好吧,有一些例子也许可以这样做的……不,你就别那么做就行了!


  5、测试


  你最喜欢的C的单元测试的工具是哪个?嗯…一个也想不到?单元测试一定是一点也不重要,是吧?或者是太麻烦了,很难跟上进度,浪费时间。你可以把这个时间用到更加有用的事情上,让它只占用工作时间的1%,那还比较合适。或者在数据中心,通过优化的没有标记的图形来调试这个仅仅由100个同时在线使用者引起的问题。


  我本来应该继续再说一些原因的,但是5个现在就足够了;说完这些,现在感觉好点了。C以前是非常棒的…那是在1984年的时候。直到今天,那些用C写的新代码都让我感到惊喜…如果你让我比较的话,我觉得C++只是比C稍微好点。如果你想要学些老一点的语言,不妨尝试Forth,Lis,或者APL。这些老式的语言起码能教会你,用不同的而且优雅的方式去思考你的程序。


  作者简介


  Ed Burnette是一位有着丰富编程经验的程序员。他现在致力于使用JAVA和C来开发OLAP客户端和服务器。他业余时间喜欢研究Java、Eclipse和开源软件。他写了很多关于Eclipse的文章和书籍,另外他还是EclipseZone.com的主编。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1361860 2007-6-28 17:28

这种高论要不当作joke来看看,要不用来展示作者的无知。千万别因为自己用不好C,而否定它,只能说明你的愚蠢。
这个浮躁的时代,尽出些浮躁的人,真正能把C用的登峰造极的太少了,太少了太少了
相关推荐阅读
用户978481 2011-10-25 18:13
卡扎菲是个好同志
卡扎菲的生死,我不知道对利比亚人民来说意味着什么?但就卡扎菲而言,我觉得他值得尊敬。 首先,无论卡扎菲功过如何,但他毕竟把利比亚带入富强,应该说,他是利比亚杰出的领导人,他将载入利比亚的史册。 其次,...
用户978481 2011-09-14 16:53
项目经理问:为什么总是只有我在加班
项目经理问:为什么总是只有我在加班 – 挂包袱现象 分类: 项目管理 技巧经验 2011-09-12 23:42 2745人阅读 评论(32) 收藏 举报 原创文章,如有转载,请注明出处:htt...
用户978481 2011-09-10 23:21
苹果工程师:乔布斯的重要性在于否决大部分创意
苹果工程师:乔布斯的重要性在于否决大部分创意2011年08月27日 16:57  本文来源于财新网   【财新网】(特派加州圣何塞记者 章涛)苹果股价在经过一天下挫之后,在8月27日已经升回乔布斯辞职...
用户978481 2011-09-10 23:19
带着执着的心走天下
带着执着的心走天下   大道至简 2011.9.10     如果我有空,我一定要去远方走走。不跟旅行社,不坐飞机。要骑着一辆满载行李的自行车向远方前行,到达我心中的圣地。因为我知道,圣地美丽的风景...
用户978481 2011-07-06 09:13
五种重要的管理能力
五种重要的管理能力     任何一个人,都可能成为一名出色的管理者。但真正成为有管理的天分,只是大多数人都没有注意到管理的能力这个问题。管理者需要有些比非管理者更出色的能力,而这些能力并不神秘,...
用户978481 2010-11-08 17:22
招聘技术工程师和技术经理的方法
招聘技术工程师和技术经理的方法时间:2010-11-08 10:47:05 来源:电子工程专辑 作者:家庭背景也是一个必选项。一个人的环境阅历不可能不影响其本人,尤其是大家经常以为农村出来的比较朴实吃...
我要评论
1
9
关闭 站长推荐上一条 /3 下一条