C#就是Java只不过差了一点点

04-05-29 java__pro
转载 zdnetchina

C#就是Java只不过差了一点点

http://www.zdnet.com.cn/developer/tech/story/0,2000081602,39193401,00.htm

C#和Java都是很不错的语言。他们通过类似的方式达到了类似的目的,尽管C#比Java多出来一些和句法相关的东西,例如foreach关键字和一些更加让人高兴的扩展/实现架构。不幸的是,这些改进的光芒被削弱的东西掩盖掉了。在本文里,我将比较两种语言,并尽量避免深入到JVM和CLR层。

Java:无可争辩地具有C++所有的精华

在比较Java和C#的时候,你不可能不注意到它们诸多的相似之处,这在某种程度上要归结于它们共同的来源:C和C++。但是,当Gosling和他的同事们坐下来创造Java的时候,他们不仅吸取了C++的能力,而且更重要的是,他们减掉了一些无用特性,后者让C++更容易出错误而且更难学习。C#的设计者加入了很多C++的特性,而Java也加入了这些特性,但是C#却没有去掉C++的最糟糕的一些特性。其结果就是这样一门语言,它仍然为所有人提供了所有的特性,但其结局是内部冲突不断,而且过于复杂。

散漫的句法缺陷

最容易找出的错误是流控制和句法。C#提供了goto command,将其作为更改程序执行点的机制。自从Edsger W. Dijkstra在1968年出版了他的《关于Go to陈述式害处的考虑(Go To Statement Considered Harmful)》。Goto语句导致代码难以调试,而且很难被测试工具处理。

在另一种不同的情况下,操作符过载同样也有很大问题,只不过层次不一样罢了。当“+”根据操作数的类型而代表任何东西的时候,代码的功能就不再透明,难以预料的副作用就会发生。

C#在安全上的削弱

C#有一个用于将代码区域标示为不安全的简单机制。在这些不安全的区域里,Java以及后来的C#安排到位了一些安全措施,用以防止程序员直接修改内存位置,以及使用点运算,但是这些措施是值得怀疑的。在使用具有垃圾清理功能的高级语言时,如果下到内存地址这一层,就会把对象/内存之间有意作出分离弄混。错误就会容易出现,调试成了恶梦,缓冲区溢出再次抬头,C和C++里著名的安全漏洞再次现身。

C#还允许对主机系统上本机库的简单访问。这个与非.NET对象相结合的访问同Java本机接口(JNI)所提供的功能类似,但是它更加危险。JNI被设计用来小心地限制Java代码以及本机代码同已定义好的接口之间的交互操作,.NET使得调用本机对象文件变得极其简单,结果导致开发人员在做这的时候,无法意识到他们在这一过程中把平台的可移植性也扔出了窗外。

SOAP的集成

C#,及其更大的扩展.NET,已经同SOAP Web服务紧密地集成在一起。SOAP是使用XML指定参数和结果值来进行远程过程调用的好标准,但是它并不是唯一的方式。利用用于Web服务的外部库能够允许Java开发人员轻易地更改其Web服务的风格,使其成为SOAP、XML-RPC,或者什么还没有发明的东西。当然,C#的开发人员总是能够选择将外部库用于SOAP的Web服务,但是由SOAP标准的紧密集成所造成的限制要比它能够做的东西更多。

所有者的恐慌

C#里最令人恐慌的特性可能就是其所有者了。微软已经为将C#和.NET用于非Windows平台进行了精心的展示,但是这在很大程度上还只是作秀。其用于非Windows平台的CLR是问题多多,错误多多。它通过ECMA标准化过程来运行C#――这一步连Sun也不敢在Java上迈出。其担心来自于微软对此可能封锁的程度,如果它愿意的话。微软已经申请了一个专利,以排斥他人编写第三方的CRL,例如Mono计划。如果微软决定对免费的C#和.NET社区施压,它就有能力拿票子和法律的大棒把其开发活动赶回到Win32平台――当然这也不是它想看到的情况。

而Java语言则相反,不是ECMA标准的,真可惜Sun没有遵从这一标准。但是,它是可以实现的,而且没有专利的阻碍,其虚拟机和核心类库都有来自第三方的开放和封闭源代码的实现。C#看起来是免费的,其实不然,而Java看起来限制很多,但是它能够依据法律通过免费的途径来实现。

最后,我从来都没有想到我会说这个,但是Java具有更好工具的支持,即使是在考虑到集成开发环境(IDE)的情况下。Visual Studio .NET是一个很不错的IDE。它代表了多年的努力,而且特性很丰富。但是,Eclipse IDE包括了对Java的支持,它在稳定性、易用性和所提供的特性上超过了Visual Studio。IBM对Eclipse的贡献举足轻重,而且如果你信奉原来的软件格言“创建一个扔掉的(Build one to throw away)”,那么你可以把Visual Age作为第一个(被抛弃掉了的)尝试。对于使用C#的开发人员来说幸运的是,Eclipse的.NET版本正在开发中。

不是那么差,但是还不是Java

客观一点评价,C#里并没有什么很恐怖的东西。它没有Visual Basic里的那些很恐怖的东西,而且它事实上也没有继承像C里的一些东西,而这些东西会让开发人员开枪却打中自己脚。但是,底线是,C#并没有做很多东西,如果有任何东西比Java更好的话。它在某些方面很明显的要更差。在这两个非常类似的语言之间作选择的时候,请选择稍稍更好且经历风雨的那个:Java。

         

2
banq
2004-05-30 09:20
不错,Java的AOP目前C#还没有引入,台湾的那个著名Borland专家曾经写文章说C#领先于Java,那是明显误导,.NET 2004版是出不来,开发者无缘享用最新思想和最新技术,而Java不一样,Java开源社区不断推出最新思想实现的产品,当你拿到这些与世界思潮同步的热红薯时,不知你心里是如何的激动,至少我经常难以入眠。

banq
2004-05-30 18:29
反驳那个帖子几个跟贴,可见很多程序员很糊涂:

>明显是枪手.java的速度太慢了.而C#的速度非常快,而且他的特性和java,几乎没有什么区别.我就是把C#当一个速度很快的java用.

要知道,基于虚拟机的语言都慢,这位发言人还不知道下面一个流行大势:片面追求性能的时代已经过去了.....

可见平时,各种媒体宣传对这种悄然大势都没有提及,致使很多程序员用的是先进设施,思想和思维都很落后。也是中国重项目,盲目跟风的怪现象吧。

>什么垃圾理论。C#怎么是抄袭JAVA了。

C#抄袭Java是有目共睹,微软自己都承认,只不过改成中性词语:继承和吸取。这个基本历史都会怀疑,如何和这样的程序员沟通?

banq
2004-05-30 19:13
关于“微软思维”

“微软思维”是我创造出来的,我不是用来贬低微软或其它什么目的,只是用来表达长期以来中国程序员接受微软体系灌输后造成的一种状态。

“微软思维”表现有下列特征:

1. 程序员表现是:懒、等、靠

懒于学习微软以外的东西,或者新思想;“等”就是等着微软产品来喂;“靠”当然就是靠着微软吃饭。这样下去,最终会毁了自己,以前吃大锅饭时,很多工人都是这样,结果,最后下岗的是自己。

相机刚刚出来时,不是人人会拍,所以拍照我们要到照相馆,有了傻瓜相机后,除非所谓艺术照,我们已经不需要照相馆了。

很多软件公司应标方案几乎是微软产品说明书,这样造成的后果是什么?最终客户会发生疑问:需要要你中间者做什么?

2. 项目表现是:使用先进简易的工具,开发出落后思维的系统

很抱歉,我使用落后不是为了攻击谁,但是确实这样的系统最终残害了软件业本身,看看那么多源代码下载网站,触目惊心的各种各样基于微软体系的源代码,这些源代码可能会满足客户一时之需,但是<b>它是企业系统的“木马病毒”</b>,Windows已经把它自身顽疾的“木马病毒”转移到了中国企业信息系统中,危害之大,这是几个金山毒霸能够防治的吗?

3. 程序员最终症状是:固执,思维奴役化,麻木,丧失自我。

在技术由于追随微软多年,技术上固步自封,在微软.NET没有推出或推出过程中,不学习Java/Linux其它知识,等待.NET将方便快速的工具送上门来,进而贻误软件公司技术定位时间,从而可能导致公司在竞争中失败。

思维奴役化,麻木,这些就不多说了,有攻击和谈论政治之嫌疑,不过这确实是技术路线政治。

丧失自我主要表现是:不会自主选择了,有机会接触到Java时,完全没有了主意,到处打听有没有包办一起的完美技术,当发现Java技术总是有弱点时,表现迟疑,拿不定主意,无法把握事物的主要点和次要点。当然,这样的程序员在技术上表现为无主见,在现实生活中也可能是这样,请注意,不要以为很固执,喜欢顶牛的人就是有主见,我认为那是最没有主心骨的表现。

最后,请注意,上述情节纯属虚构,请勿对号入座。

SadHeart
2004-05-31 08:32
完全统一关于banq的微软思维一说。的确,程序员在microsoft下面,变得越来越懒惰。

猜你喜欢
18Go 1 2 3 4 ... 18 下一页