Ruby 3.0 Dirilis: 3 Kali Lebih Cepat dari Ruby 2

1 min read

Disclaimer
Saya bekerja di AWS, semua opini adalah dari saya pribadi. (I work for AWS, my opinions are my own.)
Ruby 3.0 dirilis
Ruby 3.0 dirilis dengan fitur JIT

TeknoCerdas.com – Salam cerdas untuk kita semua. Bahasa pemrograman besutan Yukihiro “Matz” Matsumoto, Ruby akhirnya sampai di versi 3. Dilansir dari website resmi ruby-lang.org, Ruby 3.0 dirilis dengan klaim 3 kali lebih cepat dari versi sebelumnya. Dengan peningkatan kecepatan tersebut Ruby versi 3 ini sering disebut juga Ruby 3×3.

Hal utama yang menonjol pada Ruby 3.0 adalah peningkatan performa. Matz sang kreator Ruby pada Ruby 3×3 keynote menyampaikan bahwa banyak yang meragukan jika Ruby akan bisa 3 kali lebih cepat. Termasuk dirinya sendiri dan core team. Tapi akhirnya mereka berhasil, Matz sangat terkesan dengan core team yang akhirnya mampu membuat Ruby 3.0 menjadi 3 kali lebih cepat dari Ruby 2.0.

Baca Juga
Belajar Bahasa Pemrograman Crystal: Bagian 1

 

Target utama yang dicanangkan pada Ruby 3.0.0 adalah:

  • Performa
    • Dengan hadirnya MJIT
  • Concurrency
    • Ractor
    • Fiber Scheduler
  • Typing (Static Analysis)
    • RBS
    • TypeProf

MJIT

JIT pada Ruby 3.0 harusnya memberikan banyak peningkatan terutama pada script yang memanggil beberapa method berkali-kali. Contohnya adalah script games dengan Optcarrot atau AI Rubykon.

Berikut ini adalah benchmark dari Optcarrot yang mengukur performa single-threaded dengan menjalankan sebuah emulasi game NES (Nintendo Entertainment System).

VersiSkor
Ruby 3.0 JIT98.36
Ruby 3.0 (VM)44.67
Ruby 2.0 (VM)32.47
Benchmark Peningkatan Performa Ruby 3

Namun JIT ini tidak terlalu membawa dampak yang signifikan terhadap workload web based app seperti Rails. Dimana sebagian besar script Rails adalah memanggil begitu banyak fungsi sehingga tidak masuk dalam cache yang disediakan oleh JIT.

Hal yang sama juga terjadi pada PHP 8 yang juga mendukung JIT. Artinya ini adalah permasalahan umum yang dihadapi oleh bahasa yang menggunakan interpreter seperti PHP atau Ruby.

Baca Juga
Fitur-fitur baru PHP 8

Ractor

Diera processor multi-core fitur pemrosesan paralel adalah yang harusnya wajib ada pada sebuah bahasa pemrograman.

Ractor adalah sebuah abstraksi concurrency berbasis Actor-model untuk membuat eksekusi berjalan paralel tanpa harus khawatir dengan keamanan thread (thread safety).

Fitur ini masih dilabeli sebagai eksperimental dan belum mencapai tahap stabil. Jadi lebih baik tidak digunakan pada production.

Berikut ini adalah contoh benchmark penggunaan Ractor untuk mengeksekusi secara paralel.

def tarai(x, y, z) =
  x <= y ? y : tarai(tarai(x-1, y, z),
                     tarai(y-1, z, x),
                     tarai(z-1, x, y))
require 'benchmark'
Benchmark.bm do |x|
  # sequential version
  x.report('seq'){ 4.times{ tarai(14, 7, 0) } }

  # parallel version
  x.report('par'){
    4.times.map do
      Ractor.new { tarai(14, 7, 0) }
    end.each(&:take)
  }
end

Hasil benchmark script diatas.

Benchmark result:
          user     system      total        real
seq  64.560736   0.001101  64.561837 ( 64.562194)
par  66.422010   0.015999  66.438009 ( 16.685797)

Fiber Scheduler

Fiber Scheduler digunakan untuk melakukan pencegatan pada operasi yang bersifat blocking. Ini berarti concurrency dapat dilakukan tanpa perlu banyak merubah kode. Salah satu keyword yang dapat digunakan adalah Async.

Berikut adalah contoh kode untuk melakukan non-blocking HTTP request.

require 'async'
require 'net/http'
require 'uri'

Async do
  ["ruby", "rails", "async"].each do |topic|
    Async do
      Net::HTTP.get(URI "https://www.google.com/search?q=#{topic}")
    end
  end
end

Itu adalah beberapa fitur utama yang hadir pada Ruby 3.0. Untuk keseluruhan fitur lengkap anda dapat merujuk ke rilis resminya di ruby-lang.org.