Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Trochę o typach implementacji Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)

Okładka posta: Trochę o typach implementacji Ruby (CRuby (MRI), JRuby, Rubinius, TruffleRuby, mruby)
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Ruby - obiektowo-orientowany język programowania z dynamicznym typowaniem. Ma kilka wariantów implementacji, które są specjalnie dostosowane do różnych środowisk i potrzeb.

CRuby

Oficjalny interpreter - CRuby, znany również jako Matz's (pseudonim Yukihiro Matsumoto, autora Ruby) Ruby Interpreter (MRI), jest oficjalną i najpopularniejszą implementacją Ruby. Został napisany w C i jest standardem dla zgodności różnych bibliotek (gemów).
CRuby idealnie nadaje się do tworzenia aplikacji internetowych, szczególnie przy użyciu frameworka Ruby on Rails. Wspiera wiele bibliotek i ma dużą ekosystem oraz społeczność.

JRuby

JRuby - to implementacja Ruby, która działa na Java Virtual Machine (JVM). Ułatwia integrację z bibliotekami Java i pozwala na integrację z istniejącymi systemami Java.
Na przykład, JRuby można używać w dużych aplikacjach korporacyjnych, gdzie potrzebna jest integracja z istniejącymi (legacy) systemami Java.

Rubinius

Rubinius wykorzystuje LLVM (Low Level Virtual Machine) do kompilacji kodu i zapewnia wielowątkowość na poziomie wykonania kodu. Rubinius stara się być w pełni zgodny z CRuby, co czyni go dobrym wyborem w niektórych przypadkach jako implementacja interpretera. Rubinius może być używany w systemach, które wymagają przetwarzania równoległych zapytań (dużej liczby), takich jak zadania w tle w aplikacjach internetowych.

TruffleRuby

TruffleRuby - to część projektu Oracle Graal i ma wysoką wydajność dzięki optymalizacji na poziomie wirtualnej maszyny GraalVM. TruffleRuby nadaje się do przetwarzania dużych ilości danych (na przykład - badań naukowych), gdzie wymagana jest maksymalna szybkość wykonania i zmniejszenie kosztów zasobów obliczeniowych.

mruby

mruby - to lekka wersja Ruby, przeznaczona dla systemów wbudowanych. Ma mniejszy rozmiar i zużywa mniej zasobów, co czyni ją idealną dla ograniczonych środowisk. mruby może być używana w systemach wbudowanych, takich jak mikrokontrolery lub inne przenośne urządzenia, gdzie trzeba zminimalizować zużycie pamięci.

Czy można uruchomić Ruby w przeglądarce?

Ruby nie jest wykonywane bezpośrednio w przeglądarce, jak to ma miejsce w przypadku JavaScript. Istnieje kilka podejść i narzędzi, które pozwalają na uruchamianie Ruby w przeglądarce.
Opal - to kompilator, który przekształca kod Ruby na JavaScript, co pozwala na pisanie logiki frontendowej w Ruby, a następnie wykonywanie jej w przeglądarce jako JavaScript. Opal przetwarza kod Ruby i przekształca go na zoptymalizowany JavaScript, zapewniając dużą część funkcjonalności Ruby.
Na przykład, na stronie Opal można przetestować działanie i zobaczyć przykład działania kompilatora oraz to, jak kod Ruby jest przekształcany na JS i wykonywany w przeglądarce. Prosty przykład:
Конвертуємо Ruby в JS за допомогою Opal
Конвертуємо Ruby в JS за допомогою Opal
Ruby:
def title(s)
  puts "title is #{s}"
end

puts title('hehe')
JS na wyjściu:
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"));
});
I wynik:
title is hehe
WebAssembly (Wasm) - to narzędzie, które może skompilować kod implementacji języka programowania i uruchomić go w przeglądarce. To nie jest bezpośrednie uruchomienie Ruby w przeglądarce. Jest to dość skomplikowane, ale możliwe. Jedna z opcji może wyglądać tak: mruby jest konwertowane na C, a WebAssembly już konwertuje kod na JavaScript, który można już uruchomić w przeglądarce.
Istnieją również inne opcje kompilacji i uruchamiania kodu Ruby w przeglądarce. Ale można zrozumieć, że obecnie nie ma możliwości bezpośredniego uruchomienia kodu Ruby w przeglądarce.

Jak sprawdzić, którą implementację Ruby używam?

To proste - uruchamiamy w terminalu polecenie, aby zobaczyć wersję ruby, implementację i architekturę.
ruby -e "puts RUBY_DESCRIPTION"
W moim przypadku:
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [x86_64-darwin22]
Pod ruby - rozumie się domyślną implementację (CRuby).
Dla JRuby wynik będzie mniej więcej taki:
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]
To znaczy, tutaj wyraźnie widzimy tekst jruby.

Ten post nie ma jeszcze żadnych dodatków od autora.

18 kwi 05:27

Naprawiamy ActiveRecord::ProtectedEnvironmentError w lokalnym środowisku

meme code
meme code@memecode
18 kwi 06:06

Rozbieramy błąd PG::ObjectInUse (Ruby on Rails)

meme code
meme code@memecode
27 kwi 09:29

Co to jest CC i BCC w e-mailach? Do czego i jak ich używać?

meme code
meme code@memecode
Czym jest prompt (prompt) i inżynieria promptów?
3 maj 12:08

Czym jest prompt (prompt) i inżynieria promptów?

meme code
meme code@memecode
ZOMBIE w Ruby. Co to jest?
3 maj 12:41

ZOMBIE w Ruby. Co to jest?

meme code
meme code@memecode
3 maj 13:13

Czym jest Garbage Collector w Ruby? Jak działa i do czego potrzebny jest GC?

meme code
meme code@memecode
7 maj 07:24

Czym jest natywny kod maszynowy?

meme code
meme code@memecode
Włączamy YJIT w Ruby 3.2.1 (Ruby on Rails)
8 maj 07:57

Włączamy YJIT w Ruby 3.2.1 (Ruby on Rails)

meme code
meme code@memecode
9 maj 12:43

[Fix] Rails Admin - niezdefiniowana lokalna zmienna lub metoda javascript_importmap_shim_nonce_configuration_tag

meme code
meme code@memecode
Czym jest dług techniczny (technical debt) w projektach IT?
13 maj 06:17

Czym jest dług techniczny (technical debt) w projektach IT?

meme code
meme code@memecode
13 maj 07:11

Co oznacza zakres (scope) w zarządzaniu projektami IT?

meme code
meme code@memecode
Co to jest "rozprzestrzenienie zakresu" (Scope Creep / Skołp krip)?
13 maj 07:20

Co to jest "rozprzestrzenienie zakresu" (Scope Creep / Skołp krip)?

meme code
meme code@memecode