并非偏见 也驳“驳'C语言已死了'”
2008-02-23 05:32:49来源:互联网 阅读 ()
错了,真理是站在少数人这边的,当一种变革将发生的时候,带有偏见往往是大众是传统力量。
>> 这段话更加荒谬了。没见过优秀的C/C 代码? C 标准库(STL)如此优雅。况且,有那么多经典的C/C 开源作品,连同无意之中泄漏的Windows NT核心源码,哪相同不是绝世之作?我为作者浅陋感到难过。
STL的代码并不优雅,缺乏functional programming机制支持的C 对于实现algorithm很的牵强,比方我要find(v.begin(), v.end(), compare);的时候(v是个自定义的结构),我必须在函数外面写一个比较函数,假如要带一些上下文的话还得写一个functor类,很的丑陋不堪,实用性大打折扣。而FP系的语言来说,能够很自然的写一个匿名函数。STL里所标榜的容器,算法等概念,在FP里早就原生支持了,而且要优雅的多。至于NT代码这个我没看过不好说,但是据说代码里有不少当初程式员留下来的抱怨BUG及设计失误的话。
>> 内存管理是程式设计中最经典的话题。GC无疑是内存管理一个伟大的变革,但是我只是把他看作内存管理的一个解决方案,而认为不是唯一的解决方案。比GC更加优雅的方案不见得没有。我比较倾向于在特定的情况下选择合适的内存管理方案,而不是没有任何选择的余地,而这正是C/C 的伟大之处。 任何那些GC语言(如Java、C#等)均把这个解决方案强加给程式员,这一定程度上来说减轻了程式员的负担,但是也同时约束了程式员的主观能动性。"分配内存和释放内存在C语言中都是很慢的"?不知道作者从哪里获得的结论。
实话说我也不喜欢GC,没有GC的C也能够工作的很好,但是对于FP系的语言来说没有GC是无法正确工作的,所以我还是得接受GC这个东西。当然我更喜欢的是将两者互相结合的方式。
>> C/C 语言本身确实没有太多MultiThead的支持,这种情况在C 0x出来后可望改变。但是,请记住C/C 永远倾向于您使用成熟的库来解决问题。
C/C 不能适应未来多核时代的发展,这个会是他没落的最大原因。库不能真正的解决问题,我们需要的是在语言层面的进一步发展。
>> 指针是C/C 过于灵活的体现。使用指针的代码能够写得很丑陋,但相同能够很优雅。——这一点上用何种语言不会有区别。我相信,能够写出优雅的Java代码,那么也一定能够写出同样优雅的C/C 代码。而反之则未必(因为有些C 某些范式是Java所不能支持的)。C/C 语言中的选择太多,这的确是令人困惑的,但不见得是劣势。我对C/C 程式员的建议是,多了解和使用C 标准库,而不是过于纠缠指针相关的细节。
>> 算法优化是程式设计的关键。但是通常情况下,任何语言(包括C/C )的程式员研究的是关键路径的优化。研究*p 是不是比p[i]快?我相信这是标准库的实现者要考虑的事情。所不同的是,C/C 程式员也能够和标准库的作者相同去考虑这些细节,而其他语言的程式员被剥夺了这个权利。
说到优化,话题就多了。我曾向C#的Dictionary中插入了1亿条整数(从1万多个文本文档中读入),结果发现程式运行了整整一个下午仍然没有完成。而我改用C 的std::map,20分钟就搞定了。再试试对50万条自定义的结构体数据进行排序,我相信您和我相同,会深深喜欢上C 的的高效而优雅。
多年以前程式员们还在C程式里面内联汇编以实现代码级的优化,但是如今已没有人这么做了,因为CPU越来越复杂了,大多数情况编译器做的比手工的要好。现如今的java/.net的JIT引擎也已能够达到很高的优化水平,在性能上C代码的优势已越来越不明显了。对于未来而言代码级的优化也已不再是重点,哪个语言能够适应多核的发展,谁就将成为性能的王者。
>> 新生的语言,必然会在吸收旧的语言上基础上进行改进。看一个语言的生命力,并不在于看他某些地方存在的不足。事物会发展,并趋于完善。相信C 0x出来后,C/C 语言又将获得新的生命力。单看Java、C#等几个新一代的语言,其中有如此多的C 烙印,就证实了C/C 的影响是巨大的。动不动说一门语言死了,是一种浅薄。
说一门语言死了,不是说完全消失,而是退出主流研发语言行列,逐渐的被边缘化,这些年鼓吹C/C 的人已越来越少了,在很多研发领域C/C 的地位已被JAVA、.net、脚本语言等所取代。C 0x出不出来已不重要了,倒是C /CLI的出现带给C 一些新意,但是虽然我很欣赏C /CLI,但是他不会成为主流。在多核到来的时候现在编程语言还没做好准备,未来我们要面临的不是2核4核而是百核千核这样的规模,这不光要在算法领域继续发展,编程语言也要来一次重大的变革才能适应这种发展,至于方向在哪里,FP系的语言或许会给您带来一些启示。
原声重现:浅薄和偏见 驳“C语言已死了”, C语言已死了,5个需要忘却他的理由
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: C语言已死了,5个需要忘却他的理由
下一篇: 使用C 异常来取代exit()函数
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash