-- 作者: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 上一篇 返回上一页 回到目录 回到页首
|