以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 Dot NET,C#,ASP,VB 』  (http://bbs.xml.org.cn/list.asp?boardid=43)
----  [合集] C#与Java述评(zz)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=11841)


--  作者:admin
--  发布时间:11/9/2004 2:26:00 AM

--  [合集] C#与Java述评(zz)


发信人: Nineteen (-_-#!), 信区: DotNET
标  题: [合集] C#与Java述评(zz)
发信站: BBS 水木清华站 (Tue Mar  2 09:37:31 2004), 站内

☆─────────────────────────────────────☆
   Erratic (漂砾) 于  (Fri Mar  1 17:33:54 2002)  提到:


C#与Java述评  
(2002.03.01)   来自:CSDN   李建忠   
  
  
  
   
  
南京邮电学院 李建忠(lijianzhong@263.net.cn)

  自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更具竞争力。争吵谁抄
袭谁也没有意义--技术的发展本来就是一个相互借鉴的过程。纯技术较量也并不能决定这
场论战的胜负--如果非
要一决雌雄的话。软件界倒乐见竞争,经过市场锤炼的技术才能更好地为我们服务,让我
们拭目以待!
  
  


☆─────────────────────────────────────☆
   unix90 (天天睡觉) 于  (Sun Feb 22 21:18:26 2004)  提到:



瞎扯

【 在 Erratic (漂砾) 的大作中提到: 】
∶C#与Java述评  
∶(2002.03.01)   来自:CSDN   李建忠   
∶南京邮电学院 李建忠(lijianzhong@263.net.cn)
∶  自C#诞生之日起,关于C#与Java之间的论战便此起彼伏,至今不辍。抛却Microsoft
∶与Sun之间的恩怨与口角,客观地从技术上讲,C#与Java都是对传统面向对象程序设计在
∶组件化软件时代的革新之果,可谓殊途同归。虽说两个语言有着"90%的重叠",但那另外
∶"10%的较量"也往往能够左
∶右一个天平的方向。本文将携90%之共,论10%之异,对两个语言做纯技术品评。文章不涉
∶及两个语言的公司,市场等台面后的事情--虽然这往往也会影响人们对编程语言的选择。
∶也不预备得出谁是谁的Killer,读者应该选择谁的问题。"语言选择乃艺术而非技术问题"
∶,业界早有定论,无需
∶...................



☆─────────────────────────────────────☆
   Buffon (哲) 于  (Sun Feb 22 21:39:45 2004)  提到:


【 在 unix90 (天天睡觉) 的大作中提到: 】
∶没瞎扯




☆─────────────────────────────────────☆
   znzn (除了你我一无所有) 于  (Sun Feb 22 22:19:07 2004)  提到:

小伙儿,虚心才能学到东西


【 在 unix90 (天天睡觉) 的大作中提到: 】
∶瞎扯




☆─────────────────────────────────────☆
   DRAGONESE (狗三斤◎做人要厚道) 于  (Mon Feb 23 13:20:32 2004)  提到:


我觉得作者说的挺客观的

【 在 unix90 (天天睡觉) 的大作中提到: 】
∶瞎扯




☆─────────────────────────────────────☆
   LakeLuna (Laker) 于  (Mon Feb 23 20:33:29 2004)  提到:


至少人家微软钱多,再者人家开发的平台也很强


☆─────────────────────────────────────☆
   yyyyyu (zig) 于  (Tue Feb 24 13:05:03 2004)  提到:

sun的钱也不少.
而且j2ee明显比.net成熟的多
【 在 LakeLuna (Laker) 的大作中提到: 】
∶至少人家微软钱多,再者人家开发的平台也很强




☆─────────────────────────────────────☆
   Elric (钻石恒久远,一颗永留传) 于  (Wed Feb 25 14:48:02 2004)  提到:

想跨平台还是得选java
windows是微软的命根子.net不知什么时候才能真正的跨平台



☆─────────────────────────────────────☆
   Birdshome (雀巢) 于  (Wed Feb 25 15:10:07 2004)  提到:

不管出于商业上还是感情上,要微软去支持完备的跨平台是不可能的嘛

【 在 Elric (钻石恒久远,一颗永留传) 的大作中提到: 】
∶想跨平台还是得选java
∶windows是微软的命根子.net不知什么时候才能真正的跨平台




☆─────────────────────────────────────☆
   flier (小海 [寻找风车中]) 于  (Wed Feb 25 15:20:15 2004)  提到:

那要看你如何定义“跨平台”了
对MS来说,跨平台就是指跨越所有支持Windows的平台
从Pocket PC到Tablet PC,从IA32到AMD64
至于Linux/Mac,MS哪里有空管他们的死活,呵呵
【 在 Birdshome (雀巢) 的大作中提到: 】
∶不管出于商业上还是感情上,要微软去支持完备的跨平台是不可能的嘛




☆─────────────────────────────────────☆
   Elric (钻石恒久远,一颗永留传) 于  (Wed Feb 25 15:25:38 2004)  提到:

客户端可以这么说
在服务端windows现在最多也就50%的市场吧
其他平台如solaris, hp-ux还是要考虑的


【 在 flier (小海 [寻找风车中]) 的大作中提到: 】
∶那要看你如何定义“跨平台”了
∶对MS来说,跨平台就是指跨越所有支持Windows的平台
∶从Pocket PC到Tablet PC,从IA32到AMD64
∶至于Linux/Mac,MS哪里有空管他们的死活,呵呵
∶【 在 Birdshome (雀巢) 的大作中提到: 】
∶: 不管出于商业上还是感情上,要微软去支持完备的跨平台是不可能的嘛





☆─────────────────────────────────────☆
   flier (小海 [寻找风车中]) 于  (Wed Feb 25 15:45:27 2004)  提到:

指望CLI标准和第三方实现吧,虽然mono实用化还遥遥无期
【 在 Elric (钻石恒久远,一颗永留传) 的大作中提到: 】
∶客户端可以这么说
∶在服务端windows现在最多也就50%的市场吧
∶其他平台如solaris, hp-ux还是要考虑的




☆─────────────────────────────────────☆
   Elric (钻石恒久远,一颗永留传) 于  (Wed Feb 25 16:18:39 2004)  提到:

请教一下,单就语言来说,C#比java好在哪里?
我知道的只有delegate  



☆─────────────────────────────────────☆
   flier (小海 [寻找风车中]) 于  (Wed Feb 25 16:39:32 2004)  提到:


你看一下J2SE 1.5 Tiger的新特性列表吧
绝大多数都是C#的优点,呵呵
【 在 Elric (钻石恒久远,一颗永留传) 的大作中提到: 】
∶请教一下,单就语言来说,C#比java好在哪里?
∶我知道的只有delegate  




☆─────────────────────────────────────☆
   Birdshome (雀巢) 于  (Wed Feb 25 16:48:28 2004)  提到:

ASP.NET 方面要跨平台(广义的平台),是比较容易的,

就看微软愿不愿意了,如果愿意,技术上对mono倾斜一下,

很快就能有可用的非Windows的ASP.NET平台。

而且B/S的S正是Java的猖狂的地方,遏制了Server端,

java想翻身都难了。Java不错,但并不应该有目前的地位,

他的发展基本印证了山中无老虎,猢猴称霸王。


【 在 flier (小海 [寻找风车中]) 的大作中提到: 】
∶指望CLI标准和第三方实现吧,虽然mono实用化还遥遥无期




☆─────────────────────────────────────☆
   Elric (钻石恒久远,一颗永留传) 于  (Wed Feb 25 17:04:01 2004)  提到:

跨平台不是很容易的事吧,java跨了这么多年,还是不彻底


【 在 Birdshome (雀巢) 的大作中提到: 】
∶ASP.NET 方面要跨平台(广义的平台),是比较容易的,

∶就看微软愿不愿意了,如果愿意,技术上对mono倾斜一下,

∶很快就能有可用的非Windows的ASP.NET平台。

∶而且B/S的S正是Java的猖狂的地方,遏制了Server端,

∶java想翻身都难了。Java不错,但并不应该有目前的地位,

∶...................



☆─────────────────────────────────────☆
   flier (小海 [寻找风车中]) 于  (Wed Feb 25 17:27:47 2004)  提到:

服务器端J2EE至少领先了.NET一两年时间
在中小型应用方面还显露不出来,甚至.NET占优
而大型应用上.NET目前还很不成熟,架构不完整 :(
【 在 Birdshome (雀巢) 的大作中提到: 】
∶ASP.NET 方面要跨平台(广义的平台),是比较容易的,
∶就看微软愿不愿意了,如果愿意,技术上对mono倾斜一下,
∶很快就能有可用的非Windows的ASP.NET平台。
∶而且B/S的S正是Java的猖狂的地方,遏制了Server端,
∶java想翻身都难了。Java不错,但并不应该有目前的地位,
∶他的发展基本印证了山中无老虎,猢猴称霸王。




☆─────────────────────────────────────☆
   oldwatch (一条叫java的鱼⊙业将立,家难成) 于  (Wed Feb 25 18:03:00 2004)  提到:


主要就是有了个鬼见愁的ejb:-)
企业级应用就高了那么一点

小型项目中,java得到了很多开源项目支持
补上了不少的短板

【 在 flier (小海 [寻找风车中]) 的大作中提到: 】
∶服务器端J2EE至少领先了.NET一两年时间
∶在中小型应用方面还显露不出来,甚至.NET占优
∶而大型应用上.NET目前还很不成熟,架构不完整 :(




☆─────────────────────────────────────☆
   Birdshome (雀巢) 于  (Wed Feb 25 21:18:55 2004)  提到:

争论 j2ee 和 .net 没什么意思,但 java 能一针见血的好处也就是跨平台,

这是一个良性循环,java 可以跨平台,更多的人研究学习它,促进了 java,

反过来又放大了跨平台的优点,其实跨平台就是 bull shit,深层的优化只能

针对专有平台,跨的越多,羁绊越多。

发起这样的讨论和争论目的很简单,就是希望让更多的人来琢磨 .net,

C# & .NET Framework 是真正的程序员生产力表现工具,j2ee 和以后希望

能完善强大起来的 .net 解决方案是设计时生产力表现。

java <-> C#(VB,JS,Managed C++等),j2ee <-> .net,是一个量变到质变,

他需要更多的人去学习和相互提高来作为基础。

所以如果 M$ 能出非 win 平台下的 asp.net framework,在击败 java 上

可以说是至关重要的一步,但这样的副作用就是,同时捅了 Windows 一刀。

用户其实很少关心你使用技术,决定使用 linux 很多时候是用户觉得便宜,

但要做到企业级,linux 及其相关解决方案也是很贵的。

一年多以前,人们对 linux 的服务器市场很看好,现在 win2k3 发布了,

看不到 linux 神化的继续,反而 win 平台更加大步挺进了 server 市场,

有了做服务器的积累,就是为已后进入大型企业级关键业务铺路嘛。


【 在 flier (小海 [寻找风车中]) 的大作中提到: 】
服务器端J2EE至少领先了.NET一两年时间
在中小型应用方面还显露不出来,甚至.NET占优
而大型应用上.NET目前还很不成熟,架构不完整 :(
【 在 Birdshome (雀巢) 的大作中提到: 】
∶ASP.NET 方面要跨平台(广义的平台),是比较容易的,
∶就看微软愿不愿意了,如果愿意,技术上对mono倾斜一下,
∶很快就能有可用的非Windows的ASP.NET平台。
∶而且B/S的S正是Java的猖狂的地方,遏制了Server端,
∶java想翻身都难了。Java不错,但并不应该有目前的地位,
∶他的发展基本印证了山中无老虎,猢猴称霸王。




☆─────────────────────────────────────☆
   DotNETer (ldstr "Excelly") 于  (Wed Feb 25 21:50:41 2004)  提到:


java是很好的
但是个人感觉还是.net更好
目前他们在互相学习
都在进步
这对所有的developer来说都是好事
虽然我倾向于.net
但我也愿意看着java强大
这样才有动力,才有意思嘛

这种讨论太多了
没什么
不过我很反感的事情就是
有些人在对待工具的态度上带有太多的感情和成见
有时候甚至是不可理谕的

【 在 Birdshome (雀巢) 的大作中提到: 】
∶争论 j2ee 和 .net 没什么意思,但 java 能一针见血的好处也就是跨平台,
∶这是一个良性循环,java 可以跨平台,更多的人研究学习它,促进了 java,
∶反过来又放大了跨平台的优点,其实跨平台就是 bull shit,深层的优化只能
∶针对专有平台,跨的越多,羁绊越多。
∶发起这样的讨论和争论目的很简单,就是希望让更多的人来琢磨 .net,
∶C# & .NET Framework 是真正的程序员生产力表现工具,j2ee 和以后希望
∶能完善强大起来的 .net 解决方案是设计时生产力表现。
∶java <-> C#(VB,JS,Managed C++等),j2ee <-> .net,是一个量变到质变,
∶他需要更多的人去学习和相互提高来作为基础。
∶所以如果 M$ 能出非 win 平台下的 asp.net framework,在击败 java 上
∶可以说是至关重要的一步,但这样的副作用就是,同时捅了 Windows 一刀。
∶...................



☆─────────────────────────────────────☆
   flier (小海 [寻找风车中]) 于  (Wed Feb 25 22:06:53 2004)  提到:

sigh...虽然也知道在.NET版说这些不好
但是实际情况就是如此,.NET毕竟还只是一个半成品
假以时日可能可以全面赶上甚至超越java
但就目前来说,企业级应用上特别是框架性的方面
还是落后j2ee至少一两年时间,毕竟ms进入这个领域太晚
java提前发展好多年积累下来的东西不是一朝一夕能够赶上的
你多看看国外的关于这方面的讨论就会发现
绝大多数有意义的研究和讨论还是集中在java平台上
不要被国内某些不良媒体的抄作搞昏了头脑 :)

至于什么量变质变,呵呵,我就不好多说什么了 -_-b
【 在 Birdshome (雀巢) 的大作中提到: 】
∶争论 j2ee 和 .net 没什么意思,但 java 能一针见血的好处也就是跨平台,
∶这是一个良性循环,java 可以跨平台,更多的人研究学习它,促进了 java,
∶反过来又放大了跨平台的优点,其实跨平台就是 bull shit,深层的优化只能
∶针对专有平台,跨的越多,羁绊越多。
∶发起这样的讨论和争论目的很简单,就是希望让更多的人来琢磨 .net,
∶C# & .NET Framework 是真正的程序员生产力表现工具,j2ee 和以后希望
∶能完善强大起来的 .net 解决方案是设计时生产力表现。
∶java <-> C#(VB,JS,Managed C++等),j2ee <-> .net,是一个量变到质变,
∶他需要更多的人去学习和相互提高来作为基础。
∶所以如果 M$ 能出非 win 平台下的 asp.net framework,在击败 java 上
∶可以说是至关重要的一步,但这样的副作用就是,同时捅了 Windows 一刀。
∶...................



☆─────────────────────────────────────☆
   frogonline (青蛙在线) 于  (Wed Feb 25 22:23:20 2004)  提到:

看到一个关于JAVA跨平台的比喻,不是我说的,不要踢我,说的是JAVA的跨平台就象为世界上所有的MAN定做相同SIZE的CONDOM

【 在 flier (小海 [寻找风车中]) 的大作中提到: 】
∶sigh...虽然也知道在.NET版说这些不好
∶但是实际情况就是如此,.NET毕竟还只是一个半成品
∶假以时日可能可以全面赶上甚至超越java
∶但就目前来说,企业级应用上特别是框架性的方面
∶还是落后j2ee至少一两年时间,毕竟ms进入这个领域太晚
∶java提前发展好多年积累下来的东西不是一朝一夕能够赶上的
∶你多看看国外的关于这方面的讨论就会发现
∶绝大多数有意义的研究和讨论还是集中在java平台上
∶不要被国内某些不良媒体的抄作搞昏了头脑 :)
∶至于什么量变质变,呵呵,我就不好多说什么了 -_-b




☆─────────────────────────────────────☆
   flier (小海 [寻找风车中]) 于  (Wed Feb 25 23:12:56 2004)  提到:

跨平台本来就只是一个商业概念而已,
对大型系统来说这只是诸多方面的一个而已

【 在 frogonline (青蛙在线) 的大作中提到: 】
∶看到一个关于JAVA跨平台的比喻,不是我说的,不要踢我,说的是JAVA的跨平台就象为世界上所有的MAN定做相同SIZE的CONDOM




☆─────────────────────────────────────☆
   few (烦恼越来越少) 于  (Wed Feb 25 23:18:31 2004)  提到:

这种讨论真是无聊
j2ee不是什么好东西,.net也不怎么样
倒是java和c#还算不错,可惜只是作为语言来讲

【 在 flier (小海 [寻找风车中]) 的大作中提到: 】
∶sigh...虽然也知道在.NET版说这些不好
∶但是实际情况就是如此,.NET毕竟还只是一个半成品
∶假以时日可能可以全面赶上甚至超越java
∶但就目前来说,企业级应用上特别是框架性的方面
∶还是落后j2ee至少一两年时间,毕竟ms进入这个领域太晚
∶java提前发展好多年积累下来的东西不是一朝一夕能够赶上的
∶你多看看国外的关于这方面的讨论就会发现
∶绝大多数有意义的研究和讨论还是集中在java平台上
∶不要被国内某些不良媒体的抄作搞昏了头脑 :)
∶至于什么量变质变,呵呵,我就不好多说什么了 -_-b




上一篇
返回上一页
回到目录
回到页首



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms