Perl 5.36.0 dasturlash tili mavjud

Bir yillik rivojlanishdan so'ng Perl dasturlash tilining yangi barqaror filiali 5.36 nashr etildi. Yangi nashrni tayyorlashda 250 mingga yaqin kod satrlari o'zgartirildi, o'zgarishlar 2000 ta faylga ta'sir qildi, ishlab chiqishda 82 ishlab chiquvchi ishtirok etdi.

5.36 filiali to'qqiz yil oldin tasdiqlangan rivojlanish jadvaliga muvofiq chiqariladi, bu yiliga bir marta yangi barqaror filiallarni va har uch oyda bir marta tuzatuvchi relizlarni chiqarishni nazarda tutadi. Perl 5.36.1 ning birinchi tuzatuvchi versiyasi taxminan bir oy ichida chiqarilishi rejalashtirilgan, bu Perl 5.36.0 ni amalga oshirish jarayonida aniqlangan eng muhim xatolarni tuzatadi. Perl 5.36-ning chiqarilishi bilan bir qatorda, 5.32 filialini qo'llab-quvvatlash to'xtatildi, bu xavfsizlikning muhim muammolari aniqlangan taqdirdagina kelajakda yangilanishi mumkin. 5.37 eksperimental filialini ishlab chiqish jarayoni ham boshlandi, undan Perl 2023 ning barqaror versiyasi 5.38 yil may yoki iyun oylarida shakllanadi, agar 7.x raqamlashga o'tish to'g'risida qaror qabul qilinmasa.

Asosiy o'zgarishlar:

  • Funktsiya imzolarini qo'llab-quvvatlash barqarorlashtirildi va endi funksiyada ishlatiladigan o'zgaruvchilar ro'yxatini aniq belgilash va massivdan qiymatlarni tekshirish va belgilash operatsiyalarini avtomatlashtirish imkonini beruvchi "v5.36 foydalanish" pragmasini belgilashda mavjud. kirish parametrlari. Misol uchun, avval ishlatilgan kod: sub foo { die "Ichki dastur uchun juda ko'p argumentlar" agar @_ >= 2; die "Ichki dastur uchun juda kam argumentlar" agar @_ <= 2; my($chap, $o'ng) = @_; $chap + $o'ngga qaytarish; }

    imzolardan foydalanganda, uni quyidagilar bilan almashtirish mumkin:

    sub foo ($chap, $o'ng) { $chapga + $o'ngga qaytarish; }

    Ikkitadan ortiq argument bilan foo ni chaqirish tarjimonning xatoga yo'l qo'yishiga olib keladi. Ro'yxat shuningdek, ba'zi argumentlarni e'tiborsiz qoldirish imkonini beruvchi maxsus "$" o'zgaruvchisini qo'llab-quvvatlaydi, masalan, "sub foo ($left, $, $right)" faqat birinchi va uchinchi argumentlarni nusxalash imkonini beradi. o'zgaruvchilar, ayni paytda uchta argument.

    Imzo sintaksisi, shuningdek, ixtiyoriy argumentlarni belgilashga va agar argument etishmayotgan bo'lsa, standart qiymatlarni o'rnatishga imkon beradi. Masalan, "sub foo ($left, $right = 0)" ni belgilash orqali ikkinchi argument ixtiyoriy bo'ladi va agar u mavjud bo'lmasa, 0 qiymati o'tkaziladi. Tayinlash operatsiyasida ixtiyoriy ifoda ko'rsatilishi mumkin, jumladan, foydalanish ro'yxatdagi boshqa o'zgaruvchilar yoki global o'zgaruvchilar. O'zgaruvchi o'rniga xesh yoki massivni ko'rsatish (masalan, "sub foo ($ chap, @o'ng)") bir yoki bir nechta argumentlarni o'tkazish imkoniyatiga olib keladi.

  • Imzolar yordamida e'lon qilingan funktsiyalarda "@_" massividan parametrlarni qo'shimcha belgilashni qo'llab-quvvatlash eksperimental deb e'lon qilinadi va ogohlantirishga olib keladi (ogohlantirish faqat yangi sintaksis yordamida e'lon qilingan funktsiyalarda @_ ishlatilsa beriladi). Masalan, funksiya uchun ogohlantirish beriladi: v5.36 dan foydalaning; sub f ($x, $y = 123) { "Birinchi argument $_[0]" deb ayting; }
  • Barqarorlashtirilgan va "foydalanish v5.36" pragmasini belgilashda foydalanish mumkin, "isa" infix operatori ob'ekt ko'rsatilgan sinfning namunasi yoki undan olingan sinf ekanligini tekshirish uchun. Masalan: if( $obj isa Package::Name ) { … }
  • “V5.36 dan foydalanish” pragmasini belgilashda ogohlantirishlarni qayta ishlash yoqiladi (“ogohlantirishlardan foydalanish” rejimi faollashtirilgan).
  • "V5.36 dan foydalanish" pragmasini belgilashda chaqiruvchi ob'ektlarning bilvosita belgilarini qo'llab-quvvatlash ("bilvosita xususiyat") o'chirib qo'yilgan - ob'ektlarni chaqirishning eskirgan usuli, bunda "->" o'rniga bo'sh joy ishlatiladi ("usul $" ob'ekt @param" o'rniga "$object-> $method(@param)"). Masalan, "mening $cgi = new CGI" o'rniga siz "my $cgi = CGI->new" dan foydalanasiz.
  • “V5.36 dan foydalanish” pragmasini belgilashda koʻp oʻlchovli massivlarni va Perl 4 uslubidagi xeshlarni (“koʻp oʻlchovli xususiyat”) taqlid qilishni qoʻllab-quvvatlash oʻchirib qoʻyildi, bu bir nechta kalitlarni oraliq massivga tarjima qilish imkonini beradi (masalan, “$hash{1”). , 2}") "$hash{join($;, 1, 2)}") ga aylantirildi.
  • "V5.36 dan foydalanish" pragmasi switch va case iboralariga o'xshash eksperimental tarmoqlanish mexanizmini qo'llab-quvvatlashni o'chirib qo'yadi (Perl berilgan va qachon kalit so'zlardan foydalanadi). Perl 5.36 dan boshlab, ushbu xususiyatdan foydalanish uchun "foydalanish funksiyasi "almashtirish" ni aniq belgilashingiz kerak va "versiyadan foydalanish" ni belgilash endi uni avtomatik ravishda faollashtirmaydi.
  • Oddiy iboralar ichidagi kvadrat qavslardagi qo'shimcha belgilar sinflari uchun barqarorlashtirilgan va sukut bo'yicha qo'llab-quvvatlash mavjud. Imkoniyat bir nechta belgilarni kesish, istisno qilish va birlashtirish uchun kengaytirilgan qoidalar yordamida moslashishga imkon beradi. Masalan, '[AZ - W]' - V dan tashqari A dan Z gacha bo'lgan belgilar.
  • “(?”, “( )”, “{ }” va “[ ]” operatsiyalarini qo‘llab-quvvatlash qisman barqarorlashtirilgan va sukut bo‘yicha mavjud. Siz ““ ”, ““ ”” va hokazo belgilardan foydalanishingiz mumkin. Masalan, "qr" "".
  • Tartiblash funksiyasini argumentlarsiz chaqirish taqiqlanadi, bu endi xato chiqishiga olib keladi. @a = tartiblash @bo'sh; # davom eting @a = tartiblash; # xatoga yo'l qo'yadi @a = sort (); # xatolik yuz beradi
  • Satr bo'yicha emas, balki butun faylni yuklab olish rejimini yoqadigan yangi "-g" buyruq qatori bayrog'i taklif qilindi. Bayroq "-0777" bilan bir xil effektga ega.
  • Unicode spetsifikatsiyasini qo'llab-quvvatlash 14.0 versiyasiga yangilandi.
  • SIGSEGV kabi boshqa signallarga o'xshash tezkor suzuvchi nuqta istisnosi (SIGFPE) bilan ishlash ta'minlanadi, bu maxsus ishlov beruvchilarni SIGFPE signaliga $SIG{FPE} orqali ulash imkonini beradi, masalan, muammo yuzaga kelgan qator raqamini chiqarish.
  • Asosiy taqsimotga kiritilgan modullarning yangilangan versiyalari.
  • Qo'shilgan ish faoliyatini optimallashtirish. Katta xesh kalitlarni umumiy jadval jadvallaridan foydalanmasdan yanada samarali saqlash imkoniyati taqdim etiladi. Yangi skalyar qiymatlarni yaratish unumdorligi sezilarli darajada yaxshilandi, masalan, quyidagi kod endi 30% tezroq: $str = "A" x 64; uchun (0..1_000_000) { @svs = split //, $str }
  • Tarjimon kodi C99 standartida belgilangan ayrim konstruksiyalardan foydalana boshladi. Endi Perl qurish uchun C99-ni qo'llab-quvvatlaydigan kompilyator kerak. MSVC++ ning eski versiyalarida (VC12 dan oldin) montajni qoʻllab-quvvatlash toʻxtatilgan. Microsoft Visual Studio 2022 (MSVC++ 14.3) da montajni qo'llab-quvvatlash qo'shildi.
  • AT&T UWIN, DOS/DJGPP va Novell NetWare platformalarini qo‘llab-quvvatlash to‘xtatildi.

Manba: opennet.ru

a Izoh qo'shish