3 回答
TA贡献1796条经验 获得超4个赞
Ruby也好,Python也罢,都仅仅指的是一种语言。这就好像ISO定义好了C++语言规范,而大家都可以来实现这个规范(Microsoft的VC++, GNU的GCC等)
说回Ruby和Python, 当我们一般谈论他们俩时,默认都指的是其默认的实现(Reference Implementation)。这对于Ruby来讲就是MRI Ruby, 而对于Python来说则是CPython,这两个实现是这两种语言被开发者们所熟知且应用广泛的。
但这并不妨碍其他实现的存在。这些“其他”实现的存在一般都是为了补充提供一些默认实现没有的特性,解决一些特定场景下的需求痛点。 比如pypy是Python另一个比较出名的实现,他能将Python编译成Native代码,从而大大提升其性能。
好了,所以题主提到的JRuby和JPython无非就是这两种语言规范下的又一种实现。它们提供了怎样的特性呢?我认为至少有这么两点
他们被编译成Byte code跑在JVM上,借由JVM提供动态的优化和良好的性能保证
我认为是最为有价值的一点:加入JVM生态系统的最大利益便是和其他语言的互交互性(interop),这意味着你能用Ruby, Python调用Java Scala等语言,等于为这两门语言打开了巨大的第三方库资源,甚至为其参与企业级开发提供了可能
TA贡献1841条经验 获得超3个赞
楼上没有说到很重要的一点 并发性能!
Python Ruby的默认实现,由于GIL的存在,无法利用现代的多核CPU实现真正的并发。
JVM解决了这个问题,于是就有了JRuby,JPython
TA贡献1856条经验 获得超11个赞
严格来说, Python 是一个语言标准/规范,而它对应的实现有 CPython、Jython、IronPython 等等。而通常广义的 Python 是指 CPython 这个实现。 参见 Python Implementations。至于为什么要有这么多实现,那只能说不同实现有各自的优缺点吧。就像同一个 C++ 标准有好几种编译器实现一样,一份代码拿到不同编译器下编译出的结果会有一定性能差别。
Ruby 不熟,不过 Ruby和 JRuby 应该也是类似关系吧。
添加回答
举报