EGL游戏开发专栏

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

新一篇: 谈谈多核时代将带给软件业的变革

原文连接: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是一个探索,我非常期待有一门全新的语言诞生。


 

发表于 @ 2007年01月08日 12:52:00|评论(loading...)|编辑

旧一篇: 恩,还没什么东西。

评论

#zjh222 发表于2007-01-08 19:07:50  IP: 220.112.140.*
都在说语言层面的,在功能方面,如硬件驱动,嵌入式.....不知那个好了
#runpin 发表于2007-01-08 20:09:35  IP:
这个问题值得这么这么多人来争论吗?麦克阿瑟说:
“Old soldiers never die, they just fade away!”
#nicewong 发表于2007-01-08 20:21:58  IP: 202.105.202.*
是的太片面了!
所说的这些都是建立在CPU功能强大的基础上的!
试问: 当CPU计算能力没有PC的CPU强大的时候,如工控、自动化、智能家电、数码产品等等的时候,你用什么语言开发?
做板级的信号信息处理你用什么?
你所用的种种高级语言又是建立在何种语言做的平台基础之上?

做个不恰当的比喻,想当白领的用所谓的低级语言 当IT民工的用高级语言。
#missdeer 发表于2007-01-08 20:27:02  IP: 58.60.132.*
如果说STL没有FP支持,看看Boost
如果说C++不能适应多核,看看Intel C++编译器
如果说现在没人做汇编嵌入编程,还自称游戏开发专栏呢-_-b
始终没明白C++/CLI是干吗用的,但是C++0x就是为了解决那些最紧迫的问题,是通过改善语言元素还是从库支持这类决策的
#Mephisto_76 发表于2007-01-08 20:30:19  IP:
C/C++不能适应未来多核时代的发展?难道你就是传说中的上帝?不懂没关系,但是不要乱说。
#zhouhongyun 发表于2007-01-08 21:00:20  IP: 219.140.59.*
反驳得太没水平,“C/C++不能适应未来多核时代的发展,这个会是它没落的最大原因”这样的话都说得出来,难不成多核时代的OS和驱动程序都是用c#和java写的??
#lyanry 发表于2007-01-08 21:33:47  IP: 202.110.209.*
第一个反驳就不大成立。

真理站在少数人这一边固然没错。但是最近在CSDN BLOG上看来看去,总是觉得用C/C++的兄弟越来越少。哈哈,这就是说真理转了一圈,又回到C/C++上了。
#little_white_vckbase 发表于2007-01-08 21:47:54  IP:
如果每天直接和芯片、引脚啥的打交道,估计那个反驳的人是不会说出这种话的。如果多接触UNIX,了解UNIX,那个作者也不会说出这种话
#little_white_vckbase 发表于2007-01-08 21:48:15  IP:
如果每天直接和芯片、引脚啥的打交道,估计那个反驳的人是不会说出这种话的。如果多接触UNIX,了解UNIX,那个作者也不会说出这种话
#winthegame 发表于2007-01-08 22:55:27  IP: 218.88.10.*
多核C++ 就不能适应了?? 谁告诉你的?C++的基础理论是建立在单核的基础上的??你的理论都成立的话,那你完全可以说Unix. Linux. pascal, basic, 这些当年建立时没有多核支持下的操作系统, 编程语言也会纷纷消亡呢.....

也是个没水平,喜欢哗众的主儿......
#lbing7 发表于2007-01-09 08:46:03  IP:
现在90%的所谓程序员没真正清楚计算机的体系结构,没真正的做到做到计算机层面的东西,他们所谓的编程只是用计算机的思路去描述一下业务逻辑...
他们不知道在他们的工具层面,C所处的绝对优势地位,有时候连C++风格的东西都进不了的层面...
那些所谓的不变式掌握在C手里,真想不通,如果没有C了,他们用什么去干活?
呵呵
#tczyp 发表于2007-01-09 09:09:11  IP: 58.62.77.*
为什么一再有人证明C#的效率跟C++相差无几(1%~2%的效率损失),而又同时一再有人声称两者效率相差很多。。。老实说,如果效率上只是1%~2%的差别,那么大部分应用就倾向于用java,C#这类半动态语言或者其它全动态语言了。虽然C/C++不会死,但也只能退居二线。所以我非常希望有人能够澄清这个效率问题。
#zhmnsw 发表于2007-01-09 09:41:15  IP: 218.12.29.*
以井底之天度浩瀚苍穹
无聊透顶
呜嚷呜嚷说了半天,就没人搞出个操作系统来
#vcnewer 发表于2007-01-09 10:35:25  IP: 221.218.135.*
嘿,跟风炒作无处不在
#Analyst 发表于2007-01-09 11:11:01  IP:
CSDN上的小白还真多,许多人对并发的理解还停留在线程、锁的出击概念里,根本不知道这其中蕴涵的巨变。就让我再写篇文章给大家补补课吧
#bossin 发表于2007-01-09 12:11:44  IP: 202.114.6.*
第一句话都错了。真理在哪一边和人数多少没关系。
#layerr 发表于2007-01-09 12:23:50  IP: 222.183.196.*
我不太想过多的从技术本身分析C语言存在的必要了,请看我的观点:
http://blog.csdn.net/layerr/archive/2007/01/09/1477754.aspx
#carlkkx 发表于2007-01-09 13:22:49  IP: 220.248.40.*
现在90%的所谓程序员没真正清楚计算机的体系结构,没真正的做到做到计算机层面的东西,他们所谓的编程只是用计算机的思路去描述一下业务逻辑...
他们不知道在他们的工具层面,C所处的绝对优势地位,有时候连C++风格的东西都进不了的层面...
那些所谓的不变式掌握在C手里,真想不通,如果没有C了,他们用什么去干活?
呵呵
——————————————————————————————————

我笑你超级幼稚!(可能你以为自己掌握了很深的知识)

事实上就是有很多这样的C/C++程序员持这样的态度,才使得别人发出这样的言论!

你是不是觉得整天电压,电流很牛!
#hoya5121 发表于2007-01-09 13:28:18  IP: 222.88.77.*
http://blog.csdn.net/hoya5121/archive/2007/01/09/1477960.aspx
我--曾经的C语言痴迷者,就算C死了,也永远活在我心里
C语言已死? 这个论题成为CSDN博客们的热点.C语言到底有没有死?其实我也说不清楚,因为我现在从事的工作是用C++开发图形程序,但是我仍然有必要写这样一篇文章,如果你觉得C没有死,并且正准备学习她,那么希望我的经历对你有启示作用,如果你是曾经的C痴迷者并且现在不再用C,那么就和我一起怀念逝去的痴迷吧.

02年我进入大学计算机系,作为一个只会用QQ聊天的电脑白痴,我内心对计算机充满了崇拜和向往,我心里想,我要通过我的学习成为一个黑客,因为在我心里黑客就是计算机高手,能够用代码来实现自由的梦想.那时通过一些文章了解到真正的高手都是用底层的语言,比如汇编,比如C,甚至是机器码(现在看起来这些观点其实很可笑),所以我的目标就是先学好这些语言.大一我们开了C语言课,我认真的学习C的每一个特性,指针,指针的指针,结构,联合,动态分配内存,每个现在看来很简单的东西都让我觉得很神秘,就这样整个大一就在C的特性上度过了,当同学们都在接受更加神奇的VF,VB时,我仍然在dos下看着枯燥的TEXT方式(我学的时TC),有些同学不解的问我,"C语言可以象Windows程序那样有漂亮的界面,和图象吗?",面对这些问题和质疑,我也开始动摇,为什么我学了几乎所有见到的C的特性还是不能构造界面,还是不能绘制图形,网络更遥不可及..这些疑问一直伴随我到了大二.

大二,我知道了编程这东西不是靠各种技巧,而是要靠编程思想,和算法,因为我们开始学了数据结构,令我开心的是数据结构老师让我用TC去构造各种结构,而不是VF,VB,这些,同学们开始一筹莫展,而我却得意于积累下来的C的良好基础迅速的实现并接受了数组,链表,树,栈...等等这些结构,我发现我不再苦恼于我的程序结构的不堪,不再沉迷于C的精巧,而是真正开始感受编程的乐趣,不得不说的是这中间我的C语言基础给我带来的成就感是我学习数据结构的一个很重要的动力...当我可以熟练的应用大部分数据结构(课本上)的时候,寝室的一个哥们问我"为什么老师总让我们在dos下用TC做程序呢?只能实现字符模式太没意思了"...当时我并没有想到老师的真正目的(应该是撇开其他应用专著于数据结构和算法的目的),而是坚信C语言的强大,我相信dos一样可以给我缤纷的世界,就在这时开了汇编,也正好让我更加坚信dos实际上可以更加多彩(我们学的8086,16位),学过汇编的朋友可能还记得有一张dos系统和bios系统调用的表,里面可以对显示器,对串口,对键盘鼠标,这些硬件进行操作,对显示器的操作更是让我眼前一亮,因为我看到在显示器上显示彩色点的功能,从第一个点被打印出来我便深深的陷入其中...

我拿着自己写的打印彩色点的C语言函数(TC里提供汇编接口),向别的同学的请教怎样才能打印一条线出来,结果那个经典的直线算法就在我们的讨论中诞生了(算法名字忘记了,下面附带的程序里有),当我兴高采烈的那着我彩色的直线去找老师请教(其实是想让她表扬我)的时候老师竟然问我图形学课本还没发你提前买了吗?她认为我是看了课本.打击啊...呵呵,但是让我高兴的是我知道了还有图形学这门课,接下来就是飞快的跑到图书馆借到书,是清华大学孙家广的那本,就这样我的编程学习真正的进入的正规,图形学
#jemyzhang 发表于2007-01-09 14:19:25  IP: 218.88.103.*
c对于很多人是最美丽的,对很多人是万恶的。
死没死,只有自己去衡量了。
对我来说,她依然美丽。
#ItRenSheng 发表于2007-01-09 16:25:12  IP: 222.76.228.*
天生此言必有用,在这里费话.
想着那种能给你饭吃吧.
#jAmEs_ 发表于2007-01-09 16:32:02  IP: 59.37.32.*
和楼主讨论这个真是件愚蠢的事,但是再让我蠢一次吧~~~
#blh 发表于2007-01-09 18:49:47  IP: 61.241.79.*
搞不懂都在讨论什么?题目是C已死,怎么又扯到C++?

C存在原文说的那么多问题,是因为使用者的错误的使用和不正确的场合

相比于JAVA,在很多地方C可能是“丑陋的”,但是C能让你自由驰骋,在大多数情况下C让你掌握程序控制权力,JAVA是很优秀,但在很多情况下JAVA控制着,你只是跟着JAVA走 使你只能知其然而不知其所以然(就如开手排和自排的车一样,那种更有乐趣)

语言的优秀只有优秀的使用者才能表现出来,一个拙略的使用者用优美的JAVA写出的代码可能更加“丑陋”

#blh 发表于2007-01-09 18:49:58  IP:
搞不懂都在讨论什么?题目是C已死,怎么又扯到C++?

C存在原文说的那么多问题,是因为使用者的错误的使用和不正确的场合

相比于JAVA,在很多地方C可能是“丑陋的”,但是C能让你自由驰骋,在大多数情况下C让你掌握程序控制权力,JAVA是很优秀,但在很多情况下JAVA控制着,你只是跟着JAVA走 使你只能知其然而不知其所以然(就如开手排和自排的车一样,那种更有乐趣)

语言的优秀只有优秀的使用者才能表现出来,一个拙略的使用者用优美的JAVA写出的代码可能更加“丑陋”

#zzmsl 发表于2007-01-09 18:58:15  IP:
C语言早应该死了。时代在进步!
#jajavava5 发表于2007-01-09 19:13:23  IP: 59.191.40.*
不要吵了!!!!!!!!!!!!!!!!!!!!!!!!!
不要吵了!!!!!!!!!!!!!!!!!!!!!!!!!
不要吵了!!!!!!!!!!!!!!!!!!!!!!!!!
孩儿们!!!!!!!!!!!!!!!!!!!!!!!!!!!
现在流行的编程方式是Java+C/C++(这才是真正的编程),只会java的是小青年,和只会C/C++的是土老帽!!!!!!!!!
#axx1611 发表于2007-01-09 19:14:22  IP: 219.131.196.*
我同意说C/C++对于多线程的支持性不好是一个严重问题,但这并不组应成为令其消亡的原因,从C/C++的语言基础可以很容易的扩充一个良好的体系去兼容多线程(代价可能是要使目前的C/C++标准库过时),但是真的有那么一天,C/C++也会不得不那么做的(目前的C++09标准也在向这个方向努力)。所以C/C++并不会死掉,而是跟进需求的变化,自我完善。
#luxu001207 发表于2007-01-09 19:55:16  IP:
呵呵,动不动就说一门语言要死了是不是有点什么了?我觉得计算机的语言就跟军队手中的兵器一样。兵器有飞机,大炮,坦克,机枪,手枪等等,它们各有各的优点,各有各的用处。同样的,计算机语言也是这样的。
#Eric_Davis 发表于2007-01-09 22:06:39  IP: 219.134.142.*
反驳的毫无价值
C从诞生的那天就是为底层开发而准备的,那个领域本来就是一个荒芜的地方。C在底层开发的作用什么时候降低过?C++的出现好像也没把C给搞死吧?
所谓C\C++不再重要,只不过是现在软件开发的业务越来越多,越来越广泛,已经不仅仅是当年少数科学家手上的尖端武器。可是C\C++构建底层支持的作用也随之在发展。是的,Java出现了,C#出现了,可是运行时支持是用什么写的?虚拟机是用什么写的?
C\C++对多线程支持不好,是事实,不过是一个很可笑的逻辑。既然C\C++的地位和作用就是在底层构建,不论内核级线程还是应用级线程都还是用C\C++来实现,对它们做这种要求,什么道理?
把C当成一种高级汇编看好了,除非是硬件实现了Java虚拟机,不需要再构建一层软件支持,否则,传统汇编存在,C就会存在、
#lbing7 发表于2007-01-10 09:14:48  IP:
晕哈,偶又被取笑幼稚了...

我也刚刚毕业没多久,不过,我始终坚信:不知道所以然的程序员不会有好下场!!
#diandian82 发表于2007-01-10 09:30:49  IP: 207.46.50.*
我始终认为C/C++是要学的,但没必要用。
#lllyyy2403 发表于2007-01-10 10:58:22  IP: 218.77.186.*
自从几年前我用C/C++解码了黑匣子后,我就与它结下了不解之缘。
我现在正在调试一个500万行的C++代码。
说C++与应用程序无关也只能说明LZ的无知。BCB、VC、GCC等在界面、数据库应用中方面非常方便。即便是新出来的VS。NET,也同样有VC++。NET。
LZ别忘了,C/C++之所以能几十年来能领风骚,关键是因为有C++标准委员会一直在不断的扩充、完善、改进C++。

LZ的话使我想起了某位行中人说的:
当C出来时有人说C过时了;
当C++出来的时候,很多人说C过时了;
当C#等出来时,很多人说C++过时了;
多少年过去了,什么语言都没有过时,倒是抱这种观点的人被行业抛弃了。
#oatn 发表于2007-01-10 11:22:20  IP: 218.10.80.*
可能对于我们来说,使用软件的人是用户。对于语言来说,我们都是用户。c到底死没死,我还不好说。不过c确实不惹人喜欢是真的。未来c能不能死,我想c也应该死了。死在java/.net的肚子里。
#OICQQQ 发表于2007-01-10 14:39:45  IP: 219.144.168.*
我没见过哪门语言死过,

LOGO语言现在还有人用,

不同的语言用在不同的方面嘛.

汉语可能也会死掉.

大家都说鸟语吧.哈哈.

基实语言有什么用呢,算法才是关键.

多核是什么,多核是INTEL进入软件业的一个跳板.

用最烂的CPU,最低级的语言,写出最好用的东东,才是我们要最追的.

类库,算法库,学习的时候不要用,挣钱的时候再用吧.

C语言要死?......除非,SB都会编程.
#zhouhongyun 发表于2007-01-10 20:27:59  IP: 219.140.59.*
不过c确实不惹人喜欢是真的。未来c能不能死,我想c也应该死了。死在java/.net的肚子里
----不惹你喜欢是真的,用C的人都会喜欢C,是那么灵活,和汇编配合起来真是够威力,可以把windows内核搅得稀巴烂,还有,对你说的c会死在java.net的肚子里,真是觉得你够无知啊,c死了,java和.net在哪运行啊,首先,windows是C写的,windows上的clr是C写的,你有种用c#写个windows和clr给我看看,你问问微软,有没有这个种,你最好祈祷c别死,不然跟这死的就是其他语言.
#zhouhongyun 发表于2007-01-10 20:28:28  IP: 219.140.59.*
不过c确实不惹人喜欢是真的。未来c能不能死,我想c也应该死了。死在java/.net的肚子里
----不惹你喜欢是真的,用C的人都会喜欢C,是那么灵活,和汇编配合起来真是够威力,可以把windows内核搅得稀巴烂,还有,对你说的c会死在java.net的肚子里,真是觉得你够无知啊,c死了,java和.net在哪运行啊,首先,windows是C写的,windows上的clr是C写的,你有种用c#写个windows和clr给我看看,你问问微软,有没有这个种,你最好祈祷c别死,不然跟这死的就是其他语言.
#zhouhongyun 发表于2007-01-10 20:28:57  IP: 219.140.59.*
不过c确实不惹人喜欢是真的。未来c能不能死,我想c也应该死了。死在java/.net的肚子里
----不惹你喜欢是真的,用C的人都会喜欢C,是那么灵活,和汇编配合起来真是够威力,可以把windows内核搅得稀巴烂,还有,对你说的c会死在java.net的肚子里,真是觉得你够无知啊,c死了,java和.net在哪运行啊,首先,windows是C写的,windows上的clr是C写的,你有种用c#写个windows和clr给我看看,你问问微软,有没有这个种,你最好祈祷c别死,不然跟这死的就是其他语言.
#codez 发表于2007-01-10 22:00:20  IP: 61.181.239.*
开篇第一句:
>> 有偏见的永远只是个体,而不是群体。作者加了后面那句,无疑证明有偏见的不是C/C++程序员,而正是他自己。
错了,真理是站在少数人这边的,当一种变革将发生的时候,带有偏见往往是大众是传统力量。

真理没有方向,即可能在少数人手里,也可能在多数人手里。不过,按照几率来说出现在多数人的手中的可能性更大。

全文语言幼稚,偏激。C 语言是很优秀的语言,至少在可预测的范围内不会死亡。不要把 C 和 C++ 混为一谈。现在的 C++ 已经不是 C 的 super set 了。

C 也不仅仅是用在操作系统和虚拟机上,很多地方 C 仍然是主流,抛开 sourceforge 工程的统计不说,linux 下的开发即使如此,除此之外嵌入式开发和工控软件开发,C 绝对是主流。

不要以管窥豹,软件不是就有哪些 ERP 和 Mid-ware,java/dotNET 只能让我们距离真正的东西越来越远。

中国的软件人才过不了 30 岁,就是因为仅仅学习那些极短时间就可以掌握的东西,并且不断的追逐新的东西。国外很多程序员紧紧掌握有限的几门语言就可以轻松的工作到退休,就是如此。

最早的那篇文章就是一个无聊者的无聊瞎掰,大家在上面没必要浪费精力。
#r_mosaic 发表于2007-01-11 12:36:49  IP: 211.167.159.*
引用:C/C++不能适应未来多核时代的发展,这个会是它没落的最大原因。库不能真正的解决问题,我们需要的是在语言层面的进一步发展。在现阶段C/C++连标准的多线程库都没有,更不要说高层次基础设施了,编写并发程序基本上还得靠程序员手工实现基础设施,并且跟同步、并发、死锁等疑难问题纠缠不清,程序的开发难度很大,可靠性很差。至于OpenMP,设计思路上就有问题,可以给程序员提供的帮助很少。

回复:我觉得吧,多核时代现有的语言都不是自动适应的,包括 C#、Java、Python 等。但是 Multi-Process 和 Multi-Threading/Parallel 的比较是有意义的:如果要解决的问题适合用 Multi-Process 的方法,那么就用 Multi-Process 的方法,没必要去用更复杂的 Multi-Threading/Parallel。
#r_mosaic 发表于2007-01-11 12:43:55  IP: 211.167.159.*
引用:目前C/C++的主要优势还是在性能上

回复:除了性能还有好玩——没想到吧……甚至为了好玩我连 C++ 都不想用,就用 C。如果写数据库相关的应用程序我肯定用 C#。但是写解释器、字符串处理的时候我还是喜欢 C。命令行上的一些小巧的工具,用 C 写能同时贴合性能和优雅的目标,当然用 python 写更简洁,不过一旦简洁了抽象了,性能就没有保证了。其实我也明白某些程序也许永远不需要高的性能,但用 C 写就是好玩。

我的经验是,同样一个程序,如果 C 和 C# 库的能力相当的话,C 的程序行数大约是 C# 程序的两倍多。不过写起来有趣,特别是 global namespace 这个好东东可以充分锻炼程序员的命名能力。
#r_mosaic 发表于2007-01-11 12:45:46  IP: 211.167.159.*
# lbing7 发表于2007-01-10 09:14:48 IP:
晕哈,偶又被取笑幼稚了...

我也刚刚毕业没多久,不过,我始终坚信:不知道所以然的程序员不会有好下场!!
=============
是啊,Joel Spolsky 很注重程序员对底层的掌握,说实话我也不一定能过他这关……
#r_mosaic 发表于2007-01-11 12:53:14  IP: 211.167.159.*
tczyp:为什么一再有人证明C#的效率跟C++相差无几(1%~2%的效率损失),而又同时一再有人声称两者效率相差很多。。。老实说,如果效率上只是1%~2%的差别,那么大部分应用就倾向于用java,C#这类半动态语言或者其它全动态语言了。虽然C/C++不会死,但也只能退居二线。所以我非常希望有人能够澄清这个效率问题。

回复:两种说法都是有道理的:在程序长时间运行时 C# 的 JIT 和 Java 的 hot spot 优化是能让程序速度接近 C/C++ 程序的速度。但是在刚启动时就别想了,速度慢得很。

另外,C#/Java 程序很浪费内存。C/C++ 的 Windows 程序占 3MB 内存,而 C# 的 Windows 程序一启动就能占十几兆,就算裁剪过工作集以后也要 5MB 左右。Java 的程序似乎比 C# 的还要占内存。当然,C#/Java 有一个好处:GC 可以移动内存块,从而紧缩内存,因此对于大量的分配/释放,内存占用可能优于 C/C++。

所以为什么用 C/C++?想想 Windows 启动还有多少人在说慢吧。如果都用 C# 了可能更慢……
#r_mosaic 发表于2007-01-11 14:36:56  IP: 211.167.159.*
不过 C# 倒可以多个程序用同一个进程的说(用 AppDomain),这样做也许就比 C/C++ 程序更省内存了。
#Analyst 发表于2007-01-11 15:13:17  IP: 58.38.155.*
我觉得吧,多核时代现有的语言都不是自动适应的,包括 C#、Java、Python 等。但是Multi-Process和 Multi-Threading/Parallel 的比较是有意义的:如果要解决的问题适合用 Multi-Process 的方法,那么就用 Multi-Process 的方法,没必要去用更复杂的 Multi-Threading/Parallel。

回复:Multi-Process缺点在于通讯成本太高,难以细粒度的进行并行计算。目前C#、Java等确实是无法适应并行计算的,但是基于虚拟机的语言可控性还是不错的,不排除将来扩展出并行计算的机制,当然从头发展一门新语言也未尝不可。

除了性能还有好玩——没想到吧……甚至为了好玩我连 C++ 都不想用,就用 C。如果写数据库相关的应用程序我肯定用 C#。但是写解释器、字符串处理的时候我还是喜欢 C。命令行上的一些小巧的工具,用 C 写能同时贴合性能和优雅的目标,当然用 python 写更简洁,不过一旦简洁了抽象了,性能就没有保证了。其实我也明白某些程序也许永远不需要高的性能,但用 C 写就是好玩。

回复:因为我的工作关系,大部分时间是非常关注性能的。事实上能写出高效的代码并不是优化的最高境界,用最小的代价实现满足要求的代码,在开发代价、可靠性、性能上做出正确的权衡,只最优化那些瓶颈的代码,这样的人才具有大师风范。大师不是那类只会用C蛮干的人,他们知道如何针对特定的应用选择正确的方法,这需要有相当深厚的技术积累。

为什么一再有人证明C#的效率跟C++相差无几(1%~2%的效率损失),而又同时一再有人声称两者效率相差很多。。。老实说,如果效率上只是1%~2%的差别,那么大部分应用就倾向于用java,C#这类半动态语言或者其它全动态语言了。

回复:这个跟测试用例的选择很有关系,其实两者缺乏可比性。我只能说在纯数学计算上差距不大,在API密集调用的应用上,虚拟机要吃亏不少,因为有上下文切换代价。内存使用效率上,GC适合一般情况,C/C++则可以更灵活的针对特殊情况做优化。
#rexfa 发表于2007-01-12 01:04:07  IP:
看打架就是觉得好玩。
不过……
你们都用什么语言混饭吃呢?每个月工作量多少?收入多少?
细微的看每工作1小时能挣到多少钱?
#quanben 发表于2007-01-13 01:15:19  IP:
在嵌入式和驱动领域,C和ASM就是王道,就是核心核心再核心,控制一切。思想角度不同。
#quanben 发表于2007-01-13 01:17:38  IP:
大部分问题不能用multiprocess,只能用multithreading的。
#quanben 发表于2007-01-13 01:21:01  IP:
底层现在硬件甚至都有用C描述的了。
#fdyjfd 发表于2007-01-21 01:45:17  IP: 61.149.98.*
xxx
#fdyjfd 发表于2007-01-21 01:49:06  IP: 61.149.98.*
博主啊,总算找到知己了,说实话,在一个月以前,我还认为c/c++是执行期效率最快的,

可是因为工作的原因我开始学习.net,看了jeffrey richter的书后,我认为.net语言再过几

年可能会比c/c++更快。我本以为c/c++中内存管理虽然繁琐易出错但执行效率比GC有优势。直

到我开始考虑用c++实现GC。如果c/c++能够提供对GC的支持,在多核时代内存管理的效率一定

比目前的由程序员手工释放的快。如果c/c++不做此改进的话,多核时代的来临,必然有新的

语言在执行期效率上让c/c++ fans们再也不能自夸c/c++最快
#fdyjfd 发表于2007-01-21 04:01:17  IP:
test
#lovecaomi 发表于2007-01-30 15:47:04  IP: 222.27.109.*
路过~~
#lovecaomi 发表于2007-01-30 15:47:18  IP: 222.27.109.*
路过~~
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © Analyst