关闭

也驳"驳'C语言已经死了'"

标签: 语言cc++优化算法java
8791人阅读 评论(53) 收藏 举报
原文连接:http://blog.csdn.net/xushiweizh/archive/2007/01/07/1476422.aspx

>> 有偏见的永远只是个体,而不是群体。作者加了后面那句,无疑证明有偏见的不是C/C++程序员,而正是他自己。
错了,真理是站在少数人这边的,当一种变革将发生的时候,带有偏见往往是大众是传统力量。

>> 这段话更加荒谬了。没见过优秀的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++连标准的多线程库都没有,更不要说高层次基础设施了,编写并发程序基本上还得靠程序员手工实现基础设施,并且跟同步、并发、死锁疑难问题纠缠不清,程序的开发难度很大,可靠性很差。至于OpenMP,设计思路上就有问题,可以给程序员提供的帮助很少。


>> 指针是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代码的优势已经越来越不明显了。对于未来而言代码级的优化也已经不再是重点,哪个语言可以适应多核的发展,谁就将成为性能的王者。如果大家对并行算法的威力还没有一个清晰明确的概念,那么就看看google的搜索算法、现代GPU的计算能力,这不是代码级优化所能得到的1倍2倍的性能提升,而是以数量级方式的性能提升。


>> 新生的语言,必然会在吸收旧的语言上基础上进行改进。看一个语言的生命力,并不在于看它某些地方存在的不足。事物会发展,并趋于完善。相信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++来构建的,将来很长一段时间内也会是这样,但是你省省吧,你只是一只做做应用开发的菜鸟程序员,写操作系统这辈子都轮不到你,没有几十年的开发经验没有对计算机体系结构的深入理解,你根本没这个资格。这些底层开发并不属于主流的应用开发领域,跟这世界上99%的程序员没有关系。

二、目前C/C++的主要优势还是在性能上,但是到了多核时代这点仅存的阵地也将失去,因此在应用开发领域已经没有站得住脚的理由再选用C/C++。多核时代将要带给软件工业的变革可以看这篇我新写的http://blog.csdn.net/Analyst/archive/2007/01/09/1477870.aspx

三、java/.net以及各种脚本语言可以在很多领域取代C/C++,但是谁将成为多核时代的性能王者目前还很难说,Erlang是一个探索,我非常期待有一门全新的语言诞生。


 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17317次
    • 积分:361
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:60条
    文章分类
    最新评论