BastEt 阅读(2922) 评论(71)

C++本身就已经在逐渐走向衰落,而java和C#在很快的发展之中(当然不要责问我说有XX项目或者XX项目除了用C++,用其他做不到,这些项目的总体的数量不是很多,而且这些项目的领域在越来越少,就说时间空间要求相当严格的大型应用,我想90%的C++程序员是基本没机会去做的) ,养C++程序员的公司也越来越少了。
C++的库设计和语言设计的方向都不是向更易于使用发展的。 没有GUI,没有网络,没有正则表达式,连日期也没有。

C++的语言被模板搞得支离破碎,更加涩难懂。C++委员在一些微言大义上大做文章,更加纠缠于一些很少用到的语法。
C++的库设计并不是考虑到使用者的,很多是过度设计+过度优雅(最简单的例子,看string和其他的string的设计,这个string可能是比较优雅的,但基本上是最难用的),在某些角度上看,有很多甚至不如c库。
再看看BOOST,所谓的新一代的C++库,里面大多数的库一般项目根本用不到,而一般项目用得到的库他又不提供(对比JAVA和C#的库就知道了),他的代码也难以读懂,这样又会失去很多的用户,也难以使用。就拿上面的网络库来说,有人说有了ace了,为什么还要其他的什么网络库,好的,一个小组假如有12个人,这些库都要熟悉的话需要的时间周期太长,对人员的素质要求也极高。(很惭愧,我也很笨,boost的一些东东看来看去不懂,ace里的一些东东现在还是不会用)
我是实用主义者,说什么魅力,什么哲学,什么原则,我个人觉得都是很虚很空的东东,语言只是让我们来完成事情的,不是拿来吹嘘的,将C++这样形而上只会导致负面的结果,市场毕竟是无情的。


评论列表
pAnic
re: C++的衰退和JAVA、C#的崛起
完了,7cat又在惹事~
不过个人认为,在包括GUI在内的一些类库支持上,C++的确陷入一个误区,语言本身拥有在不同平台编译运行的能力,但是却因为不同平台的GUI等没有统一的标准无法实现真正的跨平台。
这一点Java做的很成功,C#恐怕都难以与之相比。
一笑
C++的衰退和JAVA、C#的崛起
顶!如果C++能仅仅解决C的一些不良之处,倒也很有做为,但是C++不这么干,它非要在各方面都设计最优,结果很多领域还是用C(比如嵌入式领域)如手机平台开发等,不用C++。
panic
re: 一笑
C除了对动态数组和继承,封装等特性支持不足外,似乎没什么明显的不良啊~
pAnic
re: 一笑
感觉C++对于编译器的开发商要求太高了,xml推出的时候,号称一个普通程序员只要2周就能写一个xml解析器,结果现在xml传播的速度就很快,很多语言和工具都内置了对xml的支持,而要支持C++那一堆特性,就比较痛苦了。。
Diviner
re: C++的衰退和JAVA、C#的崛起
C++的库没有lua多,没有python多,真应该感到丢脸。
Diviner
re: C++的衰退和JAVA、C#的崛起
C的市场定位比较明显。基本属于无法被取代的地位。所以个人觉得学计算机可以不学C++,但不可以不学C(不然连操作系统估计都很难懂,操作系统的调用大多是C)
Diviner
re: C++的衰退和JAVA、C#的崛起
要真那样做的话,就苦了做手机开发的人了,每个类型的手机都是一套API,会死人的,而手机厂商也希望其他平台上的应用能很快移植过来,我想,这就是所谓的标准的威力吧,posix作用跟这个类似吧。
Diviner
re: C++的衰退和JAVA、C#的崛起
C对动态数组和继承,封装等特性的支持都有一套方法。
一笑
to pAnic: //re: C++的衰落和JAVA、C#的崛起
我做C项目最大的感受是:
C的劣势在于:
1) 没有名字空间,项目超过100w行后很痛苦(尤其是函数的extern和该不该.h中的声明);
2) 移植多家厂商代码时,统一类型很痛苦(<--- define和typedef 混在在一起用,冲突的很厉害,有没有namespace的约束);
3) link编译器不稳定很痛苦——不出问题则以,一出问题基本上解决不了(<---多半也是由前两条导致)。

乾坤一笑
to panic //re: C++的衰落和JAVA、C#的崛起
>>>我有一点不明白,就是手机等开发,市场上净是java的产品,按理说这应该是嵌入式开发,C应当有相当市场份额的。。
>>>而且Java开发的GUI和游戏,运行效率实在有点不敢恭维,经常连屏幕刷新都看得到--b
--------
解释一下:
1) 手机开发,平台全是C;MMI绝大多数也是C做的,或者是用其他工具设计然后再generate成C代码,然后用C编译器编译。原因很简单,由于手机市场竞争极为残酷,要拼价格战就要降成本,要降成本ARM就要用低端的,现在芯片套片也逐渐向All-In-One方面发展,所以...
如果纯粹用java开发,不用别人打击他,他自己就跨了。
2) 对于协议栈部分,更是非C不可。这个部分的性能治标都是ms级的,那个用户也无法忍受拨个电话好几秒都不通。
3) 机上的java是趋势,目前来看不可取代,但java主要用作增值服务,比如游戏、二次开发接口等。因为java的可移植性的优势不仅仅在目标发布阶段,在开发阶段更具有优势。如果用C的话程序必须要进行目标单板上的验证(集成测试?不太确定),但是java完全可以在windows上开发好,然后直接down在手机上用就Okey了。
4) 目前手机上的单板调试工具比起windows和linux软件开发的调试手段来说及其落后,基本上都是依赖最原始的trace、assert、或者注释代码行等手段来调试。这也是用C开发比较慢的原因。至于驱动程序就更不用说了,是没法模拟的。
乾坤一笑
re: C++的衰落和JAVA、C#的崛起
嘿嘿,作个广告:
对用C做开发时"C的劣势"的总结
当前手机开发领域中c和java的地位
清风雨
re: C++的衰落和JAVA、C#的崛起
来了好几次,都没好意思说话。
个人和七猫颇有同感:
1.对模板的支持,给C++带走的实际比带来的更多。
2.对boost的批评,个人更是甚觉欢快!—— 这也是,我从来不用boost的原因之一(自从我翻开boost的几偏介绍以后,就再也没有深入的去了解它,甚至,排斥它)。
所以:
java在提供泛型时相当谨慎(这也是猛岩所诟弊Java的,猛认为java得C++泛型之表不得之里)。
现在对于元编程的结果,还未可知(在C++里,似乎喊声甚高,不过,实际使用情况则未若此)。

仅是个人看法,切勿过辨。
小明
re: C++的衰落和JAVA、C#的崛起
boost有什么不好,对于使用者来说,还是相当方便的
你要是不同意boost,也就是不同意stl
stl对于C++编程的帮助是巨大的

boost的好东西很多阿,比如shared_ptr,functor,serlizlable,stringtoken,regex,tuple
,any,array都是好东西
未来的还有socket和logging

虽然boost的源代码不是一般人能写好的,但是对于使用者来说,还是很方便的。
Diviner
re: C++的衰落和JAVA、C#的崛起
你要是不同意boost,也就是不同意stl
//============
无城要扣这么大的帽子吧。

boost在很多方面做得太过了。上面提到的那些在实际工作中你用到过吗?

既然不是一般人能写好,他本身已经脱离了群众了。

对使用者来说并不方便。
小明
re: C++的衰落和JAVA、C#的崛起
没有全部用过
但是这些都是有一定的实用价值的

正于使用stl并不一定都能看懂stl源码一样
boost源码比较复杂,但是细节都被包装在实现里面了阿
而且boost各部分都是相对独立的

boost就是将来的标准库,相信cpper将来都会使用到
Diviner
re: C++的衰落和JAVA、C#的崛起
stl的原码还是比较清晰好懂的,boost的不同的,boost里面很多代码相当丑陋。

boost已经出来了很久,但使用的人是很少的,而且大部分用的就是那几个库(ptr),连regex都不定有多少人用。
小明
re: C++的衰落和JAVA、C#的崛起
不知道你有没有看过vc6 stl的实现,难道boost比那个还要难看。

对于使用者来说,这些不是最重要,关键是否能够提供简洁的接口。

举例说明:

boost::thread

#include <boost/thread.hpp>
void mythread()
{
cout<<"hello,thread!"<<endl;
}

void test_thread()
{
boost::function< void () > f(mythread);
boost::thread t(f);
t.join();
cout<<"thread is over!"<<endl;
}

简洁吧

boost::tokenizer是用于切割字符串的,类似于Java里面的StringTokenizer。

#include <boost/tokenizer.hpp>
void test_tokenizer()
{
string s("This is  , a ,test!");
boost::tokenizer<> tok(s);
for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
       cout << *beg << "\n";
}
}

至于boost现在没多少用的原因是,boost不在标准库中
Diviner
re: C++的衰落和JAVA、C#的崛起
事实是确实比vc6的难看。boost::tokenizer整个原代码我打印出来看过,很费劲。而且有人(hmailserver作者)测试过效率比较低。
Diviner
re: C++的衰落和JAVA、C#的崛起
boost::function< void () > f(mythread);
boost::thread t(f);
t.join();

这个地方每一行都不是很容易理解的。
玻璃小屋
re: C++的衰落和JAVA、C#的崛起

LP~~~ 快出来看上帝啊~~ 他们在打架~~

总是好心情
re: C++的衰落和JAVA、C#的崛起
无语,无语呀。。。
数与道之争,会有什么结论。
用什么,其实根本不重要。
zfive5
re: C++的衰落和JAVA、C#的崛起
c++和java,c#本来就不是一个语言级别,
c++是语言
java,c#太多的平台

c++走的路没有错
du51
re: C++的衰落和JAVA、C#的崛起
支持楼上的.
C++只是语言.
JAVA,C#已经不纯粹了.
asdf
re: C++的衰落和JAVA、C#的崛起
一帮门外汉,吵什么吵!
胡哥
re: C++的衰落和JAVA、C#的崛起
我觉得不要争来争去的,萝卜白菜各有所爱,C++存在了这么多年,说不定C++的哪项新技术的出现会导致Java或其他工具会被淘汰呢,谁说得准。
三缺浪人
re: C++的衰落和JAVA、C#的崛起
我觉得JAVA提出“一处编译,到处运行”的理想是好的,但好像以前的世界语一样,最终还不是失败。
yj98
re: C++的衰落和JAVA、C#的崛起
晕. 吵了半天.苦了我这个新手了..到底该学c++ 还是 c# ??????????
fanhui
re: C++的衰落和JAVA、C#的崛起
本人认为这位兄弟的帖子有一定道理。但是有点过激了。C++的各种细节却是被搞的太复杂了。尤其是所谓STL可以说是C++中最大的败笔:可读性极差,效率极其低下。但是这些问题也很容易解决:那就是回避这些东西。实际上我们抱怨各种C++的库写的差是由于这些库的设计者造成的,而不是由C++语言本身造成的。类的封装,函数重载,虚函数等都很自然的体现了OOP的设计模式,这些对从事大型的应用程序设计都是很有帮助的。这些内容是C++的精华之处。本人从事c/c++程序设计10余年之久,至今仍感觉c/c++是计算机语言中的至宝,几乎是无所不能。c/c++的统治地位丝毫没有动摇过。
上面有一位朋友提到要精通C,这是极为重要的。C是面向过程的语言,简洁易懂。特别是指针和结构,使用极为灵活。总之,C体现了程序=数据结构+算法的设计思路。初学者一定一定要精通C。 OOP实际也是数据结构+算法的更进一步的体现,即:把某种数据结构和处理这种数据结构的函数封装在一起构成类。理解了C,熟悉数据结构处理以后,就可以很容易掌握C++,因为它不过是一种更直接的表达OOP的写法。在C中,一般的数据结构处理函数原型为xxx_process(xxx *data),在c++中,则写成xxx *data, data->process();在c中使用函数指针,在c++中使用virtual function;在c中使用宏,在c++中使用模板(当然c++预处理器也支持宏)。就这麽简单!
fanhui
re: C++的衰落和JAVA、C#的崛起
(序)
其实,本人认为计算机软件设计语言麽的过于多样化是完全一种技术的发展误区。很过人说asp,php,vb等易学易用。可我却没有这种感觉。相反,我却认为这些语言的语义不明确,至少很难掌握。
c/c++实际也可以做成解释型语言或者被编译为虚拟机代码。这在技术上是没有任何问题的。另外,可以对c/c++的标准库进行大量过程,让标准的c/c++开发环境成为程序设计百宝想。我期待这这些产品能够早日问世。
疯子阿虹
re: C++的衰落和JAVA、C#的崛起
我同意
看我的疑惑!

http://community.csdn.net/Expert/topic/4680/4680839.xml?temp=2.724856E-02
zzzz
re: C++的衰落和JAVA、C#的崛起
从大学毕业到今天差不多十个春秋了,一直在用COBOL,没有觉得什么不好,什么是技术,能用的,能解决问题的都是技术,关键在于精通.
daotong
re: C++的衰落和JAVA、C#的崛起
同意zfive5的看法,C++是计算机语言,而java和C#已经不完全处于语言的范畴,它们是一种工业化的生产工具,所以大型的商业软件用java和C#效果很好。
但是大家注意一点,如果你的C++很精通了,再来用java或C#,会有什么情况呢,你会发现它们是那么的简单,你所要做的就是熟悉它们在哪一个方面该用什么工具,然后把已有的控件、类库等等叠加在一起就可以了。如果你java和C#都很NB了,来做C++该做的工作,你会发现你一窍不通。
所以,我认为,如果想在计算机技术领域有所突破,学习C++是一条辉煌的道路。
小力
re: C++的衰落和JAVA、C#的崛起
“很惭愧,我也很笨,boost的一些东东看来看去不懂,ace里的一些东东现在还是不会用”

说明什么?到底是C++的问题还是你的学习能力有限?
sidle
re: C++的衰落和JAVA、C#的崛起
哈哈,七猫,你的这个贴好热闹啊
RonCha
re: C++的衰落和JAVA、C#的崛起
同意daotong的说法。C#只不过是在ms il上的一个脚本而已!
hehe
re: C++的衰落和JAVA、C#的崛起
路过,看到有人在这里误导初学者,忍不住说两句.

"OOP实际也是数据结构+算法的更进一步的体现,即:把某种数据结构和处理这种数据结构的函数封装在一起构成类。理解了C,熟悉数据结构处理以后,就可以很容易掌握C++,因为它不过是一种更直接的表达OOP的写法。"


-----------------------------------------------------------
症状:典型的c风格的c++程序员,完全没有理解oop.
建议:入门书<effective c++>,<more effective c++>再读两遍.

hehe
re: C++的衰落和JAVA、C#的崛起

楼主的痛苦相信中国的cpper门都有过,这样的痛苦错误不在c++,在于选择用c++做他不适合做的事情的人.

开始一个项目前,我们自己有没有认真考虑过,"我真的需要用c++去做他吗?",或者"c++真的适合这个项目吗?".我想很多时候我们需要的仅仅是一个RAD工具而已.

大家去看看国外的cpper们在用c++开发什么东西,中国的大部分cpper们又在用c++做些什么玩具应用,而且绝大多数人的c++水平实在不敢恭维,加上急功近利,加上需求管理混乱,加上没有任何测试保障...

回过头来想下,如果我们要开发一个RAD工具呢?如果是更复杂更强大的系统呢?

c++的应用范围虽然很窄了(下有c,c++效率不及,移植性不及;上有各种快速开发的语言和工具,c++过长的开发周期对于快速多变的市场需求简直是一场噩梦),但是却可以开发出很nb的系统,而且很多场合非c++不行,如果非要去踩那些c++本身不适合的雷区,错误在于选择的人自己.
hehe
re: C++的衰落和JAVA、C#的崛起

有时候我就在想,中国确实不需要c++程序员
兵临城下
re: C++的衰落和JAVA、C#的崛起
那么请问c++在windows下开发好程序之后,不改动任何代码能在其他操作系统运行吗?编辑器支持操作系统能咋样呢?我通过最熟悉的操作系统开发出来的程序不知道是否比得上我在比较陌生的系统开发出来的程序。这样想应该结果可想而知。通过跨平台我就可以在最熟悉的操作系统上开发,大家说是不是。还有就是我想知道哪位对linux比对windows还熟悉的?可能大部分都是windows起家。
兵临城下
re: C++的衰落和JAVA、C#的崛起
请问楼上,你理解的跨平台是一套系统从新在新操作系统中开发吗?
大大
re: C++的衰落和JAVA、C#的崛起
说了半天,到底学哪个好啊?
fanze
re: C++的衰落和JAVA、C#的崛起
语言只是工具
daniel
re: C++的衰落和JAVA、C#的崛起
学的快 丢的也快...

学习期太短 你会分不清老手都新手有什么差别
并且很多人跟你抢饭碗 = =

c/c++ 还是比较好的
软硬通吃..什么都可以做...

驱动/单晶片/图形工具/扫毒/game....这些会c/c++都可去找工作
erp/手机.etc 学c/c++也是可以找工作

开版的应该是 c++学习期的高原状态 可惜没忍过去 @@

咖啡
re: C++的衰落和JAVA、C#的崛起
越看越混乱,脑子已经乱了...谁给总结一下好让我清醒一些哈...
st
re: C++的衰落和JAVA、C#的崛起
部分同意你的观点。C++需要知道自己的定位。
但Java,C#之类也只是商业上实用而已,特征是:程序员学习上手快,对公司来说成本低,因此流行。
但从学术角度来讲,分析这些语言的特性,功能和本质,则C++是比Java,C#先进得多的语言,未来仍在C++这边。
当年的Java其实就是简化了的基于OO的C++,实现了OO的必要功能,去掉不实用的增加语言复杂度的部分。
Java增加的虚拟机技术才是Java跨平台的根本基础。这个属于实用性(库)的范畴,不是纯粹的语言范畴。
从理论上讲,只要有合适的库,C++同样可以实现这样的功能。但是由于C++的开发性,和标准委员会的过分严谨,C++一直没能有标准化的足够多的实用性和易用性都很强的库支持。这是C++的弱点。而且这个弱点恐怕很难克服。因为C++的定位最重要的一点是:保证给予程序员最充分的自由。这一方面使得它很难易用起来,另一方面使得它很难在库层面标准化起来。
我们需要C++这种类型和风格的语言。只是在实际应用时,你完全可以根据实际情况选择其他合适的工具。
从语言的角度讲:C++在应用领域和Java,C#之类快餐语言的竞争中有劣势。但从社会的角度讲:门槛低的Java,C#之类语言,竞争也更激烈。
所以对于程序员来讲,用什么工具并不重要,重要的是你能做什么,能做到什么程度。
D.zhw
re: C++的衰落和JAVA、C#的崛起
为什么不学c++?
你知道学了c++后会得到什么吗?
-------------------------------------------
再谈点应用嘛
QT不是可以不加修改的应用在各个平台么?(只不过目前win下的商业产品不免费)
想挣钱就去抢劫!
re: C++的衰落和JAVA、C#的崛起
人人要有一个匠人之心!想挣钱就去抢劫!
cplusplus
re: C++的衰落和JAVA、C#的崛起
"我是实用主义者,说什么魅力,什么哲学,什么原则,我个人觉得都是很虚很空的东东,语言只是让我们来完成事情的,不是拿来吹嘘的,将C++这样形而上只会导致负面的结果,市场毕竟是无情的。"

你是实用主义者,你就是活脱脱一个俗人,俗不可耐至极,如果把全世

界所有的程序员分成十等,你就是处于最低层的code farmer!

你知不知道,你那样说,只能说明你极没品味,修养极低,而你却不

知,还以为自己很了不起,很有能耐。

人啊,无知不是你的错,不知道自己的无知才是你的错,而不知道自己

的无知却以为自己很渊博的人,就是无药可救了。

这样的人“凤毛麟角”,而lz居然有幸成为这样的人,真是几辈子积来的福



你说你知道什么,除了知道吃饱了摸摸肚子变大了,你懂什么精神追

求?

你就俨然一支井底之蛙, 你就坐在井底看你头顶那一孔秽浊的天空吧,

别跳来跳去的哇哇乱叫了,聒噪死人了,还要蛊惑群众,连只乌鸦都不

如。

中国的程序员不全是你这种人,不然中国的软件永远都不会有出路,

永远只能被欧美牵着鼻子走。

不好意思,我本来不想说你的,本来想给lz留点面子的,但考虑到lz敢说

出这样的话,脸皮厚的定然非比寻常,所以忍无可忍,只有不吐不快

啦。

却lz还是反省反省吧,若还是执迷,就随便狡辩吧,俺只是路过,以后

也听不到您的高论了。 






Diviner
re: C++的衰落和JAVA、C#的崛起
楼上的,我不删掉你的话,只是你一点实在的东东也没有提到,除了盖帽子就是喊口号。
cplusplus
re: C++的衰落和JAVA、C#的崛起
举几个例子吧

HotSpot Java Virtual Machine是用c++写的
Sun编译器的主要组件是用c++写的
C#编译器是用c++写的


////////////////////////////////////////////////////////////////////////
autodesk 的autocad
autodesk公司一般只要精通C++的人,学c++只到三脚猫水平的最好不要应聘。

Apple系统的很多重要组件是用C++写的。

Google的web search engine是用C++写的。

Java VM core 是用C++写的

IBM OS/400 是用C++写的
Intel 的compilers and optimizers  是用C++写的

Microsoft的几乎所有产品都是用在visual C++ 环境下开发的,如:
Windows XP 
Windows NT (NT4 and 2000) 
Windows 9x (95, 98, Me) 
Microsoft Office (Word, Excel, Access, PowerPoint, Outlook) 
Internet Explorer (including Outlook Express) 
Visual Studio (Visual C++, Visual Basic, Visual FoxPro)
Exchange 
SQL 

Morgan Stanley(摩根士丹利银行)的大部分资金模型的是用c++开发的。
(引用)
还有MySQL,等等,太多了,太多了,牛B的产品。

本来不想说的,说了只是作为对c++学习者的鼓励,希望他们不要带着疑心去学习c++或放弃c++。
1 2 下一页共2页  到第

发表评论
切换编辑模式