ГоловнаВсі публікаціїКатегоріїПро проєкт

Трохи про типи реалізації Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)

Обкладинка нотатки: Трохи про типи реалізації Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)
Зміст дописунатисність на посилання, щоб перейти до потрібного місця
Ruby - об'єктноорієнтована мова програмування з динамічною типізацією. Вона має декілька варіантів реалізації, які спеціально підлаштовані для окремих середовищ та потреб.

CRuby

Офіційний інтерпретатор - CRuby, також відомий як Matz's (нікнейм Юкіхіро Мацумото, автора рубі) Ruby Interpreter (MRI), є офіційною та найпопулярнішою реалізацією Ruby. Він написаний на C і є стандартом для сумісності різних бібліотек (gem's).
CRuby ідеально підходить для веб-розробки, особливо з використанням фреймворку Ruby on Rails. Підтримує багато бібліотек та має велику еко-систему та ком'юніті.

JRuby

JRuby - це реалізація Ruby, що працює на Java Virtual Machine (JVM). Спрощує інтеграцію з Java-бібліотеками, та дозволяє інтегруватись в існуючу Java систему.
Наприклад, JRuby можна використовувати у великих корпоративних застосунках, де потрібна інтеграція з існуючими  (legacy) Java-системами.

Rubinius

Rubinius використовує LLVM (Low Level Virtual Machine) для компіляції коду і забезпечує багатопотоковість на рівні виконання коду. Rubinius намагається бути повністю сумісним з CRuby, що робить його непоганим варіантом в деяких випадках в якості реалізації інтерпретатора. Rubinius може бути використаний у розробці систем, які потребують обробки паралельних запитів (великої кількості), таких як фонові завдання в веб-застосунках.

TruffleRuby

TruffleRuby - це частина проєкту Oracle Graal і має високу продуктивність завдяки оптимізації на рівні віртуальної машини GraalVM.  TruffleRuby підходить для обробки великих обсягів даних (наприклад - наукових досліджень), де потрібна максимальна швидкість виконання і зменшення витрат на обчислювальні ресурси.

mruby

mruby - це легка версія Ruby, призначена для вбудованих систем. Вона має менший розмір і менше споживає ресурсів, що робить її ідеальною для обмежених середовищ. mruby може бути використана у вбудованих системах, таких як мікроконтролери або інші портативні пристрої, де потрібно мінімізувати споживання пам'яті. 

Чи можна запустити Ruby в браузері?

Ruby не виконується безпосередньо в браузері, як це можливо з JavaScript. Існує кілька підходів та інструментів, які дозволяють запускати Ruby в браузері.
Opal - це компілятор, який перетворює код Ruby на JavaScript, що дозволяє вам писати фронтенд-логіку на Ruby, а потім виконувати її у браузері як JavaScript. Opal обробляє Ruby код і перетворює його на оптимізований JavaScript, забезпечуючи велику частину функціональності Ruby.
Наприклад, на сайті Opal ви можете протестувати роботу та наочно побачити приклад роботи компілятора та того як Ruby код перетворюється на JS та виконується в браузере. Простий приклад:
Конвертуємо Ruby в JS за допомогою Opal
Конвертуємо Ruby в JS за допомогою Opal
Ruby:
def title(s)
  puts "title is #{s}"
end

puts title('hehe')
JS на виході:
Opal.queue(function(Opal) {/* Generated by Opal 1.8.2 */
  var $def = Opal.def, self = Opal.top, nil = Opal.nil;

  Opal.add_stubs('puts,title');
  
  
  $def(self, '$title', function $$title(s) {
    var self = this;

    return self.$puts("title is " + (s))
  });
  return self.$puts(self.$title("hehe"));
});
І результат:
title is hehe
WebAssembly (Wasm) - це інструмент, який може скомпілювати код реалізації мови програмування та запустити в браузері. Це не прямий запуск Ruby в браузері. Це доволі складно, але можливо. Один з варіантів може виглядати так: mruby конвертується в C, а WebAssembly вже конвертує код у JavaScript, який вже можна запустити в бразері.
Існують й інші варіанти компіляції та запуску рубі коду в браузері. Але і так можна зрозуміти, що наразі немає можливості прямого запуску ruby-коду в браузері.

Як перевірити яку реалізацію Ruby я використовую?

Все просто - запускаємо в терміналі команду, щоб побачити версію ruby, реалізацію та архітектуру.
ruby -e "puts RUBY_DESCRIPTION"
В моєму випадку:
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [x86_64-darwin22]
Під ruby - мається на увазі дефолтна реалізація (CRuby).
Для JRuby буде приблизно такий результат:
jruby 9.2.11.1 (2.5.7) 2020-03-02 d8d4b94 OpenJDK 64-Bit Server VM 11.0.6+10-post-Ubuntu-1ubuntu118.04.1 on 11.0.6+10-post-Ubuntu-1ubuntu118.04.1 +jit [linux-x86_64]
Тобто тут ми наочно бачимо текст jruby.
18.04.2024 05:27

Фіксимо ActiveRecord::ProtectedEnvironmentError у локальному середовищі

meme code
meme code@memecode
18.04.2024 06:06

Розбираємо помилку PG::ObjectInUse (Ruby on Rails)

meme code
meme code@memecode
27.04.2024 09:29

Що таке CC та BCC в емейлах? Для чого та як використовувати?

meme code
meme code@memecode
Що таке промпт (prompt) та промпт-інжинірінг?
03.05.2024 12:08

Що таке промпт (prompt) та промпт-інжинірінг?

meme code
meme code@memecode
ZOMBIE в Ruby. Що це таке?
03.05.2024 12:41

ZOMBIE в Ruby. Що це таке?

meme code
meme code@memecode
03.05.2024 13:13

Що таке Garbage Collector у Ruby? Як працює та для чого потрібен GC?

meme code
meme code@memecode
07.05.2024 07:24

Що таке нативний машинний код?

meme code
meme code@memecode
Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)
08.05.2024 07:57

Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)

meme code
meme code@memecode
09.05.2024 12:43

[Фікс] Rails Admin - undefined local variable or method javascript_importmap_shim_nonce_configuration_tag

meme code
meme code@memecode
Що таке технічний борг (technical debt) в IT проєктах?
13.05.2024 06:17

Що таке технічний борг (technical debt) в IT проєктах?

meme code
meme code@memecode
13.05.2024 07:11

Що означає скоуп (scope) в управлінні IT-проєктами?

meme code
meme code@memecode
Що таке "розповзання скоупу" (Scope Creep / Скоуп кріп)?
13.05.2024 07:20

Що таке "розповзання скоупу" (Scope Creep / Скоуп кріп)?

meme code
meme code@memecode