Кіріспе

Ruby-дің Java нұсқасы JRuby – Java виртуалды машинасы негізінде, көбінесе Java тілінде жазылған Ruby бағдарламалау тілінің іске асырылуы. Бұл үш түрлі EPL/GPL/LGPL лицензиясымен таратылатын ақысыз бағдарламалық қамтамасыз ету. JRuby Java-мен тығыз байланысты, бұл интерпретаторды кез келген Java қолданбасына Java және Ruby кодтарының толық екі жақты қолжетімділігімен ендіруге мүмкіндік береді (Python тілі үшін Jython сияқты). JRuby-дің бас дамытушылары – Чарльз Оливер Наттер және Томас Энебо, ал көптеген қазіргі және бұрынғы қатысушылардың арасында Ола Бини және Ник Сигер бар. 2006 жылдың қыркүйегінде Sun Microsystems Энебо мен Наттерді JRuby-ді толық уақыт дамыту үшін жұмысқа алды. 2007 жылдың маусым айында ThoughtWorks Ола Биниді Ruby және JRuby бағдарламаларын дамыту үшін жұмысқа алды. 2009 жылдың шілдесінде JRuby дамытушылары Sun компаниясынан Engine Yard-қа JRuby-ді дамытуды жалғастыру үшін кетті. 2012 жылдың мамырында Наттер мен Энебо Red Hat компаниясында JRuby-ді дамыту үшін Engine Yard-тан кетті.

Тарих

JRuby 2001 жылы Ян Арне Петерсен жасаған. Сол кезде және одан кейінгі бірнеше жылдар бойы код Ruby 1.6 C кодының тікелей көшірмесі болды. Ruby 1.8.6 нұсқасы шыққаннан бастап JRuby-ді 1.8.6 мүмкіндіктері мен семантикасына жаңарту жұмыстары басталды. 2001 жылдан бері бірнеше адам жобаға көмектесті, нәтижесінде қазіргі (2012) негізгі команда шамамен алты мүшеден тұрады. JRuby 1.1 JRuby-ге уақытша компиляция және алдын ала компиляция режимдерін қосты және сол кездегі Ruby 1.8.7 эталондық нұсқасына қарағанда көп жағдайда жылдам болды. JRuby пакеттері көптеген платформалар үшін қолжетімді; Fedora 9 JRuby 1.1.1 нұсқасын стандартты пакет ретінде енгізген алғашқылардың бірі болды. 2009 жылдың шілдесінде Sun Microsystems компаниясының негізгі JRuby әзірлеушілері Чарльз Оливер Наттер, Томас Энебо және Ник Сигер JRuby-ді дамытуды жалғастыру үшін Engine Yard компаниясына қосылды. 2012 жылдың мамыр айында Наттер мен Энебо Red Hat компаниясында JRuby-ді дамыту үшін Engine Yard компаниясынан кетті.

Рельсті рубин

JRuby 0.9 нұсқасынан бастап (2006 жылдың мамыр айы) Ruby on Rails веб-фреймворкін, RubyGems және WEBrick-ті іске қосуға мүмкіндік берді. Sun компаниясы екі жетекші әзірлеушіні жұмысқа алғаннан кейін Rails үйлесімділігі мен жылдамдығы едәуір жақсарды. JRuby 1.0 нұсқасы Rails-тің көптеген тестілеу жағдайларын сәтті өтті. Осыдан кейін әзірлеушілер JRuby-ді Rails қолданбаларын өндірістік ортада пайдалана бастады.

Бірнеше виртуалды машинаның бірігіп жұмыс істеуі

2008 жылдың 27 ақпанында Sun Microsystems және Токио университеті бір интерпретаторда бірнеше Ruby немесе JRuby қолданбасын іске асыруға мүмкіндік беретін виртуалды машинаны жүзеге асыру бойынша бірлескен зерттеу жобасын жариялады.

Дизайн

2006 жылдың басынан бері қазіргі JRuby негізгі командасы JRuby-ді қарапайым C портынан асырып, жақсы өнімділікті қамтамасыз ету және Java байт-кодына компиляциялауға көмектесу үшін күш салып келеді. Осы мақсатқа жету үшін команда амбициялы міндет қойды: JRuby-ді пайдаланып, Ruby on Rails-ті ешқандай өзгеріссіз іске қосуға мүмкіндік беру. Осы міндетті орындау процесінде JRuby тестілеу жиынтығы осыншалықты кеңейді, команда JRuby-дің "дұрыстығына" сенімді болды. Осының нәтижесінде, 2006 жылдың соңында және 2007 жылдың басында олар JRuby-дің негізгі подсистемаларын күрделі қайта жобалау және қайта құру жұмыстарын бастады. JRuby Ruby үшін аралас режимдегі виртуалды машина ретінде жұмыс істеуге арналған, онда код тікелей интерпретациялануы мүмкін, орындалу кезінде Java байт-кодына уақытында компиляциялануы немесе орындалу алдында Java байт-кодына алдын ала компиляциялануы мүмкін. 2007 жылдың қазанына дейін барлық Ruby құрылымдарын тек интерпретацияланған режим ғана қолдады, бірақ 1.1 нұсқасынан бастап толық AOT/JIT компиляторы қолжетімді болды. Компилятордың дизайны интерпретацияланған және компиляцияланған кодты қатар іске қосуға, сондай-ақ қайта оңтайландыру және генерирленген байт-кодты Java кластық файлдары түрінде шығару үшін декомпиляциялауға мүмкіндік береді.

Нысандарды қолдау

JRuby Rails, RSpec, Rake және RubyGems қолдауын қамтиды. Ол C кітапханаларын асыл тастар түрінде пайдалануға мүмкіндік беретін FFI (шетелдік функциялар интерфейсі) жүйесін қосады. Бұл сонымен қатар, Ruby MRI сияқты, интерактивті Ruby Shell (irb) іске қосуға да мүмкіндік береді. NetBeans 6 нұсқасында қолжетімді NetBeans Ruby Pack, Ruby және JRuby, сондай-ақ Ruby-дің екі түрі үшін Ruby on Rails-пен IDE әзірлеуге мүмкіндік береді. NetBeans 7.0 және одан кейінгі нұсқаларында ол енді қолжетімді емес.

Руби мен Ява

JRuby стандартты Ruby интерпретаторына ұқсас, бірақ Java тілінде жазылған. JRuby-де объектіге бағытталған бағдарламалау және динамикалық типтеу сияқты Ruby-дегідей ұғымдар бар. Басты ерекшелік – JRuby Java-мен тығыз байланысты және Java бағдарламаларынан тікелей шақырылуы мүмкін. Java веб-қосымшаларын жасауда маңызды рөл атқарады.

Өнер көрсету

Кейбір өлшемдерге сәйкес, JRuby басқа нұсқалардан жылдам. Бірақ, іске қосылмас бұрын жүктелген код мөлшеріне байланысты әртүрлі нұсқалардың өнімділігін бағалау әдістері нәтижелерді бұрмалауы мүмкін. Бенчмарктерді есептегенде, Java виртуалды машинасының жүктелу уақыты көбінесе ескерілмейді. JRuby-дің маңызды архитектуралық артықшылығы – ол жаһандық интерпретатор құлыптауына шектелмей (Rubinius сияқты), JVM жиектерін пайдалана алады, соның арқасында процесте толық параллелизмге жетеді, ал Ruby MRI операциялық жүйе жиектерін пайдаланса да, мұндай мүмкіндікке ие емес. 2007 жылы сынақтан өткен Mongrel веб-серверінің нақты қолданбасында, Java виртуалды машинасы іске қосылғаннан кейін JRuby-дің өнімділігі Ruby MRI 1.8-ден жоғары болды. 2007 жылғы Ruby нұсқаларының салыстыруында JRuby кейбір сынақтарда Ruby MRI 1.8-ден жылдам болды, бірақ YARV екеуінен де озып кетті. 2014 жылғы сәуір айына қарай, Компьютерлік тілдердің бенчмарк ойындарында JRuby 1.7.4 әдетте Ruby MRI 2.1.0 сияқты өнімділік көрсетеді, бірақ көбірек жадты пайдаланады.