Ruby
Ruby 2.7
Fedora 32 menyediakan Ruby versi 2.7. Dengan pembaruan besar dari Ruby 2.6, Fedora menjadi platform pengembangan Ruby yang unggul.
Perubahan sejak Ruby 2.6:
Ruby 2.7 hadir dengan beberapa fitur baru dan peningkatan kinerja.
Peningkatan kinerja
-
JIT [Eksperimental]
-
Strategi cache Fiber berubah dan penciptaan fiber dipercepat.
-
Module#name
,true.to_s
,false.to_s
, dannil.to_s
sekarang selalu mengembalikan String beku. String yang dikembalikan selalu sama untuk objek tertentu. [Eksperimental] -
Kinerja
Monitor
danMonitorMixin
ditingkatkan. -
Kinerja
CGI.escapeHTML
ditingkatkan. -
Cache metode
Per-call-site
, yang telah ada sejak sekitar 1.9, telah diperbaiki: tingkat cache hit dinaikkan dari 89% menjadi 94%. -
Metode
RubyVM::InstructionSequence#to_binary
menghasilkan biner terkompilasi. Ukuran biner dikurangi.
Perubahan penting lainnya
-
Beberapa pustaka standar diperbarui.
-
Bundler 2.1.2
-
RubyGems 3.1.2
-
Racc 1.4.15
-
CSV 3.1.2
-
REXML 3.2.3
-
RSS 0.2.8
-
StringScanner 1.0.3
-
Beberapa pustaka lain yang tidak memiliki versi asli juga diperbarui.
-
-
Pustaka berikut tidak lagi berupa gem yang dibundel. Instal gem yang sesuai untuk menggunakan fitur ini.
-
CMath (cmath gem)
-
Scanf (scanf gem)
-
Shell (shell gem)
-
Synchronizer (sync gem)
-
ThreadsWait (thwait gem)
-
E2MM (e2mmap gem)
-
-
profile.rb
dihapus dari pustaka standar. -
Mempromosikan
stdlib
ke gem default-
Gem default berikut diterbitkan di rubygems.org
-
benchmark
-
cgi
-
delegate
-
getoptlong
-
net-pop
-
net-smtp
-
open3
-
pstore
-
singleton
-
-
Gem default berikut hanya dipromosikan di ruby-core, tetapi belum dipublikasikan di rubygems.org.
-
monitor
-
observer
-
timeout
-
tracer
-
uri
-
yaml
-
-
-
Proc.new
danproc
tanpa blok dalam sebuah metode yang dipanggil dengan blok diperingatkan sekarang. -
lambda tanpa blok dalam metode yang dipanggil dengan blok membangkitkan eksepsi.
-
Memperbarui versi Unicode dan versi Emoji dari 11.0.0 ke 12.0.0.
-
Memperbarui versi Unicode ke 12.1.0, menambahkan dukungan untuk U+32FF SQUARE ERA NAME REIWA.
-
Date.jisx0301
,Date#jisx0301
, danDate.parse
mendukung era Jepang baru. -
Memerlukan kompiler untuk mendukung C99.
Detil perubahan
Pencocokan Pola [Eksperimental]
Pencocokan pola, fitur yang banyak digunakan dalam bahasa pemrograman fungsional, diperkenalkan sebagai fitur eksperimental. Hal ini dapat melintasi objek tertentu dan menetapkan nilainya jika cocok dengan pola.
require "json"
json = <<END
{
"name": "Alice",
"age": 30,
"children": [{ "name": "Bob", "age": 2 }]
}
END
case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [{name: "Bob", age: age}]}
p age #=> 2
end
Perbaikan REPL
irb
, lingkungan interaktif yang dibundel (REPL; Read-Eval-Print-Loop), sekarang mendukung penyuntingan multi-baris. Hal ini didukung oleh reline
, sebuah pustaka yang kompatibel readline
yang diimplementasikan dalam Ruby murni. Hal ini juga menyediakan integrasi rdoc. Dalam irb
Anda dapat menampilkan referensi untuk kelas, modul, atau metode tertentu.
GC Pemadatan
Rilis ini memperkenalkan Compaction GC yang dapat menggabung ruang memori yang terfragmentasi.
Beberapa program Ruby yang multi-thread dapat menyebabkan fragmentasi memori, menyebabkan penggunaan memori yang tinggi dan kecepatan terdegradasi.
Metode GC.compact
diperkenalkan untuk memadatkan heap. Fungsi ini memadatkan objek aktif di heap sehingga lebih sedikit halaman yang dapat digunakan, dan heap mungkin lebih ramah CoW (copy-on-write).
Pemisahan argumen posisional dan kata kunci
Konversi otomatis argumen kata kunci dan argumen posisional usang, dan konversi akan dihapus di Ruby 3.
Perubahan
-
Ketika metode panggilan memberikan Hash di argumen terakhir, dan ketika tidak memberikan kata kunci, dan ketika metode yang dipanggil menerima kata kunci, peringatan dipancarkan. Untuk terus memperlakukan hash sebagai kata kunci, tambahkan operator splat ganda untuk menghindari peringatan dan memastikan perilaku yang benar di Ruby 3.
def foo(key: 42); end; foo({key: 42}) # diperingatkan def foo(**kw); end; foo({key: 42}) # diperingatkan def foo(key: 42); end; foo(**{key: 42}) # OK def foo(**kw); end; foo(**{key: 42}) # OK
-
Ketika metode panggilan memberikan kata kunci ke metode yang menerima kata kunci, tetapi tidak memberikan cukup argumen posisi yang diperlukan, kata kunci diperlakukan sebagai argumen posisi yang diperlukan terakhir, dan peringatan dipancarkan. Berikan argumen sebagai hash, bukan kata kunci, untuk menghindari peringatan dan memastikan perilaku yang benar di Ruby 3.
def foo(h, **kw); end; foo(key: 42) # diperingatkan def foo(h, key: 42); end; foo(key: 42) # diperingatkan def foo(h, **kw); end; foo({key: 42}) # OK def foo(h, key: 42); end; foo({key: 42}) # OK
-
Ketika metode menerima kata kunci tertentu tetapi tidak splat kata kunci, dan hash atau kata kunci splat dilewatkan ke metode yang mencakup kunci simbol dan non-simbol, hash akan terus dipecah, dan peringatan akan dipancarkan. Anda akan perlu memperbarui kode yang memanggil untuk memberikan hash terpisah untuk memastikan perilaku yang benar di Ruby 3.
def foo(h={}, key: 42); end; foo("key" => 43, key: 42) # diperingatkan def foo(h={}, key: 42); end; foo({"key" => 43, key: 42}) # diperingatkan def foo(h={}, key: 42); end; foo({"key" => 43}, key: 42) # OK
-
Jika metode tidak menerima kata kunci, dan dipanggil dengan kata kunci, kata kunci masih diperlakukan sebagai hash posisional, tanpa peringatan. Perilaku ini akan terus bekerja di Ruby 3.
def foo(opt={}); end; foo( key: 42 ) # OK
-
Non-simbol yang diizinkan sebagai kunci argumen kata kunci jika metode menerima kata kunci sembarang.
def foo(**kw); p kw; end; foo("str" => 1) #=> {"str"=>1}
-
**nil
diperbolehkan dalam definisi metode untuk secara eksplisit menandai bahwa metode tidak menerima kata kunci. Memanggil metode tersebut dengan kata kunci akan menghasilkanArgumentError
.def foo(h, **nil); end; foo(key: 1) # ArgumentError def foo(h, **nil); end; foo(**{key: 1}) # ArgumentError def foo(h, **nil); end; foo("str" => 1) # ArgumentError def foo(h, **nil); end; foo({key: 1}) # OK def foo(h, **nil); end; foo({"str" => 1}) # OK
-
Memberikan splat kata kunci kosong ke metode yang tidak menerima kata kunci tidak lagi memberikan hash kosong, kecuali hash kosong diperlukan untuk parameter yang diperlukan, dalam hal ini peringatan akan dipancarkan. Hapus splat ganda untuk melanjutkan memberikan sebuah hash posisional.
h = {}; def foo(*a) a end; foo(**h) # [] h = {}; def foo(a) a end; foo(**h) # {} dan peringatan h = {}; def foo(*a) a end; foo(h) # [{}] h = {}; def foo(a) a end; foo(h) # {}
Jika Anda ingin menonaktifkan peringatan pengusangan, silakan gunakan argumen baris perintah -W:no-deprecated
atau menambahkan Warning[:deprecated] = false
ke kode Anda.
Lihat pengumuman rilis hulu untuk informasi lebih rinci tentang rilis ini.
Jekyll 4.0
Generator halaman statis Jekyll dan plug-in-nya telah diperbarui ke versi 4.0.0. Versi ini mencakup perubahan berikut dibandingkan dengan versi 3.8:
-
Peningkatan kinerja yang signifikan
-
Pembersihan dan perbaikan bug
-
Perubahan kecil lainnya tidak kompatibel dengan rilis sebelumnya
Untuk informasi lebih lanjut tentang Jekyll 4.0.0, lihat https://jekyllrb.com/news/2019/08/20/jekyll-4-0-0-released/.
Want to help? Learn how to contribute to Fedora Docs ›