什么语言可以替代Java?

4
我可能提出了一个过早的问题,或许只是因为我太担心了,但是Oracle处理Java的方式并不是很有前途。我是一个爱上Java的书呆子,从第一眼就迷上了它,并且在我的个人/自由职业项目中一直使用它,但现在我正在考虑寻找替代品。
我也精通C#/VB.NET,但我正在寻找更像这样的东西:
  1. 开源
  2. 编译型
  3. 跨平台
  4. 面向对象
  5. 大型标准库
  6. 广泛的文档
  7. Web开发是一个重要的加分项
我正在考虑妥协:Python/Django用于Web开发(或PHP),Qt用于厚客户端开发。有更好的想法吗?

11
我会直接说,你在毫无理由地惊慌失措。 - Justin Ardini
1
为什么不使用Java的开源实现? - Falmarri
3
我有兴趣离开JVM - FearUs
1
@aaa:也许我很无知(所以请告诉我 - 我会很感兴趣看看有什么),但我不知道有多少C++/boost用于Web开发(OP的第7点)。 - FrustratedWithFormsDesigner
1
据我所知,没有一种编程语言能够满足所有列出的要点(根据编译的定义)。除了 Web 开发(被列为主要优点)外,C++ 可以胜任。 - Anycorn
显示剩余9条评论
10个回答

15

不久前,我决定远离JVM。我开始学习Python,虽然我离专家/大师的水平还很远,但我并不后悔。我没有选择C#(我考虑过),因为我认为它更多是相同的东西。我已经了解(而且喜欢)C ++,所以Python似乎是一些新的东西,这正是我在寻找的。

它满足了许多您的要求。特别是,我决定不学习PHP,因此Python的Web框架非常适合我。

更不用说,Python拥有一个庞大的社区(也可参见这里),总是热心于帮助和教导,这对我来说非常重要。

那只是我的个人看法。


@aaa 我认为这不算编译。严格来说,它确实是编译,但大多数情况下,人们说“编译”时真正意思是“本地编译”。 - user395760
2
选择Python,别考虑PHP!我是认真的。我不得不离开PHP,因为它只是一堆乱七八糟的东西。+1 给Python。 - dwich
@del 当然,我只是想澄清一下。就我个人而言,很长一段时间我都认为Python是解释型的 :-( - Anycorn
4
此外,您还有Jython,因此您可以随时悔改并回来。 - Thorbjørn Ravn Andersen
大多数Java实现也会编译成(JVM)字节码 - 因此按照同样的论点,您也不能称之为Java编译。 - Dave Kirby
显示剩余3条评论

6

也许值得看一下其他JVM语言- Clojure和Scala是我个人认为最有前途的两种语言。

是的,您在JVM上运行,但与Java语言相比,您非常独立,如果不想使用任何Sun/Oracle实现,可以自由选择。

话虽如此-我认为您对Java的担忧有些过多,太多的参与者(包括Oracle!)已经投入了太多,不会让它偏离轨道太远。


当我说Java的时候,我是指JVM…所以谢谢您的想法,但不是这样的 :) - FearUs

3

试试Scala。它看起来非常优雅和有前途。以面向对象的方式,以非常简洁的方式与Java共享很多特性。


1
该OP评论说:“我有兴趣离开JVM”。 - Justin Ardini
1
Scala不是运行在JVM上吗? - Tom
1
确切地说,@Tom,我指的是JVM。 - FearUs
Scala 也有一个 CLR 版本(虽然我不知道它有多新或稳定)。 - Mike
我的理解是,.Net 版本的 Scala 只有在微软支付某人进行开发时才会得到更多或更少的关注。 - Tom Hawtin - tackline

2

你说的一切都指向C#,除了开源这一点。

为了解决这个问题,有一个叫做Mono的东西。


5
你试过在Linux上使用Mono吗?
  • Mono并不是真正的开源实现!!你见过其他开源CLR实现吗?没有,因为微软是M$。
  • 如果没有.NET的所有“酷”库,Mono就毫无用处:WCF、WWF、WPF等等。 抱歉,这只是我的观点!
- FearUs
同意@FearUs的观点,使用Mono可以获得开源的优势,但是你会失去大型标准库的支持。 - Yishai

2
你可以尝试使用D语言。我对它为什么是一种很棒的语言的简短描述是,它的通用编程/编译时内省/模板元编程功能足够好,可以给你几乎和鸭子类型语言一样的灵活性,同时它的执行速度和静态类型检查可以与C++和C#相媲美甚至超过它们。
我认为它非常符合你的要求。
开源:参考DMD实现的前端是开源的(由于作者控制之外的限制,后端不是)。目前正在进行工作,将参考前端与开源后端(如LLVM(LDC)和GCC(GDC))连接起来。对于D1(语言的旧版本),LLVM移植相当成熟。
编译:D旨在编译为本机机器代码,即原始、难以理解的十六进制数。
跨平台:参考DMD编译器支持x86 Windows、Linux、Mac OS X和FreeBSD。GDC和LDC可能会支持更多的CPU架构。
面向对象:D不是Ruby中所有东西都是对象或Java不支持任何其他范例的“纯”面向对象语言。然而,它完全支持Java风格的OO作为语言的子集,以及过程式和函数式编程。
大型标准库:D1有Tango,符合条件。D2有Phobos,按现代标准来说还不算“大”,但比C或C++的标准库更大。然而,最近对贡献产生了很大兴趣,Andrei Alexandrescu(其主要设计师)已经接受了几位新贡献者,包括我自己。
广泛的文档:数字玛斯网站上的标准库和语言文档相当完善。还有Andrei Alexandrescu的书《D编程语言》。
Web开发:这是一个承认的弱点。D目前没有一个好的Web框架,但其本地Unicode支持和优秀的通用编程支持应该使编写一个相对容易。

1

我也希望出现另一种类似Java的技术。最近我一直在使用Flex/Actionscript。虽然我非常喜欢它,但是Actionscript技术严重缺乏Java的优雅。Adobe可以编写一些很好的跨平台API,但他们没有足够的资本来构建优雅的语言和编译器。我也尝试过Ruby,但Ruby的VM真的很差。在与其他技术的暧昧之后,我回到了Java,我认为这是因为这种语言已经足够好了,而JVM是迄今为止最好的。

那么你想留在JVM上还是完全离开JVM?留在JVM上有很多选择:JRuby、Scala、Groovy、Javascript、Clojure都是大牌。然而,有很多优秀的语言可以利用JVM的特性。

如果离开JVM,仍然有像Python、Ruby和Erlang这样的好选择。但是你会失去JVM的一些好功能,比如性能(非常重要),以及需要速度时可以切换到像Java这样的好语言。其他语言意味着使用C或根本不使用。

我终于不再担心Java的未来了。Sun已经尽其所能地搞砸了它,但它仍然表现得相当不错。我认为开源对Java的成功有比Oracle或Sun更大的影响力。


1
我还不能发表评论,所以我发了一个与Python讨论相关的答案。虽然Python没有编译成机器码,但有一个名为Cython的Python-to-C编译器,它可以编译几乎所有有效的Python代码——闭包在最新的开发版本中终于得到支持。这对Python社区的某些部分产生了很大的影响,例如,我最近参加了Euroscipy会议,超过一半的演讲提到了Cython。

0

同时使用Cython可以兼顾两个世界的优点,既可以使用Python编程,也可以使用C和C++编程,当然还可以编译代码并能够立刻使用Python和C/C++库。如果您不喜欢C++语法,Cython语法是Python语法及其扩展。

链接文本


0

个人而言,我不太喜欢PHP,但它确实满足您的所有要求。它没有官方支持编译,但有Hip Hop项目可以将PHP编译成C代码,Facebook目前正在领导此项目。

话虽如此,我强烈不建议您使用它 :)


0

C#是唯一能够满足您需求并且不会感到过时或受限于有限的库的编程语言。对于开源/非Windows平台,可以使用Mono。它是CLR中最重要的部分的成熟实现。

一些东西(如WPF、WCF等)在Mono中“缺失”,但这些并不是平台的一部分,而是Windows特定的专有工具包。其中一些正在慢慢地在Mono中实现,而有些则没有。从Java转换过来,您不会错过它们,因为您正在寻找一个平台和良好的标准库来构建,而不是GUI工具包或华而不实的通信框架。

就像Java提供类似的功能水平一样,C# + CLR是构建应用程序的最佳选择。


嗯.. 你尝试过Mono吗?我的意思是你在一个针对Linux和Windows的真实项目上尝试过它吗?Mono + GTK# ?? 因为我试过了,最终我用Netbeans RCP应用程序代替了它(顺便说一下,它是Java编写的)。不过,还是谢谢你的回复! - FearUs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接