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).
Versi | Skor |
Ruby 3.0 JIT | 98.36 |
Ruby 3.0 (VM) | 44.67 |
Ruby 2.0 (VM) | 32.47 |
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.