All original content is created in Ukrainian. Not all content has been translated yet. Some posts may only be available in Ukrainian.Learn more

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

Post cover: Трохи про типи реалізації Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)
This content has not been translated yet.We're showing the original Ukrainian content below.
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.

This post doesn't have any additions from the author yet.

18 Apr 05:27

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

meme code
meme code@memecode
18 Apr 06:06

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

meme code
meme code@memecode
27 Apr 09:29

What are CC and BCC in emails? What and how to use?

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

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

meme code
meme code@memecode
ZOMBIE in Ruby. What is it?
03 May 12:41

ZOMBIE in Ruby. What is it?

meme code
meme code@memecode
03 May 13:13

What is Garbage Collector in Ruby? How does it work and why do you need GC?

meme code
meme code@memecode
07 May 07:24

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

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

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

meme code
meme code@memecode
09 May 12:43

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

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

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

meme code
meme code@memecode
13 May 07:11

What does scope mean in IT project management?

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

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

meme code
meme code@memecode