JRuby - JRuby
Vývojáři | Charles Oliver Nutter, Thomas Enebo, Ola Bini a Nick Sieger |
---|---|
První vydání | 2001 |
Stabilní uvolnění | 9.2.13.0 / 3. srpna 2020[1] |
Úložiště | |
Napsáno | Rubín a Jáva |
Operační systém | Cross-platform |
Plošina | Virtuální stroj Java |
Typ | Tlumočník programovacího jazyka Ruby |
Licence | EPL /GPL /LGPL |
webová stránka | www |
JRuby je implementace Programovací jazyk Ruby na vrcholu Virtuální stroj Java, napsáno převážně v jazyce Jáva. to je svobodný software propuštěn pod třícestným EPL /GPL /LGPL licence. JRuby je úzce integrován s Jáva umožnit vložení tlumočníka do jakékoli aplikace Java s plným obousměrným přístupem mezi kódem Java a Ruby (podobně jako Jython pro jazyk Python).
Vedoucími vývojáři JRuby jsou Charles Oliver Nutter a Thomas Enebo, s mnoha současnými i minulými přispěvateli včetně Ola Bini a Nick Sieger. V září 2006 Sun Microsystems najal Eneba a Nuttera, aby pracovali na JRuby na plný úvazek.[2] V červnu 2007 ThoughtWorks najal Ola Biniho, aby pracoval na Ruby a JRuby.[3]
V červenci 2009 vývojáři JRuby opustili Sun, aby pokračovali ve vývoji JRuby na Dvůr motoru.[4] V květnu 2012 Nutter a Enebo opustili Engine Yard a začali pracovat na JRuby v červená čepice.[5]
Dějiny
Program JRuby původně vytvořil Jan Arne Petersen v roce 2001. V té době a několik následujících let byl kód přímým portem Ruby 1.6. C kód. S vydáním Ruby 1.8.6 se začalo snažit aktualizovat JRuby na funkce a sémantiku 1.8.6. Od roku 2001 pomohlo projektu několik přispěvatelů, což vedlo k současnému stavu (2012[Aktualizace]) základní tým složený z přibližně šesti členů.
Přidáno JRuby 1.1 Just-in-time kompilace a Předběžná kompilace režimů na JRuby a ve většině případů již byl rychlejší než tehdy implementace referenční verze Ruby 1.8.7.[6]
Balíčky JRuby jsou k dispozici pro většinu platforem; Fedora 9 byl mezi prvními, kdo jej zahrnul jako standardní balíček na JRuby 1.1.1.[7][8]
V červenci 2009 hlavní vývojáři JRuby ve společnosti Sun Microsystems, Charles Oliver Nutter, Thomas Enebo a Nick Sieger, připojil se Dvůr motoru pokračovat ve vývoji JRuby.[4][9] V květnu 2012 Nutter a Enebo opustili Engine Yard a začali pracovat na JRuby v červená čepice.[5]
JRuby podporuje kompatibilitu s Ruby MRI verze 1.6 až 1.9.3. JRuby 1.0 podporoval Ruby 1.8.6, s JRuby 1.4.0 tuto kompatibilitu aktualizoval na Ruby 1.8.7. JRuby 1.6.0 přidal současnou podporu pro Ruby 1.9.2, s JRuby 1.7.0 se Ruby 1.9.3 stal výchozím režimem provádění (kompatibilita s Ruby 1.8.7 je k dispozici prostřednictvím příznaku příkazového řádku). JRuby 9.0.0.0 přidal podporu pro Ruby 2.2.
Aktuální verze JRuby (9.2.11.0) podporuje Ruby 2.5.7. Nadcházející verze 9.3 bude podporovat Ruby 2.6.[10]
Ruby on Rails
JRuby byl schopen spustit Ruby on Rails webový rámec od verze 0.9 (květen 2006),[11][12] se schopností vykonávat RubyGems a WEBrick. Od té doby, co Sun najal dva hlavní vývojáře, se kompatibilita a rychlost Rails výrazně zlepšily. JRuby verze 1.0 úspěšně prošel téměř všemi vlastními testovacími případy Rails.[13] Od té doby vývojáři začali používat aplikace JRuby for Rails v produkčním prostředí.[14]
Spolupráce více virtuálních strojů
27. února 2008 Sun Microsystems a Tokijská univerzita oznámila společný výzkumný projekt na implementaci virtuálního stroje schopného vykonávat více než jeden Rubín nebo JRuby aplikace na jednom tlumočníkovi.[15]
Dynamické vyvolání na Java Virtual Machines
JSR 292 (Podpora dynamicky psaných jazyků na platformě JavaTM)[16] navrhuje:
- přidání nového
invokedynamic
instrukce na úrovni JVM, umožňující vyvolání metody pomocí dynamického kontrola typu, - dynamicky se měnící třídy a metody za běhu.
Projekt Sun Open source Vícejazyčný virtuální stroj si klade za cíl vytvořit prototyp tohoto JSR.[17] První funkční prototyp, vyvinutý jako patch na OpenJDK, bylo oznámeno a zpřístupněno na konci srpna 2008.[18][19]
Tým JRuby implementoval do své kódové základny dynamické vyvolání. Dynamické vyvolání původně dodávané s vydáním 1.1.5 v primitivní podobě.[20] Verze 1.7.0 ji ve výchozím nastavení povolila v sestavení Java 8.[21]
Historie vydání
Tato tabulka představuje pouze vydání, která představují významné kroky v historii JRuby, kromě verzí, které hlavně opravovaly chyby a zlepšovaly výkon. Vylepšení výkonu také nejsou uvedena v tabulce níže, protože každé vydání takové vylepšení obvykle přineslo.
Uvolnění | Datum vydání | Hlavní body |
---|---|---|
0.9 | 2006-08-01 | Podpora kolejnic[11] |
1.1 | 2008-03-28 | Chová se lépe než Ruby MRI 1.8.7[6] Režim AOT a Režim JIT[22] |
1.1.4 | 2008-08-28 | Refaktorovaná integrační vrstva Java Začátek podpory Ruby 1.9 FFI subsystém pro volání C knihovny[23] |
1.2.0[24] | 2009-03-16 | JIT překladač pro Ruby 1.9 Předběžný Android podpora ze strany Ruboto projekt. |
1.3.0[25] | 2009-06-03 | JRuby běží v omezeném prostředí lépe GAE / J |
1.4.0[26][27] | 2009-11-02 | Nativní spouštěč systému Windows a instalační program systému Windows Podpora Ruby 1.8.7 |
1.5.0[28] | 2010-05-12 | Nativní spouštěč pro UNIX - založené platformy Podpora mravenců a integrace Rake-Ant Aktualizace standardní knihovny, RubyGems, a RSpec |
1.6.0[29] | 2011-03-15 | Ruby 1.9.2 jazyk a kompatibilita s API Integrovaný profiler Experimentální podpora pro rozšíření C založená na C Ruby's C API |
1.7.0[21] | 2012-10-22 | Výchozím režimem je jazyk Ruby 1.9.3 Podpora pro invokedynamic |
1.7.4[30] | 2013-05-16 | Experimentální podpora Ruby 2.0 (většina funkcí a stdlib zahrnuta) |
9.0.0.0[31] | 2015-07-22 | Podpora Ruby 2.x. Nová optimalizace doby běhu Nové vstupně-výstupní operace a procesy přátelské k POSIX Plně portovaná kódovací / transkódovací logika z MRI |
9.1.7.0[32] | 2017-01-11 | Opravená vážná LinkageError při použití více vláken Opraveno několik problémů s argumenty klíčových slov Opraveno několik problémů s analyzátorem Snížené využití paměti JIT Aktualizujte Psych na 2.2.2 Aktualizujte jruby-openssl na 0.9.18 Opraveno 72 problémů |
9.2.0.0[33] | 2018-05-24 | Podpora jazyka Ruby 2.5 |
9.2.9.0[34] | 2019-10-30 | Podpora jazyka Ruby 2.5.7 |
Design
Od začátku roku 2006 se současný základní tým JRuby snaží přesunout JRuby nad rámec jednoduchého portu C, aby podporoval lepší výkon a napomáhal případné kompilaci Bajtový kód Java. Na podporu tohoto cíle si tým stanovil ambiciózní cíl: být schopen provozovat Ruby on Rails bez úprav pomocí JRuby. V procesu dosažení tohoto cíle se testovací sada JRuby rozšířila do takové míry, že tým získal důvěru ve „správnost“ JRuby. Výsledkem bylo, že na konci roku 2006 a na začátku roku 2007 se začali dopouštět mnohem komplikovanějších redesignů a refaktorování klíčových subsystémů JRuby.
JRuby je navržen tak, aby fungoval jako virtuální stroj ve smíšeném režimu pro Ruby, kde lze kód interpretovat přímo, just-in-time kompilovaný za běhu do bajtového kódu Java nebo předem kompilovaný do bajtového kódu Java před spuštěním. Do října 2007 pouze interpretován režim podporoval všechny konstrukce Ruby, ale od verze 1.1 je k dispozici úplný kompilátor AOT / JIT.[22] Návrh kompilátoru umožňuje, aby interpretovaný a kompilovaný kód běžel vedle sebe i dekompilace znovu optimalizovat a generovat vygenerovaný bytecode jako soubory třídy Java.
Podpora rámců
JRuby má integrovanou podporu pro Rails, RSpec, Hrábě a RubyGems. Vkládá subsystém FFI, který umožňuje použití knihoven C dodávaných jako drahokamy. Umožňuje také spuštění Interaktivní Ruby Shell (irb) jako Ruby MRI.
The Netbeans Ruby Pack, k dispozici v NetBeans 6, umožňuje vývoj IDE s Ruby a JRuby, stejně jako Ruby on Rails pro dvě implementace Ruby.[35][36]Již není součástí NetBeans 7.0 a novějších.
Programování
Ruby se setkává s Javou
JRuby je podobný standardnímu Ruby tlumočníkovi, kromě napsaného v Jáva. JRuby obsahuje některé ze stejných konceptů, včetně objektově orientované programování, a dynamické psaní jako Ruby. Klíčovým rozdílem je, že JRuby je úzce integrován s Javou a lze jej volat přímo z Java programů.[37] Java má významné postavení ve vývoji webových aplikací.
JRuby volá Javu
Jedním z výkonných rysů JRuby je jeho schopnost vyvolat třídy Platforma Java. Chcete-li to provést, musíte nejprve načíst podporu Java JRuby voláním "require 'java'". Následující příklad vytvoří Java JFrame s JLabel:
vyžadovat 'Jáva'rám = javax.houpačka.JFrame.Novýrám.getContentPane.přidat javax.houpačka.JLabel.Nový('Ahoj světe!')rám.setDefaultCloseOperation javax.houpačka.JFrame::EXIT_ON_CLOSErám.balíčekrám.set_visible skutečný
JRuby také umožňuje uživateli volat kód Java pomocí více podobného Ruby pojmenování metody podtržítka a odkazovat se na JavaBean vlastnosti jako atributy:[pochybný ]
rám.content_pane.přidat označenírám.viditelné = skutečný
Volání JRuby z Javy
JRuby lze stejně snadno volat z Javy pomocí buď JSR 223[38] Skriptování pro Javu 6 nebo Skriptování Apache Bean rámec.
// Příklad použití skriptování JSR 233 pro Javu 6ScriptEngineManager mgr = Nový ScriptEngineManager();ScriptEngine rbEngine = mgr.getEngineByExtension("rb");Snaž se { rbEngine.eval("dává 'Hello World!'");} chytit (ScriptException např) { např.printStackTrace();}
Výkon
Podle některých měřítek je JRuby rychlejší než alternativy. Vzhledem k tomu, že implementace se liší v tom, kolik kódu je načteno před spuštěním, mohou různé metody měření rychlosti vést k předpojatým interpretacím výhod výkonu. Čas potřebný k Virtuální stroj Java samotné načítání je při výpočtu referenčních hodnot často vyloučeno z doby provádění.
JRuby má významnou architektonickou výhodu v tom, že dokáže využívat vlákna JVM, aniž by byl omezován a globální tlumočník zámek (podobně jako Rubinius ), tedy dosažení úplného paralelismu v rámci procesu, kterého Ruby MRI nemůže dosáhnout navzdory využití vláken OS.
Ve skutečnosti Kříženec webový server aplikace testovaná v roce 2007, výkon JRuby je lepší než Ruby MRI 1.8, po vytvoření instance Java Virtual Machine.[39]
V benchmarku implementace Ruby z roku 2007 byl JRuby v některých testech rychlejší než Ruby MRI 1.8, ale YARV překonal oba.[40]
Od dubna 2014 v Srovnávací hra pro počítačový jazyk, JRuby 1.7.4 má obvykle stejný výkon jako Ruby MRI 2.1.0, ale využívá více paměti.[41][42]
Viz také
- GraalVM
- Seznam skriptovacích jazyků Java
- ZK (rámec) - rámec Ajaxu podporující JRuby
Reference
- ^ „Vydáno JRuby 9.2.13.0“. Citováno 2020-08-11.
- ^ Jacki (07.09.06). „Sun vítá vývojáře JRuby“. Na záznamu. Archivovány od originál dne 2012-08-29. Citováno 2013-11-07.
- ^ Ola Bini. „ThoughtWorks“. Na záznamu.
- ^ A b „Sun's JRuby Team Jumps Ship to Engine Yard“. PCWorld. 2009-07-28. Citováno 2012-06-02.
- ^ A b „Red Hat láká v silovém páru JRuby“. Registrace. 2012-05-23. Citováno 2012-06-02.
- ^ A b Cangiano, Antonio (12.03.2007). „The Great Ruby Shootout“. Citováno 2008-02-01.
- ^ Nutter, Charles (2008-04-25). „JRuby 1.1.1 in RedHat Fedora“. Citováno 2008-04-26.
- ^ "drsný". fedoraproject.org. Citováno 2008-04-26.[trvalý mrtvý odkaz ]
- ^ Nutter, Charles (2009-07-28). „JRuby's Future at Engine Yard“. Archivovány od originál dne 2009-07-31. Citováno 2009-07-28.
- ^ „Podpora Ruby 2.6“. Tým JRuby. Citováno 2020-04-09.
- ^ A b „Rails Support“. Tým JRuby. Citováno 2008-02-17.
- ^ Nutter, Charles (2008-08-24). „Od nuly k výrobě za 15 minut“. Citováno 2008-08-27.
- ^ 98,6% z 2 807 specifických testovacích případů Rails proběhlo úspěšně; vidět Vydáno JRuby 0.9.8 Archivováno 22 května 2015, na Wayback Machine
- ^ "Příběhy úspěchu". JRuby Wiki na GitHubu. 2011-01-05. Citováno 2011-03-16.
- ^ „Tokijská univerzita a Sun Microsystems zahajují společné výzkumné projekty v oblasti vysoce výkonných výpočetních a webových programovacích jazyků“. Sun Microsystems. 2008-02-27. Citováno 2008-02-28.
- ^ viz JSR 292
- ^ „Dílčí projekty a vyšetřování“. Sun Microsystems. 2007. Citováno 2008-02-06.
- ^ Rose, John (2008-08-26). „Šťastný mezinárodní den Invokedynamic!“. Citováno 2008-09-03.
- ^ Lorimer, R.J. (2008-09-01). „Dynamické vyvolání běží na OpenJDK“. infoq.com. Citováno 2008-09-03.
- ^ Nutter, Charles (11.9.2008). „První chuť InvokeDynamic“. Citováno 2008-09-13.
Podařilo se mi úspěšně zapojit InvokeDynamic přímo do procesu odeslání JRuby! Takové vzrušení! Kód je již v kufru JRuby a bude dodáván s JRuby 1.1.5 (i když bude evidentně deaktivován na JVM bez InvokeDynamic).
- ^ A b „Vydáno JRuby 1.7.0“. Tým JRuby. 2012-10-22. Citováno 2011-10-23.
- ^ A b Nutter, Charles (2007-09-27). „Překladač je dokončen“. Citováno 2007-10-12.
- ^ Enebo, Tom (2008-08-28). „JRuby 1.1.4 Vydáno“. Citováno 2009-02-25.[trvalý mrtvý odkaz ]
- ^ Enebo, Tom (2009-03-16). „Vydáno JRuby 1.2.0“. Tým JRuby. Archivovány od originál dne 19. 3. 2009. Citováno 2009-03-17.
- ^ Enebo, Tom (06.06.2009). „Vydáno JRuby 1.3.0“. Tým JRuby. Archivovány od originál dne 12. 6. 2009. Citováno 2009-06-03.
- ^ „Vydáno JRuby 1.4.0“. Tým JRuby. 2009-11-02. Citováno 2009-11-03.
- ^ „Vydáno JRuby 1.4.0“. adtmag.com. 10. 11. 2009. Citováno 2009-11-21.
- ^ „Vydáno JRuby 1.5.0“. Tým JRuby. 12. května 2010. Citováno 2010-05-12.
- ^ „Vydáno JRuby 1.6.0“. Tým JRuby. 15. 3. 2011. Citováno 2011-03-15.
- ^ „JRuby 1.7.4 Vydáno“. Tým JRuby. 16. 05. 2013. Citováno 2013-05-19.
- ^ „Vydáno JRuby 9.0.0.0“. Tým JRuby. 2015-07-22. Citováno 2015-07-25.
- ^ „Vydáno JRuby 9.1.7.0 - JRuby.org“. jruby.org. Citováno 2017-01-13.
- ^ „Vydáno JRuby 9.2.0.0“. Citováno 2018-05-27.
- ^ „Vydáno JRuby 9.2.9.0“. Citováno 2019-11-05.
- ^ „Podpora Ruby & JRuby dostupná v NetBeans IDE“. netbeans.org. 06.03.2007. Citováno 2009-07-04.
- ^ „Ruby rozjasňuje platformu NetBeans“. infoworld.com. 01.03.2007. Citováno 2008-07-04.
- ^ Fox, Joshua (17. července 2006). "Ruby pro svět Java". JavaWorld. Citováno 2020-07-26.
- ^ JSR 223: Skriptování pro požadavek specifikace platformy Java
- ^ Sieger, Nick (25.10.2007). „JRuby on Rails: Fast Enough“. Citováno 2007-10-28.
- ^ Cangiano, Antonio (03.12.2007). „The Great Ruby Shootout“. Citováno 2014-02-02.
- ^ „JRuby ve srovnání s Ruby 1.9, Computer Language Benchmarks Game (1)“. Archivovány od originál dne 2015-01-23. Citováno 2014-02-02.
- ^ „JRuby ve srovnání s Ruby 1.9, Computer Language Benchmarks Game (2)“. Archivovány od originál dne 23. 7. 2014. Citováno 2014-02-02.
Další čtení
- Kutner, Joe (22. srpna 2012). Nasazení pomocí JRuby: Dodávejte škálovatelné webové aplikace pomocí JVM (První vydání). Pragmatická knihovna. p. 200. ISBN 978-1934356975.
- O Nutter, Charles; Enebo, Thomas; Sieger, Nick; Bini, Ola; Dees, Ian (4. února 2011). Používání JRuby: Přináší Ruby do Javy (První vydání). Pragmatická knihovna. str.300. ISBN 978-1934356654.
- Edelson, Justin; Liu, Henry (18. listopadu 2008). Kuchařka JRuby (První vydání). O'Reilly Media. str.222. ISBN 978-0-596-51980-3.
- Bini, Ola (24. září 2007). Praktické projekty JRuby on Rails Web 2.0: Přináší Ruby on Rails do Javy (První vydání). Apress. str.330. ISBN 978-1-59059-881-8.
- Kutler, Chris; Leonard, Brian (4. května 2009). NetBeans Ruby and Rails IDE s JRuby (První vydání). Apress. p. 160. ISBN 978-1-4302-1636-0. Archivovány od originál 27. srpna 2012. Citováno 12. července 2009.