C语言已死了,5个需要忘却他的理由

2008-02-23 05:32:49来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

现在,有很多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[i]快?您是否曾花时间去试着做点变化来代替乘法,或去尝试使循环中的倒置运行更快的方法?还在为传递一个参数的速度和反对添加结构,并且传递他的速度相同而苦恼不已?停吧!算法是速度的关键,程式员的水平决定了他会使用那些算法。知道这一点能让您的程式更好,更快一点并且让您的脑袋少扭几个筋。好吧,有一些例子也许能够这样做的……不,您就别那么做就行了!

  5、测试

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

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

  作者简介

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




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 在C语言中实现动态分配二维数组

下一篇: 并非偏见 也驳“驳'C语言已死了'”

热门词条
热门标签