我整天都在编写C#,但是最近为了爱好的东西跳转到Java,比如为BlackBerry和Android平台编写代码.这段时间我一直认为,就语言特征而言,Java和C#是彼此的双胞胎.
无论如何,我发现Java相当于C#1.1或类似的东西.在Java中,我必须编写两次我在C#中编写的代码.像对象初始化器,lambda,属性为上帝的缘故,是否会出现在Java中?我试图浏览JSR的东西,但找不到任何东西.
Java根本没有跟上吗?或者我只是不按照预期使用它?
我认为你是对的,Java没有很多C#引入的方便的新功能.许多新的C#特性只是编译器技巧(属性,对象初始化器,扩展方法),您可以在C#或Java中手动完成.
Java人员可能还没有引入这些新功能,因为他们可能更喜欢保持语言尽可能简单和向后兼容.
我不得不说这些天我更喜欢写C#.
我会说,是的,Java没有跟上.微软长期以来一直在努力研究Java(和C++),并弄清楚他们有什么烦恼,缺少哪些功能,并修复了C#后续版本中的许多功能.
此外,Java设计者似乎尽量保持他们的语言和解析器尽可能简单,而C#设计者不必担心语法糖:属性,委托,lambdas和LINQ都是这样的例子.正如你已经注意到的那样,一勺语法糖使语言更容易下降.
Java肯定落后了,虽然我说它比C#1.1更接近C#2.0--例如,它有泛型,尽管它们与C#中的有些不同.
我很失望地听到许多提议的语言功能已被删除用于Java 7(特别是关闭),但随后Project Coin出现了 - 所以至少我们可能会有一些小功能值得期待.
我很快就看不到Java在语言方面赶上C#了 - 他们有更多的语言包袱,这使得更难以改变语言.尽管听起来有些微不足道,但是检查异常会给方法签名增加一个额外的"轴",这使得某些东西(比如闭包)比其他东西更棘手.
(当然C#4.0也可以看到......)
流行语言越老,其代码库就越大,语言的更改就会以更保守的方式进行,以免破坏现有的代码库,修复起来会很昂贵.
Java是较旧的语言之一.C#相对较新,可以更加彻底地改变.与C和C++相比,C和C++十年来没有变化.
如果您真的想要新代码的新语言功能,请尝试另一种与Java(Groovy,Scala,Clojure)互操作的基于JVM的语言.
我认为问题的一部分是经济问题.当Sun成为市场领先者时,Java出现并不是偶然的.他们的股票在2000年3月创下历史新高,受到互联网公司购买的所有服务器的推动.
当泡沫破裂,所有这些服务器都进入市场时,需要花费很长时间才能解决过剩问题.Sun还没有从中恢复过来.商用服务器功耗的增加削弱了专业RISC芯片和Solaris曾经拥有的优势.除非你是一个经济大国,否则你不可能成为一个伟大的军事大国; 作为这种规模的创新者也需要现金.
他们失去了许多曾经为公司提供动力的人才(比如Bill Joy).
Sun的底层是一家硬件公司.Java的策略,特别是在服务器端,是它有助于推动硬件销售.
我认为Java的变化速度因此而受到影响.
微软继续开发C#,因为收入继续涌入,Anders仍然与他们合作,他们是一家最终通过该产品赚钱的软件公司.这就是他们现在领先的原因.