После годину дана развоја објављено издање нове стабилне гране програмског језика Перл - 5.44. Ат припрема Ново издање је променило приближно 270 линија кода (без документације и аутоматски генерисаног кода - 110), промене су утицале на 860 датотека, а у развоју је учествовао 71 програмер.
Грана 5.44 је објављена у складу са фиксним распоредом развоја утврђеним пре тринаест година, који предвиђа објављивање нових стабилних грана једном годишње и мањих издања свака три месеца. Прво мање издање, Perl 5.44.1, требало би да буде објављено за око месец дана, исправљајући најзначајније грешке откривене током имплементације Perl 5.44.0. Са објављивањем Perl 5.44, подршка за грану 5.40 је завршена; ажурирања за њу могу бити објављена у будућности само ако се открију критични безбедносни проблеми. Је почело процес развоја експерименталне гране 5.45, која ће бити основа за стабилно издање Perl 5.46 у првој половини 2027. године, осим ако се не донесе одлука иди преко до нумерације 7.x.
Кључ Промене:
- Додато експериментална могућност коришћења именованих параметара у потписи Функције које дефинишу листу променљивих које се прослеђују функцији не у телу функције, већ током њене декларације. Ова нова функција омогућава да се параметри прослеђују не у строгом редоследу, већ било којим редоследом, користећи парове кључ/вредност и синтаксу сличну додељивању елемената у хешовима:
- стара синтакса: sub f { my ($x, $y) = @_; …} f(1, 2);
- потписи: под f ($x, $y) { … } f(1, 2);
- потписи са именованим параметрима: sub f (:$x, :$y) { … } f(y => 2, x => 1);
- Додата је експериментална подршка за коришћење алијаса (показивача на показиваче) у foreach петљама са више променљивих. Ова функција вам омогућава да креирате алијас у foreach петљи приликом преузимања више вредности у једној итерацији петље. На пример, можете креирати алијас за хеш елемент са низом приликом итерације преко кључева и вредности хеша: use v5.44; use feature qw( refaliasing declared_refs ); my %hash = ( one => [1], two => [2, 2], ); foreach my ( $key, @items ) ( %hash ) { say "Низ $key садржи: @items"; } # Пре верзије 5.44, дереференцирање би било потребно: foreach my ( $key, $var ) ( %hash ) { say "Низ $key садржи: @$var"; } # Без експерименталног рефалијасинга и функција declared_refs: foreach my $key (keys %hash) { say "Низ $key садржи: @{$hash{$key}}"; }
- У регуларним изразима имплементиран Експериментални режим „enhanced_xx“ омогућава употребу модификатора /xx са класама знакова у угластим заградама ([a-zA-Z]) да би се поделиле на више редова или да би се уметнули коментари. На пример, услов if ($text =~ m/[a-zA-Z]/){ могао би се написати као: if ($text =~ m/[ a-z # мала слова A-Z # велика слова ]/xx) {
- Генератор псеудо-случајних бројева користи системски позив getentropy() да би добио ентропију на системима који је подржавају (Linux, БСД, macOS). На другим системима, ентропија се добија читањем са уређаја /dev/urandom или коришћењем хеша времена, ID-а процеса и вредности показивача.
- Додата подршка за спецификације Уницоде КСНУМКС.
- Строго придржавање Уникод правила је обезбеђено за имена идентификатора и групе регуларних израза, при чему је приближно 160 Уникод знакова које је раније покривала класа w сада забрањено. На пример, класа w, која покрива сва слова, цифре и знак подвлаке, сада искључује заокружена латинична слова, која личе на стварна слова, али нису. Ова промена понашања утиче само на програме који користе utf8 режим.
- Исправљене рањивости изазване препуњавањем бафера у функцијама Perl_study_chunk (ЦВЕ-КСНУМКС-КСНУМКС, појављује се у 32-битним склоповима) и S_measure_struct (ЦВЕ-КСНУМКС-КСНУМКС), као и преливање 16-битног бројача у Regex механизму (ЦВЕ-КСНУМКС-КСНУМКС), што може проузроковати неуспех регуларног израза.
- Скакање на позиције унутар петљи и блоковских конструкција коришћењем оператора goto је забрањено. Ова функција је застарела 2010. године.
- Оптимизације перформанси су направљене како би се убрзало сабирање, одузимање и множење целих бројева, обрада потписа функција и попуњавање хешева из листа кључ/вредност стринг кључевима познатим у време компајлирања.
Извор: линук.орг.ру
