工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3369|回复: 28

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

[复制链接]
发表于 2007-1-10 16:17 | 显示全部楼层 |阅读模式
现在,有很多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。这些老式的语言起码能教会你,用不同的而且优雅的方式去思考你的程序




转载自CSDN合作媒体,其中细节未经CSDN证实,特此声明[em09]

[ 本帖最后由 iptton 于 2007-1-10 16:19 编辑 ]
发表于 2007-1-10 16:20 | 显示全部楼层
C语言死了  WEB2.0是泡沫  C++过时了  MFC被微软抛弃了……

消息很多,观点也很多
回复

使用道具 举报

发表于 2007-1-10 16:22 | 显示全部楼层
楼主转的帖子,我也在CSDN上看过

各种语言都有自己的擅场吧?


语言之争是最无聊的事
回复

使用道具 举报

发表于 2007-1-10 16:24 | 显示全部楼层
前几天一个叫许式伟的人,在CSDN BLOG发了一篇《驳“C语言已经死了”》,其目标是针对Ed Burnette的这篇《C语言已经死了,5个需要忘却它的理由》,之后引发了一堆的“驳”过来,“驳”过去,再“驳”过来……
其实这种问题根本不值一驳。
正如令狐在发给我的MAIL中所说的那样:
其实任何语言都没有什么好跟不好,只有适用不适用 ── 高级语言的确方便,但总需要有人写汇编去实现它的编译器或解释器吧……。
而C语言,认真的用过任何其他"更高阶语言"的人都不会说它"已死"──目前几乎所有的高阶语言,在提供低阶接口的时候,都是采用C/C++作为接口。而一个真正的系统,100%架构在高阶语言之上而没有使用一行低阶代码,可以说是不可能的。
一个人可以只关心高阶语言而不去研究底层,但他绝对不应该排斥底层开发人员。否则,当有一天,真的如他所愿,所有的底层开发人员都消失不见的时候,他才会知道自己有多么痛苦。
至于那些看不得别人不同意见,动辙管别人叫“小白”的,其实自己不过是个“大白”。
用VM语言很了不起么?论性能,还是比不过C;论功能,又比不过动态语言。有什么可得瑟的呢?更何况他们用的VM不还是C写的嘛。

我讲一个故事来结尾吧:
从前有一座山,有几个人在山顶上堆了个小土堆,有一只土鳖爬到这土堆上,登高望远,高瞻远瞩,不禁感慨大发,曰:我站得比山还高,那个号称“山”的东东可以死了。然后一帮小土鳖跟着说:是啊是啊……



原网址:
http://blog.csdn.net/Raptor/archive/2007/01/10/1478831.aspx

PS:楼主以后转帖建议转原网址上来
回复

使用道具 举报

发表于 2007-1-10 16:50 | 显示全部楼层
在CSDN确实看到不少类似这样的题目,我当时点击都不点击一下。

在这里进来看看,觉得《C语言已经死了,5个需要忘却的理由》的作者是个吹水的高手,有本事写个操作系统出来,还说什么都写过呢?

PS:Linux是C写的,开放源码。
回复

使用道具 举报

发表于 2007-1-10 17:17 | 显示全部楼层
建议bz封了这个帖,会误导我们新生的
回复

使用道具 举报

发表于 2007-1-10 17:39 | 显示全部楼层
网上还有很多可能会误导新人的东西……
学会自己思考吧……
回复

使用道具 举报

发表于 2007-1-10 20:52 | 显示全部楼层
用C语言来登堂入室学编程最好了!!没有类的继承那些的困扰,
在开始学习的阶段能让人把注意力放到基础上。。
我们数据结构还是用C语言版的呢。。
回复

使用道具 举报

发表于 2007-1-10 20:53 | 显示全部楼层
TMD,中国没有讨论怎么做软件,怎么做系统的气氛。。
倒是被这些天花乱坠的无能之徒混淆视听!!
回复

使用道具 举报

发表于 2007-1-11 00:39 | 显示全部楼层
同意楼上的看法,呵呵,成天看到一些讨论什么东西过时啊,什么东西垃圾啊之类的东西.
其实以前我就有点儿困惑了,既然那些人对编译器了解得这么透彻,为什么不自己写个完美的出来呢?
成天看这些文章,然后还是得用那些"垃圾的","过时的"或者是"死了的"编译器,多不爽?
回复

使用道具 举报

发表于 2007-1-11 02:34 | 显示全部楼层
那是因为他们做不出来呀
拿一种语言和另外一种语言比本来就是超级无聊的事情
而且每样语言都有自己擅长的地方,这样比,根本就是在瞎扯淡
一看就知道这篇文章的作者不是个C/C++写很多的东西,BS之...
回复

使用道具 举报

 楼主| 发表于 2007-1-11 10:38 | 显示全部楼层

这片帖只是一种观点罢了
接受是一回事 同意是另一回事~
学术就是这样
要容许各类意识的存在性
不要试图拿自己的超我来讽刺他人的本我
回复

使用道具 举报

发表于 2007-1-11 10:40 | 显示全部楼层
LSLS COPY iptton 的说法……

[ 本帖最后由 小I 于 2007-1-11 10:41 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2007-1-11 10:43 | 显示全部楼层


哪有copy?
回复

使用道具 举报

发表于 2007-1-11 10:47 | 显示全部楼层
你插楼了……
回复

使用道具 举报

 楼主| 发表于 2007-1-11 10:57 | 显示全部楼层
你发慢了.....:time::time:
回复

使用道具 举报

发表于 2007-1-11 11:16 | 显示全部楼层
不可否认,生命是有周期的。
但C语言还身体健康呢
回复

使用道具 举报

发表于 2007-1-12 02:54 | 显示全部楼层
LSLSLS不知道iptton 是jinry的MJ?
回复

使用道具 举报

 楼主| 发表于 2007-1-12 13:20 | 显示全部楼层
原帖由 iptton 于 2007-1-10 17:39 发表
网上还有很多可能会误导新人的东西……
学会自己思考吧……

[em09]  完全同意
回复

使用道具 举报

发表于 2007-1-12 13:24 | 显示全部楼层
原帖由 jinry 于 2007-1-12 02:54 发表
LSLSLS不知道iptton 是jinry的MJ?


好,很好,非常好……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-8-30 21:16

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表