Точно както има много нюанси на рубинения скъпоценен камък , има множество реализации на интерпретатора Ruby.
Най-често използваният интерпретатор на Ruby е референтната реализация, ЯМР Руби , разработен в C от създателя на Ruby (Yukihiro Matsumoto) и основния екип на Ruby.
Нашите Ръководство за наемане на Ruby on Rails споменава, че някои от недостатъците в Rails могат потенциално да бъдат решени или избегнати чрез използване на алтернативен интерпретатор на Ruby. Тази статия представя различните съществуващи реализации и изпълнения на интерпретатора на Ruby, налични днес, като обсъжда предимствата и недостатъците на всеки от тях.
какво е bootstrap тема
За съжаление няма еквивалент на Справочник за езика на Python за Руби ( ISO / IEC 30170: 2012 описва Ruby 1.8 / Ruby 1.9, но не съществуват съответни спецификации за Ruby 2.x). При липса на такава езикова спецификация, внедряващите Ruby обикновено разчитат вместо това на общността RubySpec който определя очакваното поведение на езика Ruby чрез тестове, които могат да се изпълняват във всеки интерпретатор на Ruby. Следователно RubySpec се използва от Ruby внедряващите, за да провери поведенческото съответствие на техните реализации на Ruby с де факто стандарта.
Поради липсата на официална спецификация, новите версии на Ruby често просто съответстват на новите версии на Ruby MRI. Заслужава да се отбележи, че има отворен брой който обсъжда процес на проектиране за отделяне на Ruby (езика) от Ruby MRI.
Като се има предвид сегашната тясна връзка между езика Ruby и референтната реализация на MRI, разработчиците на алтернативни реализации на Ruby понякога се борят, за да се справят с езиковите промени, въведени във всяка нова MRI версия.
Никога това не беше по-трудно, отколкото при прехода между Ruby 1.8 и Ruby 1.9. През 2007 г., в опит да изчисти и консолидира синтаксиса на Ruby (тъй като езикът се е развил през десетилетието след пускането на Ruby 1.0), основният екип на Ruby пусна Ruby 1.9.0, версия, която представи много обратно несъвместимост с езика. В резултат на това не всички реализации на Ruby са вложили необходимите усилия, за да направят синтактичния скок от 1,8 на 1,9. Като такива има няколко внедрени Ruby базирани на 1.8, които вече не се използват от общността, но които все още можете да намерите онлайн или за които да говорите от старите ръце на Ruby.
Всяка Коледа излиза нова версия на Ruby MRI, следвайки семантичен принцип на версиите. Ruby 2.0 (издаден 2013 г.) и 2.1 (издаден 2014 г.) представиха допълнителни езикови функции, които Разработчици на Ruby може да се възползва, без да се лишава от обратна съвместимост с Ruby 1.9.
Съществуват различни алтернативни реализации на Ruby, поддържащи широк спектър от случаи на употреба и среди. Java Enterprise среди. Мобилни приложения. Приложения на JavaScript. Ниски CPU / RAM машини. В допълнение към поддържането на тези случаи на използване, алтернативните внедрения понякога могат да предложат допълнителен тласък в скоростта или по-ефективно използване на паметта, в зависимост от характеристиките на вашето приложение.
От много време много Рубин на релси разработчици, използвани Ruby Enterprise Edition (REE) вместо ЯМР, като се възползвате от по-добрите техники за управление на паметта в REE в сравнение с версията на ЯМР по това време. (Впоследствие REE беше прекратено през 2012 г.)
Въпреки че MRI е стандартното внедряване на Ruby, това не е непременно правилният избор за всички среди и сценарии. Например, паралелната поддръжка на MRI е по-ниска от тази на JRuby или Rubinius. Също така, въпреки че схемите на MRI за памет и събиране на боклука непрекъснато се подобряват, те все още имат някои проблеми.
Следващото проучване на внедренията на Ruby има за цел да ви помогне при избора на преводач, най-подходящ за оперативните цели и ограничения на вашия проект.
Написано на C от основния екип на Ruby, ръководен от Yukihiro Matsumoto (“Matz”, създателят на Ruby), MRI е референтната реализация на Ruby, която служи като фактически стандарт. Ако доставчик на операционна система включва версия на Ruby като част от инсталирания на ОС софтуер, например, това обикновено е MRI версията. ЯМР се възползва от по-платени членове на основния екип, отколкото всяко друго внедряване на Ruby, както и предоставени ресурси от хора или компании, които искат да подобрят екосистемата на Ruby.
пенсионни общности с нестопанска цел
Всяка Коледа излиза нова версия на Ruby MRI - често прилагаща нови езикови функции, в допълнение към стандартните промени в библиотеката. Функциите се прилагат първо в Ruby MRI, обикновено въз основа на дискусии върху Пощенски списък за разработчици на Ruby core . Други внедрения на Ruby изостават, в някои случаи дори по години.
JRuby е версия на Ruby, внедрена отгоре на Java виртуална машина (JVM) . Тъй като става популярно за езици отвъд само Java да работят върху JVM (гледам във вашата посока, Clojure и Стълба ), реализацията на Ruby, базирана на JVM, вероятно ще спечели популярност.
Ruby в JVM също означава, че Ruby може да работи навсякъде, където може да работи Java (като телефони с Android, използвайки Рубото например). Освен това, благодарение на оперативната съвместимост на JVM, кодът на JRuby може да използва платформата Java, включително стандартни библиотеки и библиотеки на трети страни.
JRuby е полезен и за въвеждане на базирано на Rails решение в среда за внедряване само на Java, опаковане на приложението Rails като .war
файл за разполагане в Tomcat контейнер или като Java аплет, работещ като част от вашия уеб интерфейс, например.
За тези, които не са свикнали с JVM обаче, JRuby предлага стандартни проблеми, свързани с JVM, като бавно стартиране на интерпретатора Ruby, отстраняване на грешки в CLASSPATH, ако използвате Java библиотеки на трети страни, по-голямо използване на паметта и факта, че сега вашият код трябва да се напише, като се имат предвид съображения за безопасност на нишките.
Също така, някои функции на Ruby (C API и един от мощните инструменти за самоанализ на Ruby, ObjectSpace модул) не се изпълняват в JRuby.
Всичко това каза, че предимствата от използването на JVM могат да надвишат недостатъците за определени ситуации или проекти. JVM позволява много оптимизации на производителността, като включване на JIT компилатора или използване на собствени Java обекти и API.
Като пример за убедителен случай на използване на JRuby, бивш мой колега веднъж имаше проблем с CPU, който първоначално реши с нишки в Ruby 1.9.3. Когато премина към JRuby и използва Java's java.util.concurrent.Executors
, той видя подобрение на производителността с множество порядъци (десетки хиляди пъти по-бързо) за тази операция. Вижте експеримента му тук .
Рубиний е реализация на Ruby, която внедрява общо изпълнение за динамични езици върху a Виртуална машина с ниско ниво (LLVM) . Използвайки тази инфраструктура и JIT компилаторна технология, Rubinius често може да изпълнява Ruby код с по-малко режийни разходи от MRI.
Rubinius също е създаден, използвайки възможно най-много Ruby, за да направи по-бързо и по-лесно развитието на интерпретатора / времето за изпълнение.
Забавен факт: RubySpec първоначално се появи в процеса на внедряване на Rubinius.
Подобно на JRuby, Rubinius включва JIT компилатор, по-добро управление на паметта и по-зряла виртуална машина от Ruby MRI. Въпреки това, за разлика от JRuby, Rubinius поддържа Ruby C библиотеки и основите на Rubinius са написани на C ++, а не на Java.
Rubinius може да е добър посредник, когато имате нужда от висока производителност на вашите Rails сървъри без кривата на обучение или други недостатъци на JRuby.
мруби е проектиран да бъде вградена версия на Ruby (поддържаща Ruby 1.9.3). С mruby можете да предложите Ruby като език за скриптове / автоматизация в родните приложения, да го използвате за скриптове на игри и дори за програмиране на платки за микроконтролер като Raspberry Pi .
Ако вашата платформа има сериозни ограничения на ресурсите, mruby може да е просто интерпретаторът на Ruby за вас. mruby също се използва за:
С Интернет на нещата превръщайки се все повече в реалност, автоматизацията на дома се превръща в свои собствени и изключително преносимите (и относително мощни) компютри са все по-често срещани, пейзажът на целевите платформи за поддръжка става все по-разнообразен. mruby помага да се направи това със същия продуктивен език, който би се използвал на работния плот.
Опал е плейър за да превърнете Ruby в JavaScript.
как да C++
С възхода на Coffeescript , разработчиците научават, че не трябва да въвеждат JavaScript вземете JavaScript. Въпреки че Coffeescript несъмнено има своите предимства, използвайте го достатъчно дълго и непременно ще срещнете неща, които не харесвате в езика.
Въведете Opal: Напишете Ruby, вземете Javascript . Много готино.
Opal се стреми да бъде максимално последователен с други внедрения на Ruby и следователно е тестван и срещу подмножество на RubySpec. Съществуват обаче някои несъвместимости, произтичащи от естеството на JavaScript и времената на изпълнение на JavaScript. Например низовете и символите в Opal са равни и Opal не предоставя никакви механизми за изпълнение на резби или черупки.
Opal работи самостоятелно или може да се използва като част от Тръбопровод за активи на релси (напр. за автоматично транспилиране на вашия somefile.js.rb
файл в JavaScript).
Може би имате проблемен домейн, подходящ за асинхронния модел на паралелна съвпадение на JavaScript (като малка услуга Node.js), но искате езика или някои скъпоценни камъни от пространството Ruby. Opal може да е добро решение за вас в такъв случай.
Или може би искате да напишете пълен стек уеб приложение Ruby. С Opal можете. Накарайте един интерпретатор на Ruby да изпълнява вашия Ruby код от страна на сървъра и след това да има Opal, генериращ JavaScript, за да се изпълнява от страна на клиента.
Opal осъзнава, че вероятно ще си взаимодействате с други API на JavaScript (DOM или Node.js например). Следователно улеснява преминаването в JavaScript и предоставя някои Ruby синтактична захар в сравнение с обикновени JavaScript библиотеки като jQuery .
Природата на Opal, ориентирана към JavaScript, е както неговата сила, така и неговата слабост. Недостатъкът на изпълнението на Opal е времето на изпълнение на JavaScript и Opal се информира от решенията за дизайн на JavaScript. Така че, ако търсите добра реализация на Ruby, за да напишете малък скрипт с черупки, или търсите по-добро време за изпълнение на Ruby за вашето приложение Rails, Opal вероятно не е най-добрият ви избор.
RubyMotion е едновременно (а) реализация на Ruby (написана с помощта на Objective-C и Какао ) и (b) набор от езикови обвързвания, така че разработчиците да имат достъп до API за какао чрез Ruby.
RubyMotion е търговски продукт, който ви позволява да пишете собствени приложения за какао в Ruby. RubyMotion 2.0 ви позволява да пишете приложения за iOS и Mac OS X в Ruby, а RubyMotion 3 обещава да предостави същата тази поддръжка на Android.
RubyMotion изпълнява версия 1.9 на езика Ruby.
През годините, откакто Ruby е въведена за първи път, някои от внедрените Ruby, които са се появили, са изоставени или прекратени, като:
Има голямо разнообразие от изпълнения и преводачи, от които да избирате в пейзажа на Ruby. За повечето Руби проекти , референтната реализация на Ruby (Ruby MRI) остава избраният интерпретатор. Въпреки това алтернативните внедрения на Ruby могат много добре да бъдат правилният избор за вашия проект, в зависимост от вашите функционални и технически цели и ограничения.
В ролята си на референтна реализация на Ruby, MRI получава по-бързо нови езикови функции, има достатъчно добри съвпадение и истории за паметта (които само се подобряват) и има най-широката съвместимост със скъпоценни камъни (някои частично написани на C). Като цяло, ЯМР е солиден, надежден избор за Ruby код с общо предназначение.
как да се подготвим за Aws сертифициране
За по-големи корпоративни внедрявания или за ситуации, в които или трябва да взаимодействате с Java код (или други JVM езици), или се нуждаете от силно развити паралелни модели, JRuby е завладяваща опция.
И разбира се, ако имате уникални нужди (например писане на JavaScript, работа на текущото поколение вградени устройства и т.н.), другите алтернативи на Ruby може да са точно това, което търсите.
С голямо разнообразие от време за изпълнение и интерпретатори на Ruby, от които можете да избирате, Ruby се показва като гъвкав език, полезен за широк спектър от изчислителни среди, вариращи от корпоративен голям железен магазин за внедряване на Java, до софтуер, който контролира стоп-сигнала във вашия офис закачихте своя Raspberry Pi в миналия уикенд. Изборът на правилния инструмент за правилната цел е от съществено значение, да, но се надяваме, че тази статия ви е показала, че Ruby е много повече от стандартния интерпретатор на Ruby, който се доставя с вашата операционна система.
Светът на Ruby е значително подобрен от алтернативни екипи за внедряване на Ruby, работещи с основния екип на Ruby MRI, тъй като се предлагат промени в езика. Те добавят разнообразие към общността за внедряване на Ruby, добавяйки трудно спечеления опит за внедряване на Ruby и собствените си перспективи за функции, които влизат в езика. Любителите на Ruby колективно дължат на тези отбори голяма благодарност. Поздрави за усилията им!