横向技术分析C#、C++和Java优劣
时间:2009-6-2 10:09:58 作者: 来源:
 

c#诞生之日起,关于c#java之间的论战便此起彼伏,至今不辍。抛却microsoft与sun之间的恩怨与口角,客观地从技术上讲,c#java都是对传统面向对象程序设计在组件化软件时代的革新之果,可谓殊途同归。虽说两个语言有着"90%的重叠",但那另外"10%的较量"也往往能够左右一个天平的方向。本文将携90%之共,论10%之异,对两个语言做纯技术品评。文章不涉及两个语言的公司,市场等台面后的事情--虽然这往往也会影响人们对编程语言的选择。也不预备得出谁是谁的killer,读者应该选择谁的问题。"语言选择乃艺术而非技术问题",业界早有定论,无需多言。

c#和java都提出了对传统c++艰深,晦涩的语法语义的现代改良。在语法方面,两者都摈弃了c++中函数及其参数的const修饰,宏代换,全局变量和全局函数等许多华而不实的地方。在继承方面,两者都采用了更易于理解和建构的单根继承和多接口实现的方案。在源代码组织方面,都提出了声明与实现于一体的更好的逻辑封装。在类型系统方面,两个语言都在中间语言il或字节代码的基础上提出了映射(reflection)这样的概念,彻底革新了传统c++运行时类型鉴别的问题。但在大刀阔斧地对c++进行改革的同时,c#显得更为保守,它对很多原来c++中很好的性质予以了保留,如基于栈分配的轻量级的结构类型,枚举类型,引用(ref),输出(out),数组(params)修饰的参数传递方式等,这些在java中都被很可惜地丢掉了。在基本类型和单根继承的对象之间的类型统一方面c#提出的box/unbox要比java的包装类显得高明,效率也要好。

对c++不安全的指针及内存分配方式,c#和java都提出了托管执行环境。效率问题是托管执行环境一直以来令人诟病的地方,java虚拟机(jvm)的解释执行方式曾经让很多开发者"慢的不可忍受"。c#的jit编译方式为c#在这块战场上赢得赞声一片,某些c#托管代码甚至比传统c++代码都快。虽然现在各厂商实现的java平台也都一致地采取了jit编译方式,但c#在这方面的比较优势非常明显--c#的目标编译语言il从设计初始就把效率摆在了重要的地位,而java的字节代码的设计却有些鲁莽。托管执行环境经过几年的实践,在现代软件界已经达成了共识,效率的牺牲换来的是高度安全的代码--当然前提是牺牲的效率必须足够的小,至少可以忍受。值得指出的是在这里c#同样"念念不忘老一辈c++程序员",c#允许我们在unsafe上下文中进行指针操作。数组的索引越界检查,类型安全在c#和java中都被提到了相当的高度。在异常处理方面,不管从内置支持,还是从执行效率来讲,c#都较java略胜一筹。

"一次编程,多处执行"是程序设计一直以来的一个诉求,尤其是在现代互联网络时代。在跨平台方面,java的支持和实现都是为人称道的,虽然jvm的速度仍然让人备感头疼。而c#虽然在底层构造方面对移植性进行了充分的考虑,但至少目前还没有成熟的,经过检验的产品。c#在跨平台方面似乎更热衷于xml web services互操作,而不是跨平台编程。但c#通过其基础语言构造(cli)对二十多种主流语言的对象级的互操作支持,又极大地提升了c#的技术地位。和com组件廉价地互操作也为c#挣到不少分数--保持一个兼容的体系对现代软件工业非常重要,也是对广大开发人员负责任的表现。

面向组件无疑是当代软件开发的主流。c#对组件编程甚至到了"迷恋"的地步,这与6年前就出道的java不可同日而语--当然这是时代问题。c#通过属性,索引器,委派,事件,操作符重载,特征,版本等实现了其对组件编程的第一手的支持。虽然这些在java中都可以通过方法,接口或者适配器来间接地实现,但软件业的历史告诉我们这无论对编程效率或者逻辑设计都是一种极大的损伤--高级语言首先面对的是人,而不是机器。除去这些语言层面的组件支持机制,.net平台也为组件的配置,运行,管理等提供了一揽子解决方案,而为组件开发量身定做的visual studio.net更是令人兴奋,这都为c#的组件编程开辟了广阔的天地。在其他技术方面java的微弱劣势尚且可以忽略不计,但在组件编程方面java相较于c#却有着不可治愈的硬伤。尤其对于从c++和visual basic背景过来的开发人员,c#在这方面有着不可抵挡的魅力和诱惑。

鉴于xml web services在下一代企业分布式计算中的地位,我们有必要在这方面对两个语言有一个简单的交代。在xml web services的操作方面,.net平台直接在il中间语言中的内置xml支持使得c#与生俱来地成为下一代web服务的首选,这是通过api集来支持web服务的java所不能比的。在c#中,xml,soap,uddi,wsdl等底层协议被构建成了面向开发人员的组件,而java中这些仍然是jax(java xml api)等底层协议的操作函数。当然这种局面可能仅仅是时间问题,一个强大的高效的web services组件模型对java来说并不是不可逾越的鸿沟。

在语言标准化方面,微软也史无前例地做出了令人赞赏的动作。目前c#及.net平台基础构造已递交欧洲计算机制造商协会ecma,经过标准化后的c#将可由任何厂商在任何平台上实现其开发工具及其支持软件,这为c#的发展提供了强大的驱动力。而java在这方面虽有动作--jcp(java community process),但无疑只能是准标准化。在组件化软件时代拥有一门像c++一样的标准化语言,对软件界尤其是广大开发人员非常重要。

当然两个语言的全面的技术品评绝非仅仅上述几点简单的罗列比较,其后端平台(c# for .net, java for j2ee),及其编程框架的支持,各语言相关工具的实现,现有的系统基础等等都对程序设计语言的发展产生相当的影响。从纯技术角度来讲,c#无疑较java更具竞争力。争吵谁抄袭谁也没有意义--技术的发展本来就是一个相互借鉴的过程。纯技术较量也并不能决定这场论战的胜负--如果非要一决雌雄的话。软件界倒乐见竞争,经过市场锤炼的技术才能更好地为我们服务,让我们拭目以待!

上一篇:
下一篇:
 
网页模板 网站模板 网站建设 网页设计 网页设计师兼职 自助建站 ...
网站魔坊,网页模板,网站模板,免费网页模板,在线模板设计,免费建站,门户网站搭建,建站,企业网站,奇思网络,奇思,智能建站,自助建站,拖动建站,网站建设,网页设计,在线设计模板
www.wzmof.com/ 47K 2009-5-21
 
商巢...
商巢是一个真实的商业交友社区、为用户提供交友、贸易、社区、建站等服务;临渊慕鱼,不如退而结网!商巢结网行动
www.ncooo.com/ 47K 2009-5-21
 
商巢创业 门户创业 商人网络家园 魔坊建站 商业交友
商巢下的门户,门户又一独立实体与商巢合作,由商巢负责技术的更新以及硬件的支持,门户负责自己领域的市场推广以及相应的售后服务即可。 打破以往门户需要源源不断的技术、硬件投入模式,盈利模式清晰 行业门户以及门户下企业网站由网站魔坊...
mhcy.ncooo.com/ 36K 2009-5-14
 
奇思网络技术 网站建设 深圳网站建设
中小外贸企业做电子商务,需要从两点技术突围 08-01 企业网站建设 提供网站策划、网站建设、数据库开发至网络营销全套解决方案。能针对客户所处行业,结合营销特征量身订做高质量网站建设方案。 网站推广 怎样使网站的投资得到回报?这需要经验...
www.qsnet.com.cn/ 48K 2009-4-2
 
深圳艺术网
深圳艺术网,中国艺术网,中国当代艺术网,广东当代艺术网,广东艺术网,南方当代艺术网,深圳美术网,深港美术网,深港艺术网,深港当代艺术网,杜应红,深圳当代艺术创作库,深圳创库,深圳美术,深圳艺术,深圳收藏,深圳艺术收藏,深圳音乐网,深圳舞蹈...
www.szarts.cn/ 119K 2009-6-9
 
网页设计也通过人脉赚钱-技术传播
 
网页设计114 -打造中国网页设计、网站建设技术信息学习、交流、互动平台
                         打造网页设计师兼职创业平台中心