Java会赶上C#吗?[关闭]


17

今天,我发布了一个问题,询问哪种C#或Java语言更适合我学习。我有一些很好的答案。出现的一件事是,也许Java现在在新功能方面已经落后于C#。我看到了一些Web链接,并且大多数人指出了C#拥有什么以及Java没有什么。

所以我对大家的问题是Java是否会再次赶上C#?如果您要猜测5年后的状况。是否会有现在可能缺少的所有东西?Java 7呢?


7
-1,假定和假设。如果标题更改为“ Java是否在C#之后,如果更改为Java,它将如何赶上?”将更改为+1。
妮可(Nicole)

2
Java和C#会赶上Scheme吗?让我知道您何时获得匿名的一等函数,闭包和连续符。
Dietbuddha

5
@dietbuddha:我更喜欢不要用来乱码),非常感谢。
乔什·K

1
@JoshK你宁愿用它填充;和},对吗?LISP似乎使用了很多括号,因为每个函数都使用它们,并且您在其中嵌套了很多函数。
YuriAlbuquerque 2012年

Answers:


32

语言功能只是使Java和C#滴答作响的一小部分。最终,这些都是较大的J2EE和.NET生态系统的一部分。

两者都有自己的长处,并在未来5年内将变得更大。


19
+1表示“语言功能只是使Java和C#滴答
作响的一

1
是的,API和库在许多方面都更加重要。
Michael K'3

2
同意,但是问题是关于语言而不是生态系统;)
Philippe

1
我真的很讨厌对非常简短的答案进行+1表决,但是您可以在这里进行一些操作。希望看到您扩展此答案。
妮可(Nicole)

3
问题说:“哪种C#或Java语言对我来说更适合我学习”和“它将在5年后处于什么地位”,这两个方面都比生态系统更依赖于生态系统。
Shamit Verma 2011年

16

在Oracle出现问题之前,我会说的。令人遗憾的是,因为我真的很享受Java和C#在过去六年左右的时间里实现的跨越式发展。


2
您为什么认为Oracle会破坏Java?

2
我只是不认为那里的企业文化在合并功能方面没有Sun所具有的敏捷性。
Jesse C. Slicer

8
@Glenn,甲骨文与Google的诉讼向我表明,他们没有“获取”开源,这意味着大型公司不太可能选择Java进行未来开发。 groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena 2011年

Oracle可能不是完全“拧Java”,而是JVM。现在,他们有一个将两个JVM实现组合在一起的项目,他们已经从BEA和HotSpot for Sun获得了JRockit。在此期间,他们完全放弃了达芬奇机器项目。
vartec'3

2
我对Oracle感到困惑。Android套件是一种关闭,但它们有助于Linux内核,并且是Btrfs文件系统的主要开发人员。甲骨文似乎比微软更好地“开源”了开源软件,但这并没有说太多。
jonescb

6

作为一种语言,我不会大力扩展Java来增加创新,这主要是因为开源社区中处于最前沿的人更可能专注于更新的JVM语言,例如Scala,Clojure, Groovy,JRuby和JPython。

而且,Java对向后兼容性的承诺意味着,与语言的早期相比,添加语言功能从本质上来说更加困难。


5

这里最大的问号是Oracle。在过去的五年左右的时间里,Sun确实使Java的发展速度放慢了。Java社区中许多人的希望是Sun可以剥离Java或将其出售给愿意投入大量资源和精力的人。尽管甲骨文当然可以做到这一点,但它是一家大型公司,拥有许多拥有自己既得利益的团体。我的猜测只是甲骨文会让Java停滞不前,并将其主要用作专利诉讼的工具。

也许他们会以大量资金将其出售给Google,而每个人都会很高兴。它掌握在董事会和律师手中,而不是工程师和软件设计师手中。

从好的方面来说,即使没有改进,Java也是一种很好的语言,并且周围有一个很好的生态系统。虽然我个人更喜欢C#和.net世界,但是Java仍然是一个不错的选择。往前看,时间会证明一切,但到目前为止,Java一点也不坏。(日期和时间库被排除在外...哇,那些丑陋和凌乱的东西)


1
现在有第三方库可以解决日期/时间问题。
Michael K

1
Oracle使用Java和PL / SQL作为数据库中程序的语言,至少从10g开始。Oracle大量使用Java。这是否意味着他们会朝我喜欢的方向发展Java,这值得怀疑,但他们不会杀死它。
David Thornley

4

没有什么可以跟上的,所以这个问题没有道理。

仅仅因为Java不能完全复制C#并不意味着它在某种程度上是“劣等的”,而是有所不同。也可能会问C#何时会“赶上” Cobol。


23
我不同意 C#和Java在许多方面都相似,远不止C#和COBOL。我记得有一天读过“ C#是Java应该是的东西”。综上所述,我相信C#和Java是直接竞争的,并且在与这两者合作之后,我不得不说我在Java中拥有很多C#功能,但并非相反……
Philippe

您是否发现可以使用C#或Java的情况?即开发人员可以选择的情况。通常,一家商店已经具有偏好/偏见/偏见,并且在同一生态系统中的语言之间会进行选择。例如,Java和Scala之间或C#和F#之间
Shamit Verma 2011年

2
我不同意C#所做的所有设计决策,但是像Java一样,他们有意识地着手进行C ++替代,并且以他们之前的Java示例为例,他们故意添加了Java遗漏的一些关键功能。因此,如果您认为这些功能很好,那么Java必须“赶上C#”,特别是创建内联对象的能力,这样面向对象的所有东西都不会肿,我认为是const。委托是它们内置的一项新功能,而不是不能将它们作为库数据结构构建。我会说他们俩都必须赶上C ++!
Dov

@Philippe,不要被他的反例所困扰。他可以很容易地说出“ C#何时会赶上Java?”。他的观点仍然表明,Java落后于C#没有客观的原因。这都是个人喜好。
jonescb

没有人在谈论复制,但是C#具有Java正在考虑实现NOW的一些基本功能(例如lambda,它们被丑陋的对象实现模拟)。
YuriAlbuquerque,2012年

4

C#或Java是否领先于另一个问题尚待争论,但是与其专注于一种语言或另一种语言的功能,我不如着眼于语言的发展。我认为没有人会争辩这是一个事实:Java比C#古老。

更改语言工作方式的问题:

  1. 如果破坏向后兼容性,就会惹恼很多开发人员
  2. 如果您不满意您的开发人员,那么他们会改用另一种更好地支持他们的语言。因此,没有理由继续使用该语言。
  3. Java尽早做出了一些设计决策,因此不得不将语言推向市场。希望是回去填补一些空白。这些决定仍然困扰着语言,因为维护者不想违反第一点。
  4. Java开辟了许多新领域,并一劳永逸地证明了可以认真对待垃圾收集语言,并且对于大多数人而言,它们的性能还不错。
  5. C#后来加入,并学到了Java的许多经验教训-因此他们能够避免Java由于第3点而受到的某些技术限制。
  6. 新的语言功能必须以明智的方式解决实际问题。并非每种语言功能都在您要添加语言的上下文中有意义。这就是为什么尽管Java和C#相似之处,但它们仍将继续是不同的语言。

那么,C#是否比Java具有更多的语言功能?我认同。它们有用吗?我认同。这是否意味着C#比Java更好或更成熟?我不同意。它们是不同的,简单的和简单的。Java永远不会拥有C#的所有功能,因为C#永远不会拥有Java的所有功能。

Java的功能之一,即能够在Windows上编写程序并将其部署在Unix或Mac上的能力,永远不会在Microsoft的支持下直接发生。你为什么问?这不是因为微软是邪恶的(不管是真的还是真的,我不在乎)。这是因为他们吸取了Sun从未学过的一课:写一次就可以在任何操作系统和硬件上商品化。如果您在意从操作系统的销售中获利,那么您不希望轻而易举地退出并仍然可以运行应用程序。如果这样做的话,您将无法从操作系统中获利,因为总会有便宜的选择。


MS不运行Mono为何如此重要?单声道效果很好。不要小看它。
Kugel 2012年

这不是对Mono的深入了解,但并非所有.NET API都直接受支持。尽管它们取得了长足的进步,并且取得了长足的发展,但存在一些局限性,尤其是在桌面应用程序中。不知道Mono已经走了多远,或者是否可以合法地实现Winforms或WPF。但是,对于严格的服务器端工作,我很确定它是兼容的。最近没有研究。
Berin Loritsch

我认为“在Windows上编写程序并在Unix或Mac上部署程序的能力,将永远不会在Microsoft的支持下直接发生”,现在已经被
取消

当时我写的答案不是。因此,C#让Microsoft编写了可在Mac和Unix上运行的运行时和库?Mono并非直接来自Microsoft,即使它可能需要一些Microsoft开发人员在工作。我仍然对基于WPF构建的适用于Linux的桌面应用程序有疑问。仅服务器端可能可以。
Berin Loritsch 2014年

1

Java确实不需要任何新的“功能”,而C或C ++则不需要。它是面向对象开发的精心设计的语言。可能要添加的内容是创建用于执行各种任务的库。C#也是这样-添加了大多数功能以使该语言做更多的事情。我个人认为大多数功能不是必需的-OO中的指针确实实在是太笨拙了,除非您在硬件级别上工作(此时最好使用C之类的东西)。此外,如果不是不可能的话,在VM中运行将使直接访问硬件变得困难。

Unix的趋势是创建可以很好地完成件事的模块。我认为,这两个 Java和C#的进展似乎有些失控的功能蔓延。最好创建一个易于扩展的核心,而不是像框架那样的大型多用途“语言”。对我来说,Java比C#更适合此要求。


7
没有适当的lambda的语言不是可用的语言。如果该功能已添加到Java中,则我同意您的其余论点。没有这些,Java根本无法扩展,几乎无法使用。
SK-logic

2
@Craige就个人而言(意见)我不喜欢具有语法功能。我希望这门语言不会对我造成干扰-非常简单。
Michael K

1
@Michael-我无法在具有句法特征的语言和妨碍您的语言之间建立联系。仅仅因为一种语言已经说明了功能,并不意味着您必须使用它们。以C#的getter和setter方法为例。90%的时间将节省您编写数百行冗余代码的时间。不过,如果您愿意,仍然可以自己编写。
Craige

1
@Craige,如果语言具有功能,则您的工具 至少必须了解它们。Java生态系统的强大功能主要在于它的工具,这完全是因为语言的简单性。
SK-logic

1
@SK,我不明白你怎么能说带lambda的语言不可用。C没有lambda,而C ++在C ++ 0x中获得了lambda,人们使用这些语言已有数十年了。只是因为您喜欢不会使命令式编程无效的函数式编程。
jonescb

1

C#所添加的许多功能没有什么错,但是考虑到他们不断改变语言的速度,他们有意识地使Mono很难甚至不可能跟上。如果是这样,那么我说我们正在等待C#在Java可以部署到的系统范围方面赶上Java。仅在Windows上运行是不够的。


0

我不会开始讨论论坛,但是我认为Java在C#之前就已经存在了,因此C#看起来更像是Java的复制。

至于回答您的问题:Java和C#是不同的语言,因此您不能仅通过它们的功能进行比较。在Java中可以做的事情在C#中可能做不到,反之亦然。

所以最后这就像开始Windows vs Linux主题一样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.