首先由博主引出了以下的问题,大家由此展开讨论:
我一直不明白C++真的比C#强大吗?望高手指点。
困惑1.:为什么飞信之前的版本用.NET做的,感觉不是很好用,最终放弃了.NET而使用C++重写了。感觉重写之后的版本好一点。难道是他们的技术不好?还是C++真的比C#强大吗?
困惑2:为什么QQ一直使用C++开发。(虽然QQ开发的时候C++还是最主流的,C#还不是那么流行)但是概念版QQ只是使用了WPF的技术实现了其界面,但是内核还是C++。现在C#已经流行起来了啊!为什么不出现完全C#的QQ 呢?还是C++真的比C#强大吗?
讨论开始后,有技术人员表示这个要看具体需求,其实这里不太存在效率的问题,现在的计算机效率已经不成问题了。如果效率有问题,MSN怎么跑的?有人说所以MSN很慢?MSN慢是因为MSN的服务器在美国,而不是因为用了.NET编写的才慢的。就楼主所说的飞信,QQ(还不止飞信和QQ,还有很多)这种软件,一般都是使用C或者C++开发。为什么不用.NET呢?这个就牵涉到一个用户群的问题。飞信,QQ这种是即时通讯软件,他的用户群非常广泛,那么也就碰上一个问题,如果你在安装飞信,QQ的时候他先提示你去安装一个.NET framework,你是不是要晕掉?就算你知道这个是什么?但是你不能保证所有的老百姓都知道.NET framework啊。
那么你可能要问,直接把.NET Framework打包到飞信或者QQ中?!别天真了,.NET Framework太大了,就算真的打包进去是不是都要下载半天?那么用户体验就很差了!还有就是牵涉到跨平台的问题,用C或者C++基本上不存在跨平台的问题,你用.NET呢?Linux,MAC OS上怎么办?你不能让你的用户为了用一下飞信或者QQ全部先换OS吧?所以一般官方的版本都是使用C或者C++写的。那么开源的版本吗,这个就是随便了,你爱用不用!至于MSN,那是微软的策略,所以他就是用.NET写成的,而且官方的MSN只支持window(不知道是否已经出了官方别的平台的版本?),一般情况下,你要在Linux或者MAC OS上只能用开源的MSN客户端!
51CTO编辑注意到上面这位技术人员的观点是从操作系统的角度来谈,也就是不同系统对不同开发工具的适应程度。特别是.NET Framework如何运行在Linux这样的开源系统中的问题。
对于飞信用C++重写的问题,有人表示了不同的观点:“新版飞信一如既往是.NET的,也不知道从哪里传出说是C++重写的,其实根本没有。 QQ的话不得不考虑组件重用的问题,原本用的好好的核心没必要换不是吗。 总体来说.NET运行效率应该比不上原生代码的,但是性能的差距肯定不会太悬殊。毕竟虚拟机可以针对硬件平台优化代码,原生程序则很难做到。.NET难以保证代码的安全确实是个问题,但是使用各种手段增加破解难度也是可行的,毕竟就算是原生程序对于代码的安全也不能100%确保。”这样的观点是支持.NET广泛使用性的,不过也认为一套已经成熟的开发手段,没必要做平台的调整。
C#比C++多了一层中间语言Common Intermediate Language,在运行的时候生成计算机的语言再去运行,和C++直接生成计算机语言相比效率更差。最早的时候计算机编程是用打洞的字条进行输入的,那个字条就相当于***C++编译好的计算机认识的程序。
.NET强大在于开发效率,易于维护(谁让C++这么多的宏啊,常量啥的)。.NET并不慢,***次加载可能会因为要加载runtime,需要更长的时间。 一般的指令执行,可能比C/C++慢百分之几十而已,是同一个数量级的。如果说.NET写的程序慢的不能忍受,那么绝对不是.NET的问题。不过.NET程序更占内存,这个我同意,谁让要加载虚拟机呢,谁让类型带了这么多元数据呢, 这一点恐怕所有虚拟机语言都好不到哪里去。
有技术人员提出这个问题主要是权衡吧,托管的、封装好的代码必然会给程序员带来很大的帮助,想想当年程序员们为内存泄露而打飞干戈的年代吧。C++是很好,就好比给你一把玄铁,想打造什么样的锐利武器,你自己打造把,但是打造不好,可怪不得C++;而C#呢,给你一半锋利的剑,你去厮杀吧,但是随便你武力再好,遇到一个比你锋利的剑,你就要认倒霉。
封装给我们带来巨大的好处,物以类分,这符合每个人的习惯;而C和C++呢,万物来自核心,从核心出发吧,这符合那些造物者的思维!所以很多东西的核心是C++,而至于界面或者快速开发,那还是需要时间的,而造物者却很稀缺,如果所有的事情都让造物者来完成,时代就要倒退了。
考虑到效率问题,我觉得正如上面某楼说的,科学计算或者仿真等方面,不用太忧虑。其实让我们机子卡的程序还真不多!
【编辑推荐】