3 回答

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊
Ruby也好,Python也罷,都僅僅指的是一種語言。這就好像ISO定義好了C++語言規(guī)范,而大家都可以來實(shí)現(xiàn)這個規(guī)范(Microsoft的VC++, GNU的GCC等)
說回Ruby和Python, 當(dāng)我們一般談?wù)撍麄儌z時,默認(rèn)都指的是其默認(rèn)的實(shí)現(xiàn)(Reference Implementation)。這對于Ruby來講就是MRI Ruby, 而對于Python來說則是CPython,這兩個實(shí)現(xiàn)是這兩種語言被開發(fā)者們所熟知且應(yīng)用廣泛的。
但這并不妨礙其他實(shí)現(xiàn)的存在。這些“其他”實(shí)現(xiàn)的存在一般都是為了補(bǔ)充提供一些默認(rèn)實(shí)現(xiàn)沒有的特性,解決一些特定場景下的需求痛點(diǎn)。 比如pypy是Python另一個比較出名的實(shí)現(xiàn),他能將Python編譯成Native代碼,從而大大提升其性能。
好了,所以題主提到的JRuby和JPython無非就是這兩種語言規(guī)范下的又一種實(shí)現(xiàn)。它們提供了怎樣的特性呢?我認(rèn)為至少有這么兩點(diǎn)
他們被編譯成Byte code跑在JVM上,借由JVM提供動態(tài)的優(yōu)化和良好的性能保證
我認(rèn)為是最為有價值的一點(diǎn):加入JVM生態(tài)系統(tǒng)的最大利益便是和其他語言的互交互性(interop),這意味著你能用Ruby, Python調(diào)用Java Scala等語言,等于為這兩門語言打開了巨大的第三方庫資源,甚至為其參與企業(yè)級開發(fā)提供了可能

TA貢獻(xiàn)1841條經(jīng)驗 獲得超3個贊
樓上沒有說到很重要的一點(diǎn) 并發(fā)性能!
Python Ruby的默認(rèn)實(shí)現(xiàn),由于GIL的存在,無法利用現(xiàn)代的多核CPU實(shí)現(xiàn)真正的并發(fā)。
JVM解決了這個問題,于是就有了JRuby,JPython

TA貢獻(xiàn)1856條經(jīng)驗 獲得超11個贊
嚴(yán)格來說, Python 是一個語言標(biāo)準(zhǔn)/規(guī)范,而它對應(yīng)的實(shí)現(xiàn)有 CPython、Jython、IronPython 等等。而通常廣義的 Python 是指 CPython 這個實(shí)現(xiàn)。 參見 Python Implementations。至于為什么要有這么多實(shí)現(xiàn),那只能說不同實(shí)現(xiàn)有各自的優(yōu)缺點(diǎn)吧。就像同一個 C++ 標(biāo)準(zhǔn)有好幾種編譯器實(shí)現(xiàn)一樣,一份代碼拿到不同編譯器下編譯出的結(jié)果會有一定性能差別。
Ruby 不熟,不過 Ruby和 JRuby 應(yīng)該也是類似關(guān)系吧。
添加回答
舉報