Preskočiť na obsah

JRuby

z Wikipédie, slobodnej encyklopédie
JRuby

Logo
Základné informácie
VývojárCharles Oliver Nutter, Thomas Enebo, Ola Bini, Nick Sieger
Uvedenie2001[1]
Posledná stabilná verzia10.1.2.0 (21. septembra 2026[2])
Vyvinutý vRuby, Java
Operačný systémmultiplatformový
Typ softvéruimplementácia jazyka Ruby pre virtuálny stroj Javy (JVM); viacparadigmový jazyk: funkcionálny, imperatívny, objektovo orientovaný, s podporou reflexie (reflective)
LicenciaEclipse Public License (EPL); GPL, LGPL
Ďalšie odkazy
Webová stránkajruby.org

Pozri aj Informačný portál

JRuby je implementácia programovacieho jazyka Ruby pre virtuálny stroj Javy (Java virtual machine, JVM), napísaná prevažne v jazyku Java. Je to slobodný softvér vydávaný pod trojitou licenciou: Eclipse Public License (EPL), GNU General Public License (GPL) a GNU Lesser General Public License (LGPL).[3] JRuby je úzko prepojené s Javou, takže interpreter možno vložiť do akejkoľvek aplikácie v Jave s plným obojsmerným prístupom medzi kódom v Jave a v Ruby (podobne ako Jython pre jazyk Python).

Hlavnými vývojármi JRuby sú Charles Oliver Nutter a Thomas Enebo; k mnohým súčasným a bývalým prispievateľom patria Ola Bini a Nick Sieger. V septembri 2006 spoločnosť Sun Microsystems zamestnala Eneba a Nuttera, aby na JRuby pracovali na plný úväzok.[4] V júni 2007 zamestnala spoločnosť ThoughtWorks Olu Biniho, aby pracoval na Ruby a JRuby.[5]

Projekt JRuby vznikol v roku 2001 ako snaha prepísať interpreter jazyka Ruby do Javy; medzi jeho prvých autorov patril Jan Arne Petersen.[1] V tom čase a ešte niekoľko rokov potom bol kód priamym prepisom kódu Ruby 1.6 v jazyku C.[chýba zdroj] S vydaním Ruby 1.8.6 sa začalo úsilie aktualizovať JRuby na funkcie a sémantiku verzie 1.8.6.[chýba zdroj]

JRuby 1.1 pridalo režimy kompilácie just-in-time (JIT) a kompilácie vopred (ahead-of-time, AOT).[6] Už vývojová verzia z decembra 2007 bola v porovnávacom teste rýchlejšia ako vtedajšia referenčná implementácia Ruby 1.8.6.[7]

V apríli 2008 bolo JRuby vo verzii 1.1.1 zaradené ako balík do distribúcie Fedora.[8]

V júli 2009 sa hlavní vývojári JRuby zo spoločnosti Sun Microsystems – Charles Oliver Nutter, Thomas Enebo a Nick Sieger – pripojili k spoločnosti Engine Yard, aby pokračovali vo vývoji JRuby.[9][10] V máji 2012 Nutter a Enebo odišli z Engine Yard a začali na JRuby pracovať v spoločnosti Red Hat.[11] Od roku 2024 Nutter financuje vývoj JRuby prostredníctvom vlastnej firmy Headius Enterprises z komerčných zmlúv o podpore.[12]

JRuby 1.4.0 rozšírilo kompatibilitu s Ruby MRI (referenčnou implementáciou jazyka Ruby) na Ruby 1.8.7.[13] JRuby 1.6.0 pridalo súbežnú podporu Ruby 1.9.2[14] a JRuby 1.7.0 urobilo z Ruby 1.9.3 predvolený režim (kompatibilita s Ruby 1.8.7 je dostupná pomocou prepínača príkazového riadka).[15] JRuby 9.0.0.0 pridalo podporu Ruby 2.2.[16]

Aktuálna verzia JRuby (10.1.2.0, vydaná 21. septembra 2026) je zameraná na kompatibilitu s Ruby 4.0.[2]

Ruby on Rails

[upraviť | upraviť zdroj]

V júli 2006 vývojári uviedli, že v JRuby už „väčšinou fungujú“ Rake, webový framework Ruby on Rails, WEBrick a RubyGems.[17] Odkedy spoločnosť Sun zamestnala dvoch hlavných vývojárov, kompatibilita s Rails a rýchlosť sa výrazne zlepšili. Vo verzii 0.9.8 (marec 2007) už prechádzalo viac ako 98 % vlastných jednotkových testov Rails.[18] Odvtedy vývojári začali JRuby používať pre aplikácie Rails v produkčnom prostredí.[19]

Spolupráca viacerých virtuálnych strojov

[upraviť | upraviť zdroj]

Dňa 27. februára 2008 spoločnosť Sun Microsystems a Tokijská univerzita oznámili spoločný výskumný projekt, ktorého cieľom bolo implementovať virtuálny stroj schopný vykonávať viac ako jednu aplikáciu v Ruby alebo JRuby v jednom interpreteri.[20]

Dynamické volanie vo virtuálnych strojoch Javy

[upraviť | upraviť zdroj]

JSR 292 (Supporting Dynamically Typed Languages on the JavaTM Platform)[21] navrhuje:

  • pridať na úrovni JVM novú inštrukciu invokedynamic, ktorá umožní volanie metód s dynamickou kontrolou typov,
  • dynamicky meniť triedy a metódy za behu programu.

Projekt otvoreného softvéru spoločnosti Sun Multi Language Virtual Machine (Da Vinci Machine) mal za cieľ vytvoriť prototyp tejto špecifikácie JSR.[22] Prvý funkčný prototyp, vyvinutý ako záplata (patch) pre OpenJDK, bol oznámený a sprístupnený koncom augusta 2008.[23][24]

Tím JRuby zabudoval dynamické volanie (dynamic invocation) do svojho kódu. Dynamické volanie sa prvýkrát dostalo do vydania 1.1.5, a to v primitívnej podobe.[25] Verzia 1.7.0 ho pri zostaveniach pre Javu 8 zapla v predvolenom nastavení.[15]

História vydaní

[upraviť | upraviť zdroj]

Táto tabuľka uvádza iba vydania, ktoré predstavujú významné kroky v histórii JRuby, a vynecháva verzie, ktoré hlavne opravovali chyby a zlepšovali výkon. Zlepšenia výkonu nie sú v tabuľke uvedené, pretože ich spravidla prinieslo každé vydanie.

Verzia Dátum vydania Hlavné novinky
1.128. marca 2008[chýba zdroj]výkon lepší ako Ruby MRI 1.8.6[7]
režim AOT a režim JIT[6]
1.2.0[26]16. marca 2009kompilátor JIT pre Ruby 1.9
predbežná podpora systému Android vďaka projektu Ruboto
1.3.0[27]3. júna 2009lepší beh v obmedzených prostrediach, napríklad Google App Engine for Java (GAE/J)
1.4.0[13][28]2. novembra 2009natívny spúšťač (native launcher) a inštalátor pre Windows
podpora Ruby 1.8.7
1.5.0[29]12. mája 2010natívny spúšťač pre platformy založené na systéme Unix
podpora nástroja Ant a integrácia Rake-Ant
aktualizácie štandardnej knižnice, RubyGems a RSpec
1.6.0[14]15. marca 2011kompatibilita s jazykom a API Ruby 1.9.2
vstavaný nástroj na profilovanie (profiler)
experimentálna podpora rozšírení v jazyku C založených na C API jazyka Ruby
1.7.0[15]22. októbra 2012jazyk Ruby 1.9.3 je predvoleným režimom
podpora inštrukcie invokedynamic
1.7.4[30]16. mája 2013experimentálna podpora Ruby 2.0 (vrátane väčšiny funkcií a štandardnej knižnice)
9.0.0.0[16]22. júla 2015podpora Ruby 2.x
nové optimalizujúce behové prostredie
nové vstupy/výstupy a správa procesov kompatibilné s POSIX
logika kódovania znakov a prevodu medzi kódovaniami (transcoding) úplne prenesená z MRI
9.1.7.0[31]11. januára 2017opravená chyba LinkageError pri používaní viacerých vlákien
opravených niekoľko chýb kľúčových argumentov
opravených niekoľko chýb syntaktického analyzátora
znížená spotreba pamäte kompilátora JIT
aktualizácia Psych na 2.2.2
aktualizácia jruby-openssl na 0.9.18
opravených 72 chýb
9.2.0.0[32]24. mája 2018podpora jazyka Ruby 2.5
9.2.9.0[33]30. októbra 2019podpora jazyka Ruby 2.5.7
9.3.2.0[34]2. decembra 2021podpora jazyka Ruby 2.6.x
9.3.3.0[35]19. januára 2022podpora jazyka Ruby 2.6.x
9.3.4.0[36]23. marca 2022podpora jazyka Ruby 2.6.x
9.4.0.0[37]23. novembra 2022podpora jazyka Ruby 3.1
9.4.1.0[38]7. februára 2023podpora jazyka Ruby 3.1
9.4.2.0[39]8. marca 2023podpora jazyka Ruby 3.1
9.4.3.0[40]7. júna 2023podpora jazyka Ruby 3.1
10.0.0.0[41]14. apríla 2025kompatibilita s Ruby 3.4
minimálna požadovaná verzia Javy 21
10.1.0.0[42]21. apríla 2026zameranie na kompatibilitu s Ruby 4.0

Od začiatku roka 2006 sa súčasný hlavný tím JRuby usiloval posunúť JRuby ďalej, než je len jednoduchý prepis z jazyka C, aby dosiahol lepší výkon a uľahčil prípadnú kompiláciu do bajtkódu JVM.[17]

JRuby je navrhnuté ako virtuálny stroj pre Ruby so zmiešaným režimom (mixed-mode), v ktorom sa kód môže buď priamo interpretovať, kompilovať za behu (just-in-time) do bajtkódu JVM, alebo kompilovať vopred (ahead-of-time) do bajtkódu JVM ešte pred spustením. Do októbra 2007 podporoval všetky konštrukcie Ruby iba interpretovaný režim, no od verzie 1.1 je k dispozícii úplný kompilátor AOT/JIT.[6] Návrh kompilátora umožňuje, aby interpretovaný a skompilovaný kód bežali vedľa seba, a podporuje dekompiláciu na účely opätovnej optimalizácie aj výstup vygenerovaného bajtkódu do súborov tried Javy.

Podpora frameworkov

[upraviť | upraviť zdroj]

JRuby má vstavanú podporu pre Rails, RSpec, Rake a RubyGems. Obsahuje subsystém FFI, ktorý umožňuje používať knižnice v jazyku C zabalené ako balíky RubyGems (gems). Umožňuje aj spustiť interaktívny shell Ruby (Interactive Ruby Shell, irb) rovnako ako Ruby MRI.[chýba zdroj]

Balík Netbeans Ruby Pack, dostupný v NetBeans 6, umožňoval vývoj v integrovanom vývojovom prostredí (IDE) s Ruby, JRuby a Ruby on Rails pre obe implementácie Ruby.[43][44]

Programovanie

[upraviť | upraviť zdroj]

Ruby sa stretáva s Javou

[upraviť | upraviť zdroj]

JRuby je podobné štandardnému interpreteru Ruby, je však napísané v jazyku Java. Má niektoré rovnaké koncepty ako Ruby vrátane objektovo orientovaného programovania a dynamického typovania. Hlavný rozdiel je v tom, že JRuby je úzko prepojené s Javou a možno ho volať priamo z programov v Jave.[45]

Volanie Javy z JRuby

[upraviť | upraviť zdroj]

Jednou z výrazných vlastností JRuby je schopnosť volať triedy platformy Java. Najprv treba načítať podporu Javy v JRuby príkazom require 'java'. Nasledujúci príklad vytvorí okno JFrame s popisom JLabel:

require 'java'

frame = javax.swing.JFrame.new
frame.getContentPane.add javax.swing.JLabel.new('Hello, World!')
frame.setDefaultCloseOperation javax.swing.JFrame::EXIT_ON_CLOSE
frame.pack
frame.set_visible true

Volanie JRuby z Javy

[upraviť | upraviť zdroj]

JRuby možno rovnako ľahko volať z Javy, a to buď pomocou rozhrania JSR 223[46] (Scripting for Java 6), alebo pomocou rámca Apache Bean Scripting Framework.

//Example using JSR 233 Scripting for Java 6
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine rbEngine = mgr.getEngineByExtension("rb");
try {
    rbEngine.eval("puts 'Hello World!'");
} catch (ScriptException ex) {
    ex.printStackTrace();
}

JRuby môže využívať vlákna JVM bez obmedzenia globálnym zámkom interpretera (global interpreter lock), a tak dosahuje skutočný paralelizmus v rámci jedného procesu.[47]

V skutočnej aplikácii na webovom serveri Mongrel, testovanej v roku 2007, bol výkon JRuby po spustení virtuálneho stroja Javy lepší ako výkon Ruby MRI 1.8.[48]

V porovnaní implementácií Ruby z roku 2007 bolo JRuby v niektorých testoch rýchlejšie ako Ruby MRI 1.8, obe však prekonala implementácia YARV.[7]

V meraniach projektu The Computer Language Benchmarks Game z roku 2014 bolo JRuby 1.7 v niektorých úlohách rýchlejšie ako referenčná implementácia Ruby, v iných pomalšie, a spotrebúvalo výrazne viac pamäte.[49][50]

Bezpečnosť

[upraviť | upraviť zdroj]

Na konferencii Black Hat Europe 2017 predstavil bezpečnostný konzultant spoločnosti IOActive Fernando Arnaboldi analýzu interpreterov piatich populárnych programovacích jazykov, ktoré testoval metódou fuzzingu (zadávaním neplatných, neočakávaných alebo náhodných vstupných údajov). Podľa nej JRuby načítava a spúšťa vzdialený kód vo funkcii, ktorá na to nie je určená.[51]

Referencie

[upraviť | upraviť zdroj]
  1. 1 2 JRuby [online]. SourceForge, [cit. 2026-10-15]. Dostupné online. (po anglicky)
  2. 1 2 JRuby 10.1.2.0 Released [online]. jruby.org, 2026-09-21, [cit. 2026-10-20]. Dostupné online. (po anglicky)
  3. ↑ COPYING [online]. JRuby (GitHub), [cit. 2026-10-15]. Dostupné online. (po anglicky)
  4. ↑ DECOSTER, Jacki. Sun Welcomes JRuby Developers [online]. On the Record (Oracle Blogs), 2006-09-07, [cit. 2013-11-07]. Dostupné online. Archivované 2012-08-29 z originálu. (po anglicky)
  5. ↑ BINI, Ola. ThoughtWorks [online]. Ola Bini: Programming Language Synchronicity (blog), 2007-03-16. Dostupné online. (po anglicky)
  6. 1 2 3 NUTTER, Charles. The Compiler Is Complete [online]. 2007-09-27, [cit. 2007-10-12]. Dostupné online. (po anglicky)
  7. 1 2 3 CANGIANO, Antonio. The Great Ruby Shootout [online]. 2007-12-03, [cit. 2026-10-20]. Dostupné online. Archivované 2010-09-02 z originálu. (po anglicky)
  8. ↑ NUTTER, Charles. JRuby 1.1.1 in RedHat Fedora [online]. 2008-04-25, [cit. 2008-04-26]. Dostupné online. (po anglicky)
  9. ↑ NICCOLAI, James. Sun's JRuby Team Jumps Ship to Engine Yard [online]. PCWorld, 2009-07-28, [cit. 2012-06-02]. Dostupné online. Archivované 2009-07-31 z originálu. (po anglicky)
  10. ↑ NUTTER, Charles. JRuby's Future at Engine Yard [online]. Engine Yard, 2009-07-28, [cit. 2009-07-28]. Dostupné online. Archivované 2009-07-31 z originálu. (po anglicky)
  11. ↑ CLARKE, Gavin. Red Hat lures in JRuby power pair [online]. The Register, 2012-05-23, [cit. 2026-10-20]. Dostupné online. (po anglicky)
  12. ↑ NUTTER, Charles Oliver. JRuby at RubyConf 2026 [online]. 2026-07-10, [cit. 2026-10-15]. Dostupné online. (po anglicky)
  13. 1 2 JRuby 1.4.0 Released [online]. JRuby Team, 2009-11-02, [cit. 2009-11-03]. Dostupné online. (po anglicky)
  14. 1 2 JRuby 1.6.0 Released [online]. JRuby Team, 2011-03-15, [cit. 2011-03-15]. Dostupné online. (po anglicky)
  15. 1 2 3 JRuby 1.7.0 Released [online]. JRuby Team, 2012-10-22, [cit. 2012-10-23]. Dostupné online. Archivované 2012-10-25 z originálu. (po anglicky)
  16. 1 2 JRuby 9.0.0.0 Released [online]. JRuby Team, 2015-07-22, [cit. 2015-07-25]. Dostupné online. Archivované 2015-07-24 z originálu. (po anglicky)
  17. 1 2 EYLER, Pat. Interviewing the JRuby Developers [online]. O'Reilly Ruby, 2006-07-17, [cit. 2025-08-20]. Dostupné online. Archivované 2007-10-28 z originálu. (po anglicky)
  18. ↑ ENEBO, Thomas. JRuby 0.9.8 Released [online]. Codehaus, 2007-03-05. Dostupné online. Archivované 2015-05-22 z originálu. (po anglicky)
  19. ↑ Success Stories [online]. JRuby Wiki on GitHub, 2011-01-05, [cit. 2011-03-16]. Dostupné online. (po anglicky)
  20. ↑ The University of Tokyo and Sun Microsystems Commence Joint Research Projects on High Performance Computing and Web-based Programming Languages [online]. Sun Microsystems, 2008-02-27, [cit. 2008-02-28]. Dostupné online. Archivované 2009-01-24 z originálu. (po anglicky)
  21. ↑ JSR 292: Supporting Dynamically Typed Languages on the Java Platform [online]. Java Community Process, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  22. ↑ Sub-Projects and Investigations [online]. Sun Microsystems, 2007, [cit. 2008-02-06]. Dostupné online. (po anglicky)
  23. ↑ ROSE, John. Happy International Invokedynamic Day! [online]. 2008-08-26, [cit. 2008-09-03]. Dostupné online. Archivované 2009-07-04 z originálu. (po anglicky)
  24. ↑ LORIMER, R. J.. Dynamic Invocation Runs on OpenJDK [online]. infoq.com, 2008-09-01, [cit. 2008-09-03]. Dostupné online. (po anglicky)
  25. ↑ NUTTER, Charles. A First Taste of InvokeDynamic [online]. 2008-09-11, [cit. 2008-09-13]. Dostupné online. (po anglicky)
  26. ↑ ENEBO, Tom. JRuby 1.2.0 Released [online]. JRuby Team, 2009-03-16, [cit. 2009-03-17]. Dostupné online. Archivované 2009-03-19 z originálu. (po anglicky)
  27. ↑ ENEBO, Tom. JRuby 1.3.0 Released [online]. JRuby Team, 2009-06-03, [cit. 2009-06-03]. Dostupné online. Archivované 2009-06-12 z originálu. (po anglicky)
  28. ↑ JRuby 1.4.0 Released [online]. adtmag.com, 2009-11-10, [cit. 2009-11-21]. Dostupné online. Archivované 2009-11-15 z originálu. (po anglicky)
  29. ↑ JRuby 1.5.0 Released [online]. JRuby Team, 2010-05-12, [cit. 2010-05-12]. Dostupné online. Archivované 2010-05-16 z originálu. (po anglicky)
  30. ↑ JRuby 1.7.4 Released [online]. JRuby Team, 2013-05-16, [cit. 2013-05-19]. Dostupné online. (po anglicky)
  31. ↑ JRuby 9.1.7.0 Released [online]. jruby.org, [cit. 2017-01-13]. Dostupné online. Archivované 2017-01-16 z originálu. (po anglicky)
  32. ↑ JRuby 9.2.0.0 Released [online]. [cit. 2018-05-27]. Dostupné online. Archivované 2018-05-27 z originálu. (po anglicky)
  33. ↑ JRuby 9.2.9.0 Released [online]. [cit. 2019-11-05]. Dostupné online. (po anglicky)
  34. ↑ JRuby 9.3.2.0 Released [online]. [cit. 2022-01-11]. Dostupné online. (po anglicky)
  35. ↑ JRuby 9.3.3.0 Released [online]. [cit. 2022-01-19]. Dostupné online. (po anglicky)
  36. ↑ JRuby 9.3.4.0 Released [online]. [cit. 2022-03-23]. Dostupné online. (po anglicky)
  37. ↑ JRuby 9.4.0.0 Released [online]. [cit. 2022-12-01]. Dostupné online. (po anglicky)
  38. ↑ JRuby 9.4.1.0 Released [online]. [cit. 2023-02-15]. Dostupné online. (po anglicky)
  39. ↑ JRuby 9.4.2.0 Released [online]. [cit. 2023-06-13]. Dostupné online. (po anglicky)
  40. ↑ JRuby 9.4.3.0 Released [online]. [cit. 2023-06-13]. Dostupné online. (po anglicky)
  41. ↑ JRuby 10.0.0.0 Released [online]. jruby.org, 2025-04-14, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  42. ↑ JRuby 10.1.0.0 Released [online]. jruby.org, 2026-04-21, [cit. 2026-10-03]. Dostupné online. (po anglicky)
  43. ↑ Ruby & JRuby Support Available in NetBeans IDE [online]. netbeans.org, 2007-03-06, [cit. 2009-07-04]. Dostupné online. Archivované 2011-07-19 z originálu. (po anglicky)
  44. ↑ KRILL, Paul. Ruby brightens the NetBeans platform [online]. infoworld.com, 2007-03-01, [cit. 2008-07-04]. Dostupné online. Archivované 2009-05-02 z originálu. (po anglicky)
  45. ↑ FOX, Joshua. Ruby for the Java world [online]. JavaWorld, 2006-07-17, [cit. 2026-10-20]. Dostupné online. (po anglicky)
  46. ↑ JSR 223: Scripting for the Java Platform Specification Request [online]. Java Community Process. Dostupné online. (po anglicky)
  47. ↑ JRuby.org [online]. jruby.org, [cit. 2026-10-20]. Dostupné online. (po anglicky)
  48. ↑ SIEGER, Nick. JRuby on Rails: Fast Enough [online]. 2007-10-25, [cit. 2007-10-28]. Dostupné online. (po anglicky)
  49. ↑ JRuby compared to Ruby 1.9, Computer Language Benchmarks Game (1) [online]. [cit. 2014-02-02]. Dostupné online. Archivované 2015-01-23 z originálu. (po anglicky)
  50. ↑ JRuby compared to Ruby 1.9, Computer Language Benchmarks Game (2) [online]. [cit. 2014-02-02]. Dostupné online. Archivované 2014-07-23 z originálu. (po anglicky)
  51. ↑ KRČMÁŘ, Petr. Chyby v programovacích jazycích ohrožují bezpečnost aplikací [online]. Root.cz, 2017-12-12, [cit. 2026-10-03]. Dostupné online. (po česky)

Ďalšia literatúra

[upraviť | upraviť zdroj]

Externé odkazy

[upraviť | upraviť zdroj]

Tento článok je čiastočný alebo úplný preklad článku JRuby na anglickej Wikipédii. Tento článok je čiastočný alebo úplný preklad článku JRuby na českej Wikipédii.