Grails 为什么这么多人坚持要将JVM拖到新的应用程序中?

Grails 为什么这么多人坚持要将JVM拖到新的应用程序中?,grails,groovy,jvm,jruby,jython,Grails,Groovy,Jvm,Jruby,Jython,例如,我遇到了一些开发者和架构师,他们害怕Rails应用程序,但喜欢编写新的Grails应用程序 据我所见,使用JVM来支持Groovy、JRuby和Jython等语言,而不是直接使用Ruby或Python,会产生大量的资源开销 Ruby和Python都可以在任何操作系统上进行解释,所以我看不到任何“一次编写,在任何地方运行”的优势。。。为什么要带着笨重的JVM Java是一个非常、非常成熟的平台,有很多现有的类库可以“插入”并使用,比如说,与Ruby或Python(甚至Perl)相比。因此,对

例如,我遇到了一些开发者和架构师,他们害怕Rails应用程序,但喜欢编写新的Grails应用程序

据我所见,使用JVM来支持Groovy、JRuby和Jython等语言,而不是直接使用Ruby或Python,会产生大量的资源开销


Ruby和Python都可以在任何操作系统上进行解释,所以我看不到任何“一次编写,在任何地方运行”的优势。。。为什么要带着笨重的JVM

Java是一个非常、非常成熟的平台,有很多现有的类库可以“插入”并使用,比如说,与Ruby或Python(甚至Perl)相比。因此,对于喜欢使用现有代码而不是自己编写所有代码的人来说,Java是一个巨大的胜利

例如,最近我一直在寻找类似JAXB For Python或Ruby的东西。最后,我使用JRuby只是因为我还没有找到任何成熟的、广泛使用的XML绑定库

为什么要带着笨重的JVM一起去

JVM既不臃肿,也不缓慢。相反,它是一个精简、快速、深度优化的虚拟机。不幸的是,它针对静态OOP语言进行了优化

尽管如此,针对JVM的优秀编译器确实可以创建性能良好的程序。我不知道JRuby;但是Jython的目标是比常规的C Python在各个方面都要快,而且他们正在接近(在几个重要的用例中已经快了)

记住,一个好的JIT(比如JVM的JIT)可以应用一些在静态C编译器上不可用的优化,从中获得更快的代码不是白日梦。当然,为您的语言优化的虚拟机应该比“并非真正通用”的虚拟机(如JVM)更快;但是存在成熟度问题:JVM在这方面做了很多工作,而Ruby和Python的JIT还远远不够


不幸的是,似乎没有更好的通用字节码VM。微软的CLI受到与JVM类似的限制(ironPython比JPython慢得多,重得多)。最好的候选人似乎是LLVM。有人知道为什么LLVM上没有更多的动态语言吗?我见过几个Scheme编译器,但似乎有几个问题。

为JVM编写代码(任何语言)的巨大优势在于,如果需要,通常很容易利用大量成熟Java库

我不知道你是从哪里想到一个巨大资源开销的“庞大”JVM的。JIT倾向于生成速度相当快的代码,而核心JVM在今天的标准下绝不是巨大的。它在运行时确实会占用大量内存,但这是因为现代机器有很多RAM,而GC在有很多RAM的情况下工作得最好。如果需要,GC可以更加保守


正如其他人所说:“Groovy最好的地方是我不必使用Java,其次是我可以使用Java。”

Groovy不是一种解释语言,它是一种动态语言。groovy编译器生成在JVM内部运行的JVM字节码,就像任何其他java类一样。从这个意义上讲,groovy就像java一样,只是向java语言添加语法,而语法只对开发人员有意义,对JVM没有意义

开发人员的生产力、语法的易用性和灵活性使groovy对java生态系统具有吸引力—如果ruby或python生成java字节码,它们也会具有同样的吸引力(请参见jython)


Java开发人员并不真正害怕ruby;事实上,许多人很快就接受了groovy或jython,这两者都接近ruby和python。他们不关心的是,离开这样一个令人惊叹的平台(java)去使用性能较差、可扩展性较差甚至使用较少的语言,比如ruby(尽管它有很多优点)。

RoR的一大问题是它不可扩展且难以部署。通过使用Java平台,您可以利用现有的基础设施

grails war
生成一个war文件,可以轻松地部署在Glassfish、Jboss等上

Ruby和Python都可以 几乎可以在任何操作系统上进行解释,所以我 没有看到任何“一次写入”运行 “任何地方”的优势。。。为什么要带这个 和你一起走

主要是因为您希望利用现有的Java库、API和产品的巨大生态系统,这使Ruby或Python的可用功能相形见绌,尤其是在企业领域

另外,请记住,JRuby和Jython在很多基准测试中都比这些语言的常规(C实现)更快,尤其是Ruby(甚至Ruby 1.9)

针对同一虚拟机使用多种语言有很多好处,例如利用公共基础设施、代码重用、共享API、使用概念上最适合您的语言或特定问题域的能力,等等

同样的事情也发生在.NET空间中,目标是CLR。(vaporware)VM项目的目标也是一样的,这也是该项目的既定目标。

原因是热点


这是一个工程之旅。

另一个不太被提及的原因是与jvm相关的现有基础设施-如果您已经有一台运行java的服务器,为什么不使用它而不是引入另一个平台(如rails)?

问题中似乎有一个假设,即新项目正在开发中。在过去的十年中,许多组织在Java上进行了巨大的投资,并要求任何新项目都能在现有(内部)代码生态系统中工作。正如所指出的,所有公开可用的Java库(无论是免费的/OSS还是商业的)都有巨大的好处,但对大型组织来说,使用现有代码甚至作为现有系统中的一个组件至少同样重要(如果不是更重要的话)

很多还取决于平台的成熟度和能力,也就是说JVM和每个