浅薄与偏见 驳“C语言已经死了”.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅薄与偏见 驳“C语言已经死了”

浅薄与偏见 驳“C语言已经死了” 现在,有很多C/C++程序员总是自命不凡,看不起其他开发人员。其实,或许别人更看不起他呢! 有偏见的永远只是个体,而不是群体。作者加了后面那句,无疑证明有偏见的不是C/C++程序员,而正 是他自己。 学生时代,我也曾醉心于C/C++,但时至今日,始终无法写出无懈可击的C++代码,所以我始终认为我不会 C/C++。这些年,我一直在寻找编写C++代码的最佳模式。但是,老实说,我还没有见到过哪个称得上高手的C++ 程序员,也没有见到过写得Very good的C/C++代码。C/C++代码总是丑陋不堪,BUG丛生! 这段话更加荒谬了。没见过优秀的C/C++代码? C++标准库(STL)如此优雅。况且,有那么多经典的C/C++ 开源作品,以及无意之中泄漏的Windows NT核心源码,哪一样不是绝世之作?我为作者浅陋感到难过。 我用C语言编程已经超过20年了。我写过C语言的编译器、C语言的调试器、用C开发的其他语言、游戏、客 户端程序和服务器程序,你说吧!还有什么是我没写过的。还有我的书架上充斥着折了角的KR和Steele的书。 我太了解C语言了,但是,我讨厌他。十分讨厌! 当我读到一篇博客,题目是为什么每个程序员都应该学习C语言?时,我真是鸡皮疙瘩满地。如果你真的 是个专业的程序员的话,你肯定觉得这是个天大的笑话,尽管作者的本意也许不是这样的。这篇反驳的文章有 点意思,但是还是没有抓住本质。所以我展开了说一下。有以下5个原因来说明,为什么那些会C语言,并且使 用C语言的程序员,现在不但应该去用别的语言,而且应该忘记他们学习C语言过程中的那些烦人的东西。 1、内存分配 仅仅关于这一点我就能写整整一篇文章了,也许能写一本书,甚至还有可能写出能够塞满图书馆技术书籍 那块,那么多的内容。内存分配和存储单元分配的存在确确实实是个大麻烦。你要不就是分配太少的内存不够 用,要不就是分配了太多内存浪费掉。这里的问题就是:怎么把它初始化为零呢?还是干脆就不初始化它。但最 挠头的步骤还是释放内存。所有已有的工具包都会帮助你确认,你是否已经释放了之前分配的每一位的内存, 在释放完之后是否永远不使用它,并且会阻止你,永远不要释放它第两次。更严重的是,分配内存和释放内存 在C语言中都是很慢的,非常慢。使用内存分配时,要考虑的各种特殊情况,我真是连想都不愿意去想,只要问 题(对象)的大小合适,我更愿意使用栈空间或者事先分配的结构空间。如果这么做的话,我就有更值得烦恼的 事了。话说回来,发明垃圾处理器那人真应该得诺贝尔奖。 内存管理是程序设计中最经典的话题。GC无疑是内存管理一个伟大的变革,但是我只是把它看作内存管 理的一个解决方案,而认为不是唯一的解决方案。比GC更加优雅的方案不见得没有。我比较倾向于在特定的情 况下选择合适的内存管理方案,而不是没有任何选择的余地,而这正是C/C++的伟大之处。 所有那些GC语言(如 Java、C#等)均把这个解决方案强加给程序员,这一定程度上来说减轻了程序员的负担,但是也同时约束了程序 员的主观能动性。分配内存和释放内存在C语言中都是很慢的?不知道作者从哪里获得的结论。 2、多线程 我过去是喜欢C语言的,真的。直到我开始用C开发并维护多线程的服务器。在为连接相冲突的线程保护数 据方面,C语言没有为程序员提供那怕一点点的帮助。你在使用单线程的日子里获得的每一个直觉、经验,用在 多线程的时候都是错误的。至少JAVA有表示同步的关键字和备有证明文件(但是是个很奇怪的文件)的记忆体, 但即使是这样,除非你使用新的javax.concurrent,否则也只能在那些巨大的平行摆放的机器们面前崩溃。回 到C语言上:在模拟生产的环境下,坚持一个星期在数据中心调试一个死锁(这事真的发生过)。而JAVA却只需要 Ctrl+Break!天哪!!! C/C++语言本身确实没有太多MultiThead的支持,这种情况在C++0x出来后可望改变。但是,请记住 C/C++永远倾向于你使用成熟的库来解决问题。 3、指针 指针太难以控制了,太阴险了;我甚至没有委婉一点的方式去形容它。我生命中每年都有几个月被用来调试 那些奇怪的指针问题。我过去常常努力获取所有的诀窍,比方说难以理解的构成符、联合体和偏移量,以及重 用最后两位做标记,还有所有其他的诀窍。但我发现这么做根本不值得。其他语言的静态引用就可以解决了。 指针是C/C++过于灵活的体现。使用指针的代码可以写得很丑陋,但一样可以很优雅。——这一点上用 何种语言不会有区别。我相信,可以写出优

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档