Обкладинка нотатки: Трохи про типи реалізації 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.

🙌 Підтримати блог @memecode

Ви можете поширити цей допис у соцмережах, чим допоможете платформі цейво розвиватись (* ^ ω ^)

📝 Більше публікацій:
Дисклеймер

Інформація на сайті tseivo.com є суб'єктивною та відображає особисті погляди та досвід авторів та авторок блогів.

Використовуйте цей ресурс як одне з декількох джерел інформації під час своїх досліджень та прийняття рішень. Завжди застосовуйте критичне мислення. Людина сама несе відповідальність за свої рішення та дії.