Setelah satu tahun pembangunan diterbitkan melepaskan Ruby 2.7.0, bahasa pemrograman berorientasi objek dinamis yang sangat efisien dalam pengembangan program dan menggabungkan fitur terbaik Perl, Java, Python, Smalltalk, Eiffel, Ada dan Lisp. Kode proyek didistribusikan di bawah lisensi BSD ("2-clause BSDL") dan "Ruby", yang mengacu pada versi terbaru lisensi GPL dan sepenuhnya kompatibel dengan GPLv3. Ruby 2.7 adalah rilis besar ketujuh yang diproduksi sebagai bagian dari proses pengembangan terencana yang mencakup penyisihan satu tahun untuk peningkatan fitur dan rilis patch 2-3 bulan.
eksperimental mendukung pencocokan pola (Pencocokan pola) untuk mengulangi objek tertentu dan memberikan nilai jika ada pola yang cocok.
kasus [0, [1, 2, 3]] di [a, [b, *c]] pa #=> 0
hal #=> 1
pc #=> [2, 3] selesai
kasus {a: 0, b: 1}
dalam{a:0,x:1}
: tidak dapat dijangkau
dalam {a: 0, b: var}
p var #=> 1
akhir
Shell perhitungan interaktif irb (REPL, Read-Eval-Print-Loop) sekarang memiliki kemungkinan pengeditan multi-baris, diimplementasikan menggunakan perpustakaan yang kompatibel dengan readline garis ulangditulis dalam Ruby. Dukungan untuk rdoc telah terintegrasi, yang memungkinkan melihat informasi referensi tentang kelas, modul, dan metode tertentu di irb. Sorotan berwarna pada baris dengan kode yang ditunjukkan melalui Binding#irb dan hasil pemeriksaan objek kelas dasar disediakan.
Menambahkan pengumpul sampah kompak (Compaction GC) yang dapat mendefrag suatu wilayah memori, memecahkan masalah kinerja lambat dan peningkatan konsumsi memori karena fragmentasi memori yang terjadi selama pengoperasian beberapa aplikasi Ruby multi-thread. Untuk mengemas objek di heap diajukan Metode GC.compact untuk mengurangi jumlah halaman memori yang digunakan dan mengoptimalkan heap untuk operasi
Kontrak Karya (copy-on-write).
Dilakukan bersiap untuk memisahkan argumen berdasarkan posisi dalam daftar ("def foo(a,b,c)") dan kata kunci ("def foo(key: val)"). Konversi argumen otomatis berdasarkan kata kunci dan posisi sudah tidak digunakan lagi dan tidak akan didukung di cabang Ruby 3.0. Secara khusus, penggunaan argumen terakhir sebagai parameter kata kunci, meneruskan argumen berbasis kata kunci sebagai parameter hash terakhir, dan membagi argumen terakhir menjadi parameter posisi dan kata kunci sudah tidak digunakan lagi.
Panggilan metode pribadi diperbolehkan dengan literal "mandiri".
defoo
akhir
pribadi :foo
diri.foo
Menambahkan metode Enumerator::Lazy#eager untuk menghasilkan enumerasi reguler dari enumerasi malas (Enumerator::Lazy).
a = %w(foo bar baz)
e = a.malas.peta {|x| x.upcase }.peta {|x| x + "!" }.ingin sekali
p e.class #=> Enumerator
e.peta {|x| x + "?" } #=> [βFOO!?β, βBAR!?β, βBAZ!?β]
Pengembangan kompiler JIT eksperimental terus berlanjut, yang secara signifikan dapat meningkatkan kinerja aplikasi dalam bahasa Ruby. Kompiler JIT yang diusulkan di Ruby pertama-tama menulis kode C ke disk, setelah itu memanggil kompiler C eksternal untuk menghasilkan instruksi mesin (mendukung GCC, Clang, dan Microsoft VC++). Versi baru mengimplementasikan metode penerapan inline jika diperlukan, penerapan mode optimasi secara selektif selama kompilasi, nilai default "--jit-min-calls" ditingkatkan dari 5 menjadi 10000, dan "--jit-max-cache" dari 1000 hingga 100.
Peningkatan kinerja CGI.escapeHTML, Monitor dan MonitorMixin.
Module#name, true.to_s, false.to_s, dan nil.to_s memastikan bahwa string yang dikembalikan tidak berubah untuk objek yang ditentukan.
Ukuran file biner yang dihasilkan oleh metode RubyVM::InstructionSequence#to_binary telah dikurangi;
Versi terbaru dari komponen bawaan, termasuk
Bundel 2.1.2, RubyGems 3.1.2,
Racc 1.4.15,
CSV 3.1.2, REXML 3.2.3,
RSS 0.2.8,
Pemindai String 1.0.3;
Perpustakaan berpindah dari distribusi dasar ke paket permata eksternal
CMath (permata cmath),
Scanf (permata pemindaian),
Cangkang (permata cangkang),
Sinkronisasi (permata sinkronisasi),
ThreadsWait (menunggu permata),
E2MM (permata peta e2mm).
Modul stdlib default dipublikasikan di rubygems.org:
patokan,
cgi,
melimpahkan,
dapatkan panjang,
pop bersih,
smtp bersih,
buka3,
ptoko,
lajang. Modul monitor tidak dipindahkan ke rubygems.org
pengamat,
waktu habis,
pengusut,
benci,
yaml, yang hanya dikirimkan dengan ruby-core.
Membangun Ruby sekarang memerlukan kompiler C yang mendukung standar C99.