Kemarin, 23 Mei, Perl 5.30.0 dirilis. Berita itu diumumkan oleh perl.perl5.porters Usenet sebagai salah satu pengembang utama Perl, Sawyer X.
Dibandingkan dengan rilis stabil sebelumnya, 5.28.0, dirilis sekitar 11 bulan lalu, sekitar 620.000 baris kode diubah, perubahan tersebut mempengaruhi 1.300 file, 58 penulis mengambil bagian dalam pengembangan. Perubahan pada kode sumber itu sendiri (hanya file .pm, .t, .c dan .h) diperkirakan ~ 510.000 baris dan 750 file.
Pengembangan cabang 5.31 berikutnya terbuka. Rilis stabil berikutnya dijadwalkan untuk Mei 2020.
Perubahan utama:
- Fungsi Perl API C sv_utf8_downgrade dan sv_utf8_decode tidak lagi dianggap eksperimental.
- Menerapkan dukungan eksperimental untuk ekspresi panjang tampilan variabel di belakang, seperti misalnya "(? <= Foo?)" Dan "(? <! Ba {1,9} r)" (sebelumnya menyebabkan kesalahan)
- Nilai maksimum dari specifier ukuran ("n") di blok "{m, n}" ekspresi reguler telah ditingkatkan dari 32767 menjadi 65534.
- Dukungan untuk Unicode 12.1.
- Dukungan wildcard terbatas telah ditambahkan ke spesifikasi nilai properti Unicode (Saya tidak tahu bagaimana menerjemahkan dengan benar). Misalnya, ungkapan "qr! \ P {nv = / (? X) \ A [0-5] \ z /}!" Memungkinkan Anda memilih semua karakter Unicode yang menentukan angka dari 0 hingga 5, termasuk angka Thailand atau Bengali.
- Dukungan untuk qr '\ N {name}' telah diterapkan (karakter yang disebutkan di dalam ekspresi reguler terbatas pada tanda kutip tunggal; sebelumnya regexp tersebut menyebabkan kesalahan).
- Sekarang Anda dapat mengkompilasi Perl menggunakan hanya operasi thread-safe dengan locales (-Accflags = '- DUSE_THREAD_SAFE_LOCALE').
- Kombinasi dari flag “-Dv” (extended debugging output) dan “-Dr” (debugging expressions regular) sekarang mengarah ke dimasukkannya semua mode debugging yang mungkin dari ekspresi reguler.
- Pack () menambahkan perlindungan terhadap kembalinya urutan Unicode yang tidak valid.
Penghapusan fitur dan perubahan yang tidak kompatibel:
- Menetapkan nilai bukan nol ke variabel khusus $ [ (indeks elemen pertama array) sekarang mengarah ke kesalahan fatal.
- Sebagai pemisah garis dan pola, hanya grapheme yang sekarang diizinkan. (Karakter majemuk Unicode dilarang).
- Beberapa cara yang sebelumnya usang untuk menggunakan braket kiri “{” dalam pola regex sekarang dilarang.
- Memanggil sysread (), syswrite (), send (), atau recv () saat memproses handle: utf8 sekarang merupakan kesalahan fatal.
- Dilarang menggunakan "saya" dalam pernyataan kondisional yang identik salah (misalnya, "$ x saya jika 0").
- Dukungan yang dihapus untuk variabel khusus $ * (pencarian multi-baris). Alternatif yang benar adalah "/ s" dan "/ m".
- Dukungan yang dihapus untuk variabel khusus $ # (output angka yang diformat).
- Nama fungsi dump () sekarang harus memenuhi syarat secara eksplisit (CORE :: dump).
- Menghapus fungsi File :: Glob :: glob (Anda harus menggunakan File :: Glob :: bsd_glob).
- Direncanakan untuk berhenti mendukung penggunaan makro yang melakukan operasi dengan UTF-8 dalam kode XS (blok C), tetapi kemudian diputuskan untuk menunda ke versi 5.32.
Peningkatan Kinerja:
- Terjemahan UTF-8 ke dalam poin-poin kode (saya tidak tahu bagaimana menerjemahkan) sekarang diimplementasikan sebagai mesin negara, yang juga mengarah pada peningkatan kinerja - misalnya, ord ("\ x7fff") sekarang memerlukan instruksi 12% lebih sedikit. Validasi urutan karakter UTF-8 juga diimplementasikan sebagai mesin negara dan lebih cepat.
- Panggilan rekursif dihapus dari finalize_op ().
- Optimalisasi kecil telah dilakukan pada kode untuk melipat karakter identik dan mendefinisikan kelas karakter dalam ekspresi reguler.
- Konversi dari pengidentifikasi tipe yang ditandatangani ke unsigned (IV ke UV) telah dioptimalkan.
- Algoritma untuk mengkonversi bilangan bulat ke string dipercepat dengan memproses dua digit alih-alih satu per satu.
- Ditingkatkan dengan analisis LGTM.
- Kode yang dioptimalkan dalam file regcomp.c, regcomp.h dan regexec.c.
- Mencocokkan ekspresi reguler dari bentuk "qr / [^ a] /" secara signifikan dipercepat untuk kasus-kasus di mana "a" adalah karakter ASCII (kasus non-ASCII "a" juga dapat menunjukkan peningkatan kinerja, tetapi dalam kondisi tertentu).