Анонсовано Perl 7

Alex Alex 25 червня 2020
Анонсовано Perl 7

На віртуальній конференції розробників мови Perl, яка відбувається сьогодні,  анонсовано проєкт Perl 7, який плавно продовжить розвиток гілки Perl 5 без внесення радикальних змін. Perl 7 аналогічний випуску Perl 5.32.0, за винятком інших налаштувань за замовчуванням, які найкраще відповідають сучасній практиці розробки. В іншому Perl 7 залишиться тим же Perl 5 і збереже сумісність з раніше розробленими програмами.

Значна зміна номера версії виступить своєрідним роздільником переходу до нової моделі нарощування функціональності мови Perl без відчутного порушення зворотної сумісності. Передбачається, що створення Perl 7 допоможе залучити до використання Perl нових розробників і налагодити процес додавання в мову значних нових можливостей, зберігаючи при цьому сумісність з кодовою базою наявних проєктів. Номер 7 обраний оскільки Perl 6 був використаний при розробці мови, яка тепер розвивається під окремим ім'ям Raku. Перший реліз Perl 7 очікується в наступному році. Гілка Perl 5.32 стане останньою в серії Perl 5 і її планується підтримувати від 5 до 10 років.

Найпомітнішою зміною в Perl 7 стане включення за замовчуванням режиму "strict", який передбачає сувору перевірку оголошення змінних, використання символьних покажчиків і присвоєння підпрограм. Використання "use strict" є хорошим тоном і застосовується більшістю розробників. Аналогічно за замовчуванням планують включити обробку попереджень ("use warnings").

В Perl 7 також розраховують стабілізувати та включити за замовчуванням деякі експериментальні можливості що вже існують, такі як сигнатури функцій ("use feature 'signatures'"), що дозволяють при визначенні функції визначити вхідні аргументи й автоматизувати перевірку їх числа (можна буде писати "sub foo ($left, $right) {" замість "sub foo { my($left, $right) = @_;"). Планують включити за замовчуванням і підтримку оператора "isa" для перевірки того, чи є об'єкт екземпляром зазначеного класу або класом, похідним від нього ("if( $obj isa Package::Name )", а також операцій постфіксного розіменування (postderef) "$sref->$*" замість "${ $sref }", "$aref->@*" замість "@{ $aref }" і "$href->%{ ... }" замість "%$href{ ... }".

Претендентами на відключення за замовчуванням в Perl 7 є:

  • Непряма нотація виклику об'єктів ("no feature qw(indirect)") - застарілий спосіб виклику об'єктів, при якому замість "->" використовується пробіл ("method $object @param" замість "$object->$method(@param)"). Наприклад, замість "my $cgi = new CGI" потрібно завжди використовувати "my $cgi = CGI->new".
  • Голі файлові дескриптори без оголошення змінних ("no bareword::filehandle") - використання конструкцій виду "open FH, $file" буде призводити до помилки, потрібно використовувати "open my $fh, $file". Зміна не торкнеться стандартних файлових дескрипторів STDIN, STDOUT, STDERR, ARGV, ARGVOUT і DATA.
  • Фіктивні багатовимірні масиви та хеші в стилі Perl 4 ("no multidimensional"). Наприклад, вказівка "$hash" буде призводити до помилки, потрібно використовувати проміжний масив, наприклад, "$hash".
  • Оголошення прототипів в стилі Perl 4 (потрібно використовувати "use :prototype()").

У віддаленіших планах за замовчуванням розраховують включити підтримку Unicode, що позбавить розробників від вказівки "use utf8" в коді. Для модулів і скриптів, у яких виникнуть проблеми з новими налаштуваннями за замовчуванням, передбачена можливість повернення поведінки Perl 5 через додавання в код рядка "use compat::perl5". Окремі параметри також збережуться і їх можна буде змінити окремо.

Додаток: Leon Timmermans виступив з критикою нової ініціативи. Він не вірить, що для Perl 7 можливо буде забезпечити лінійний прогрес і найімовірніше в результаті виникне черговий тривалий форк, як було при переході на Python 3. Ключовою проблемою є те, що /usr/bin/perl є інфраструктурою, яку не можна ламати з тих же причин, що і порушення сумісності коду на shell і awk. На /usr/bin/perl зав'язано безліч додатків, системних утиліт для збирання ПЗ і скриптів. Включення strict і відключення прототипів порушить роботу величезного числа наявних скриптів, тому малоймовірно, що дистрибутиви коли-небудь замінять /usr/bin/perl на perl7 і виникне ситуація схожа на тривалий перехід /usr/bin/python на python3.

Крім того, при створенні Perl 7 упускається з виду, що Perl використовується не тільки для написання великих програм, але і має попит для однорядкових скриптів, для яких використання "strict" позбавлене сенсу. Кінець кінцем сумнівний критерій хорошого коду, озвучений при анонсі Perl 7. Хороший код - це насамперед код, який працює і вирішує покладені на нього завдання, а не тільки якісно оформлений код.

Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.