返回信息流发信人: aiyan (岩岩), 信区: CPP
标 题: Re: c#还是c++
发信站: 北邮人论坛 (Sat Jan 5 15:39:27 2008), 站内
转化为简体如下
台湾大学电机所研究生 萧鸿森 的一篇文章,看看你可能就更明白了??
C#和C++专属不同的领域 井水不犯河水
如网页、商用软件、资料库这些,本来就该用C#写,也不该用C++写。
但是OS、Driver、嵌入式系统、Game、3D、影像处理这些领域C#也无法抢,因为C#的无法写
底层的OS、Driver、嵌入式系统,速度也无法达到Game、3D的需求。
举个例子来说,你看过Microsoft哪个软体用C#写吗? XP、Vista、Office、SQL Server,就
连C# compiler也是C++写出来的,这也是微软被很多人批评的一个地方,大力鼓吹C#,自己
却从来没有软体用C#,除了微软的网站用ASP.NET且用C#写外。
所以其实我C#和C++都很喜欢,若以语法来说,C#乾淨很多,也稳定许多,大部分程式,若
和速度牵涉不大,且记忆体可以接受,我会用C#写,但若对速度非常要求,如3D、影像处理
,这些我就会用C++写,毕竟这些演算法都要跑很久,很需要速度,而且C++又可内嵌组合语
言,对于一些速度更需求的,可以用组合语言去改善速度。
以上是以实用的角度去看C#和C++。
其实C++让我着迷的,是STL和泛型。
C# 1.0并没有泛型,C# 2.0有了泛型了,但相关讨论、书籍都很少,我学了C++之后,原本
以为OO已经是抽象化的极致了,但泛型让我眼界全开,发现除了OO外,还有另外一种思维模
式,刚好解决了OO的一些问题。
OO有什麽问题呢?
1.记忆体需求大,因为OO的多型须靠vtable去纪录virtual function
2.速度慢,因为OO要靠vptr来执行virtual function
导致OO在写library/framework时,记忆体和速度成了一大瓶颈,或许你会说现在CPU这麽快
,速度这麽重要吗?但事实上在不少领域,CPU是很慢的,如嵌入式很多只有8 bit/ 16 bit
,如影像、3D领域,目前的CPU还是不够用,举个例子来说,现在有影像规格有FullHD,但
不久的规格会比1920 * 1080更高,显示频率还要 120MHz以上,这种规格,目前pentium
CPU没有一颗做得到,所以当然软体就必须能省CPU则省,尽可能达到规格要求,所以速度一
直是C和C++这种语言的重要坚持!!,以C++的标准程式库STL来说,若用OO写当然可以,但速
度和记忆体花费一定相当可观,泛型是compile-time技术,刚好解决记忆体和速度的问题,
当然缺点就是无法如OO那样动态改变,所以在写library/framework下,泛型成了一个很好
的选择,C#和Java虽然也提供了泛型,但C#的泛型还很弱,且ms似乎没打算让C#泛型更强了
,C# 3已经没看到泛型有重大改变,Java的泛型又比C#更弱,总而言之,C#和Java是想将泛
型用在 容器 这个问题,而不像C++是用在compile-time来增进速度,改善OO的问题。
所以C++让我有兴趣的是『泛型』,一种有别于function (C语言)和OO(C#、Java)的思维方
式,事实上,这几年C++重点也都是放在泛型了,将来C++ 0x的新规格,也都是放在泛型的
加强上。
泛型也成为C++和C#、Java的重要分水岭,若你醉心于泛型,C++是唯一的选择,不只C++在
泛型支援完整,且相关的资料、书籍都多,圣经也已经出现,不像C#、Java的泛型书籍都还
在幼稚园。
>>学习C#是不是要打好C++的基础呢?
很多人说,要先学什麽语言,再学什麽语言...
我的想法刚好相反!!
我觉得一张白纸最好!!
因为一个语言熟悉了之后,就会用那种语言的思维去学其他语言,就如同鸠摩智用小无相功
耍少林72绝技一样。
很多C高手写的C++,根本没有C++的精神,只是用了C++ compiler而已。
很多C++高手写的C#,其实也只是keyword从C++改成C#。
所以我觉得,若要学C#,最好没不会C,也不会C++,就好好的用OO的方式将C#学好就好。
若已经会C++的学C#,也千万不要像我早期一样,总喜欢将C++ code 一行一行翻译成C#,其
实这样没有意义,若要从C++带进C#的,只有那些Design Patttern而已,其他的C++ idiom
千万别带进C#。
> 蛮多文章对我而言有点深度,看来我要再加把劲才行了。
不知道是哪方面你觉得有深度,是Design Pattern和泛型那部分吗?
那部份的确比较玄,属于内功部分,一旦打通任督二脉,学什麽语言都很快,就如同一般人
练乾坤大挪移要六十年,但任督二脉高手鍊只要几个时辰即可,我一直觉得,重要的是内功
,这种可以用很久,而不是一直练外功,从DOS -> Windows -> ASP.NET -> AJAX ->
Silverlight ->....?,学来学去一直都在学GUI,只要MS打一个喷嚏从VB或MFC改成.NET,
大家就得哀嚎重学,从.NET 1.x -> .NET 2.0 -> .NET 3.x,又得跟着MS屁股走,如OO /
Design Pattern这种内功,无问MS怎麽改,都还可继续用,投资报酬率最高。
很多人学语言,将每个keyword用法学会了,就说会了这个语言,我曾经问了一个会C#的朋
友,我问他
请问interface该用在哪些地方?
请问virtual该用在哪些地方?
他知知呜呜的说不上来,其实interface和virtual正是OO的精华,也是C#的精华,这两个没
学好,C#就等于没学好。
要如何用好interface和virtual呢?其实就是学Design Pattern,他已经将OO的精华归纳成
招式,基本上若能套着招式打,就可以打出很漂亮的OO了,至于泛型,我也还在摸索,是有
Generic Pattern没错,但我现在也只对Policy Based Design这一招比较有感觉,其他的我
也还不敢说,我会陆陆续续的将Design Pattern和Generic Pattern写上Blog,但多久能写
完我也不知道,就看我有多少空閒时间了,呵呵。
总之,若你想学好C#,想提升C#功力,就得提升OO功力,要提升OO功力,就是用好Design
Pattern。
若有问题欢迎随时email或msn跟我联络。
【 在 ttplayer (linsua) 的大作中提到: 】
: 台灣大學電機所研究生 蕭鴻森 的一篇文章,看看你可能就更明白了??
: C#和C++專屬不同的領域 井水不犯河水
: 如網頁、商用軟件、資料庫這些,本來就該用C#寫,也不該用C++寫。
: ...................
这是一条镜像帖。来源:北邮人论坛 / cpp / #1206同步于 2008/1/5
CPP机器人发帖
c#还是c++
Xer
2008/1/5镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。