免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: art_codes
打印 上一主题 下一主题

[C++] 确认一下c++中不能使用interface(如java)那样的功能把 [复制链接]

论坛徽章:
0
201 [报告]
发表于 2009-03-26 11:54 |只看该作者
原帖由 aaronvox 于 2009-3-26 09:40 发表
HI 兄弟们,能否把.net C#也连带比较一下,毕竟他也是主流语言,接口实现的也不错。


这样的话,大混战?

不过,或许这才是真正的交流和沟通。虽然在字里行间我们可能一个个吵得面红耳赤。
但静下心来,回过头再看看。过往的回复里,充满了很多很有价值的观点。
这才是我们所得到的最好的回报。

论坛徽章:
0
202 [报告]
发表于 2009-03-26 11:56 |只看该作者
c++语言和java的比较,已经讨论了大半天,说实在话,我对后面的回帖已经不关心了,许多的帖子如果让一个喜欢技术的人去看的话,我觉得很可笑,因为:
1>需要人没有c++和java双重语言编程基础,那种好,同意,基本上对整个讨论没什么作用,这种类还不具备评价这二个事物的基础理解能力,你要有自己的观点
2>有些人很容易从一个小点上来以偏概全的处理问题
3>讨论问题的时候,要说明自己对二种语言的背景,不了解的希望你可以旁观

其实从长远来说,cu上的讨论有些很初级的,对一个问题,许多讨论都建立在一个基础上的,大家都有比较公正的评价事务的标准. 没有个人见解。老引用别人的话的人,不管使用什么语言,基本上不变可能成为一个语言高手,更不用说技术高手。因为他缺乏思考能力和创造能力,这种类,我觉得暂时还不要加入到讨论的话题中,只会引起偏执狂的更加偏执。


讨论的一些前提
1>不讨论c++能做java做不了的,比如:底层的东西
        通信行业的使用情况是: 嵌入式(交换机,路有器)绝大部分核心使用的c,c++作应用的东西(比如NGN),图像和编解码(底层基本上是c和汇编,台式机上的编解码c++还不少)

2>不讨论web的东西,因为这个java可以做,c++做不了的
        web行业java应用还可以,对应的有php,ruby,python

3>我们讨论的前提是c++和java都可以做了的
        中等性能的东西

4>设计模式
        这个是思想的东西,和语言没太大的关系,不作为讨论范围

5>编译器
        这个是基础理论,和语言没什么关系,不作为讨论范围。是否语言开始强奸你去学习编译器/解释器,还是后期强奸,我觉得关系不是特别大


前提的一些基本结论:
        真正有价值的是使用工具来实现的东西,语言的东西,只要理解编译原理就可以了,深入的是你对操作系统的理解,数学和算法的理解
       

下面开始讨论语言:


主要特征1比较:
1>java是解释性语言,c++不是,编译完后形成执行文件
2>从解释性语言的设计来说,性能的好坏关键在于解释器的性能;编译性的语言关键在于编译器


要想学好java,你必须学好jvm,如果认为不学习jvm就能学好java的话,内存泄露是经常的,但是java如果有良好的编程风格的话,小的项目确实不需要考虑,入门的门槛比较低.
学习好c++,必须懂编译器,写意个小的项目,要稳定下来的话,也需要比较充分的了解编译器,入门难,但是上路后简单


打个比方来说,一个女人被和一个男人好,学习java,一开始慢慢相处,需要的话再深入.学习c++,一开始就有被强奸,然后再建立感情.更极端的说,先强奸和后强奸,先喜欢和后喜欢,因为设计的不同,有不东的理解,
如果喜欢先强奸的刚好找了一个先强奸的语言,说幸福,可以理解.如果喜欢后强奸的喜欢后强奸的语言,他说幸福,也很正常,从长远来说,都是很幸福.如果不是这二种情况来说比较痛苦.


如果理解了gcc,而不去理解jvm,我觉得这个不是高手的做法,一个高手应该是站在编译器的角度上来考虑语言的,如果不这样的,如果不是这样的话,不能称为高手,基础都没有学好.一个c++高手可以很容易的称为
java的高手,一个java高手也很容易成为c++的高手.如果你指针一蹋糊涂,那边请修炼c,汇编,计算机原理

主要特征2比较:
1>java单继承,没有运算符重载,不能内存管理
2>c++多继承,有运算符重载,有内存管理

这三个特性,多继承,少用,运算符重载这个,个人也认为语言中增加,内存管理管理部分,许多人都管理不好.

语言的适用环境;
        电信类设备厂商中c++的地位,嵌入式核心主要用c,上面的应用使用c++,网管部分,大多使用java来开发展示.也有全部使用c++的,个人没发现
        门户:后台c++,前台java,php,ruby,也有部分全部使用java的,如淘宝
        企业应用和电子政务:java多,还有一些其它语言
        金融行业: 交易后台c/c++,展示前台java


我的语言背景:
        最初学习c++,代码行1万左右,后来转到java,总计看的书包括<<高质量C++编程指南>>,<<effective c++>>,<<深入浅出MFC>>,<<C++语言的设计和演化>>,<<深度探索c++对象模型>>
        后来学习java,代码行N万行,看过的书<<java虚拟规范>>,<<effective java>>,<<spring专业指南>>,hibernate相关,熟悉jvm规范和调优
        现状,混合编程,使用java,c++,python

职业生涯了解的程序员的情况:
        c++语言,相对来说对计算机理解的多一些,中等程序员偏多,高手少.对一般开发来说,中等程序员足够.
        java语言,对计算机理解少一些,大多数人偏重于业务,初级程序员多,中等程序员体现在只会设计模式,高手少,对一般开发来说,中等程序员足够


我讨厌:乱反对java的,也反对乱反对c++的,任意诋毁一个都是无知的表现.
我喜欢:那种情况下使用java,那种情况下使用c++,推而广之到其他的语言



讨论中可以看到一些人的个人水平高低,是否有广阔的视野和开发经验
对于其他语言,自己不熟悉,乱评价,那就是无知的无谓,你要说我评价c#,我说我不会,没有办法评级。
欢迎相关人拍砖,但个人已经不想回复了!!!!

[ 本帖最后由 everlasting_188 于 2009-3-26 12:00 编辑 ]

论坛徽章:
0
203 [报告]
发表于 2009-03-26 11:57 |只看该作者
原帖由 艾斯尼勒 于 2009-3-26 10:02 发表


他提倡的就是你不用去理解,能用就好。


怕的就是像商人一样,给你铺好路,让你走好道。然后等温水煮的青蛙熟了,可以吃了之后。回过头来狠宰你一刀~~~~

论坛徽章:
0
204 [报告]
发表于 2009-03-26 12:31 |只看该作者

回复 OwnWaterloo 的帖子

Java性能不能片面考虑,Java在数值运算方面比较强悍,尤其是有JIT的辅助,确实有可能超越C\C++。但是Java在IO方面的性能一直很差,甚至不如Python。本人非Java程序员,也没怎么用Java写过代码,只是对JVM技术感兴趣,目前比较期待llvm与Perl6这两个虚拟机项目。因为从这两个项目的发展来看,在所谓的dynamic optimization techniques上,进展还是满多的。C++是一种喜好编译时static optimization优化的语言,对吧。总的来看,C++引入的每一项特性都围绕这static optimization来的。就拿OO特性来说,C++砍掉了多少运行时的OO特性!!就拿GP来说,编译器要产生多少静态代码呢。但是,如果dynamic optimization techniques上真的取得了什么不得了的突破的话,C++在特性与性能上的折衷就完全没有意义了。站在稀缺性的顶端了,给自己找条后路嘛,所以就别死抱着C++不放。

论坛徽章:
0
205 [报告]
发表于 2009-03-26 12:35 |只看该作者
原帖由 OwnWaterloo 于 2009-3-26 09:54 发表


高效?  搞笑吧??

我看了你给的那个链接, 但是页面中的链接就没再去看了。
这种噱头都看腻了。 希望你不要被那些商家所蒙蔽。

曾经还有人得出c++效率不如一门什么脚本语言来着。
他用cygwin编译 ...


性能不只是局部性的问题,对于函数语言来说,由于函数内部没有状态,因此只要参数一样,返回值一定相同。
因此在某些应用里,可以根据这个原理极大的简化计算

论坛徽章:
0
206 [报告]
发表于 2009-03-26 12:36 |只看该作者
能不能顺便把D语言也牵扯牵扯?

论坛徽章:
0
207 [报告]
发表于 2009-03-26 12:40 |只看该作者
原帖由 OwnWaterloo 于 2009-3-26 09:57 发表


我提jvm是用c/c++写的, 确实不是一个充分论述 “java无法利用多核优势” 的论据。
java对并行操作的封装, 阻碍了理解。 这个没错吧?


你是否觉得Web封装更好,更阻碍理解呢

俺倒是觉得,当今计算机界一等一的牛人全跑去作Web了。
有人做过并行性受益方面的研究,并行性受益应当时算法的问题,而不是语言的问题。比如某些算法具有超线性受益,就是处理器增加N倍,计算速度增加超过N倍!!!

论坛徽章:
0
208 [报告]
发表于 2009-03-26 12:46 |只看该作者
原帖由 reiase 于 2009-3-26 12:31 发表
Java性能不能片面考虑,Java在数值运算方面比较强悍,尤其是有JIT的辅助,确实有可能超越C\C++。但是Java在IO方面的性能一直很差,甚至不如Python。本人非Java程序员,也没怎么用Java写过代码,只是对JVM技术 ...


看到reiase的回复,我觉得,还是有继续讨论下去的必要,他视野还是很开阔的,其实我们讨论问题的本质即:比较一下c++编译器的static optimization和jvm的dynamic optimization,然后在说语言的效率的问题

[ 本帖最后由 everlasting_188 于 2009-3-26 12:47 编辑 ]

论坛徽章:
0
209 [报告]
发表于 2009-03-26 12:46 |只看该作者
原帖由 OwnWaterloo 于 2009-3-26 09:59 发表


在那之前, 不掌握稀缺技术的人, 会更加惨, 不是么?

所以, 真正要掌握的不是稀缺技术, 而是思想。
这也正是我反复说java不好的地方,  因为通过它能学到的思想太少。


你怎么确定你在Java里学到的思想少,Java的类库可是OO设计的典范之作阿
就像俺说的,C++作者在自己的书里拿数学,哲学,文学来装B。但如果你真的去读些这方面的书的话,要在这几方面鄙视他是很容易的。

论坛徽章:
0
210 [报告]
发表于 2009-03-26 12:50 |只看该作者
原帖由 OwnWaterloo 于 2009-3-26 10:05 发表


c++玩functional不是最近的事。
打c++之父把 调用操作符 加入c++之时,  c++就已经部分支持functional了。

algorithm中的一半函数模板, 全是high-oder-function。
functional中的函数模板, 也全是hi ...


个人认为C++不可能真的functional,毕竟C++与functional的祖宗级语言Lisp站在静态与动态的两个极端上
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP