Begtostudy(白途思)'s Professional Technology Blog

欢迎访问begtostudy的专业知识博客!主要是专业技术和算法为主。
  首页  :: 联系 :: 订阅 订阅  :: 管理

C#与C++抉择【z】

Posted on 2010-09-24 08:52  白途思  阅读(1513)  评论(0编辑  收藏  举报

 【篇首语】这篇文章对两种语言的评价我很认同。快速开发用C#比较好。如果考虑效率,C++内核配合C#界面也是我常用的方式。

 

我一直不明白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++,而至于界面或者快速开发,那还是需要时间的,而造物者却很稀缺,如果所有的事情都让造物者来完成,时代就要倒退了。

  考虑到效率问题,我觉得正如上面某楼说的,科学计算或者仿真等方面,不用太忧虑。其实让我们机子卡的程序还真不多!

原帖:http://www.wrsaw.cn/Article/Print.asp?ArticleID=13191

前往Begtostudy的编程知识博客(CSDN)