微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 电子工程师杂谈 > <转>C语言已经死了,5个需要忘却它的理由

<转>C语言已经死了,5个需要忘却它的理由

时间:10-02 整理:3721RD 点击:
C语言已经死了,5个需要忘却它的理由<2006年的文章-这让我怎么说?!>

作者在读过“为什么每个程序员都应该学习C语言?”和“每个程序员都应该学习C语言?我可不这么认为。”这两篇文章后,感觉James对第一篇文章的驳论还是不够深入,没有切中要害,所以在本文中,作者拿出了5个充分的理由进行说明。


我用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的主编


?

我还是学C的好

学C啊

学过,没有学会

很好的资源!

我觉得作者的观点很片面,虽然作者写过的程序比我见过的都多,但视乎那只局限在通用计算机应用程序上。软件或程序分为3大类:设备驱动,操作系统,应用程序。在应用软件设计方面,除了很小规模的嵌入式应用程序可以考录用C语言外,我同样觉得用C语言就是慢性自杀行为。可是设备驱动,操作系统这些与底层硬件紧密相关的还是离不开C语言甚至必须要用到汇编语言。C的一些特性如:内存分配,指针等虽然会带来安全和编程效率的问题,但也正是这些特性让它有了汇编语言式的能对硬件直接操作的能力。所以,汇编也好,C也好,JAVA也好,各有其适合应用的地方,不能相互取代。

c是王道!学过不解释

C是基础 或许等我们也达到小编的境界了 会有不一样的想法吧

?

学C的好

哦。

这个太绝对了,你用别的语言写个硬件驱动试试。

不敢苟同~

看来小编是个大叔啊 ,也是个大神

学过以后,全部忘记,才是最高镜界

                       

小编的境界我还没到达,不敢评价

啊,是这样的吗?我在努力学C额

C语言还在学习中。

我相信C语言是基础  一直坚持

这些都不是不学它的理由啊

说的真棒!

那应该去学习什么呢?

很想下载下来看下!等看好了 再来评价

C者王道,基础所在

bu dong a看不懂  bu dong a看不懂bu dong a看不懂

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top