08.12.2022

Perl 7 плавно продолжит развитие Perl 5 без нарушения обратной совместиости

Управляющий совет проекта Perl обобщил планы по дальнейшему развитию ветки Perl 5 и созданию ветки Perl 7. В ходе дискуссий управляющий совет согласился, что недопустимо нарушать совместимость с уже написанным для Perl 5 кодом, за исключением случаев, когда нарушение совместимости необходимо для устранения уязвимостей. Совет также пришёл к выводу, что язык должен развиваться и следует более интенсивно продвигать новые возможности, упростив при этом доступ к появляющимся новшествам и стимулируя их внедрение.

В отличие от изначальных намерений, допускающих включение по умолчанию в ветке Perl 7 изменений, нарушающих обратную совместимость, новый план подразумевает постепенное превращение ветки Perl 5 в Perl 7 без нарушения обратной совместимости с уже существующим кодом. Выпуск Perl 7.0 концептуально не будет отличаться от очередной ветки Perl 5.xx.

Разработка новых выпусков Perl 5 продолжится в прежнем виде — добавляемые в ветку новые возможности, несовместимые со старым кодом, как и раньше будут включаться только при явном указании в коде прагмы «use версия» или «use feature возможность». Например, в версии Perl 5.010 было представлено новое ключевое слово «say», но так как в существующем коде могли использоваться функции с именем «say», поддержка нового ключевого слова включалась только при явном указании прагмы «use feature ‘say'».

Добавляемый в язык новый синтаксис, который при обработке в прошлых выпусках приводил к выводу ошибки, становится доступен сразу без необходимости указания специальных прагм. Например, в Perl 5.36 появится упрощённый синтаксис единовременной обработки нескольких значений списка («foreach my ($key, $value) (%hash) {«), который будет доступен сразу, даже в коде без прагмы «use v5.36».

В текущем виде в Perl 5.36 при использовании прагмы «use v5.36» активируется 13 нарушающих совместимость возможностей (‘say’, ‘state’, ‘current_sub’, ‘fc’, ‘lexical_subs’, ‘signatures’, ‘isa’, ‘bareword_filehandles’, ‘bitwise’, ‘evalbytes’, ‘postderef_qq’, ‘unicode_eval’ и ‘unicode_strings’), включаются по умолчанию режимы «use strict» и «use warnings» и отключается поддержка устаревшей косвенной нотации вызова объектов (когда вместо «->» используется пробел) и многомерных массивов и хэшей в стиле Perl 4 («$hash{1, 2}»).

Когда изменений накопится достаточно много вместо очередного выпуска Perl 5.x будет сформирована версия Perl 7.0, которая станет своеобразным срезом состояния, но останется полностью обратно совместимой с Perl 5. Для включения нарушающих совместимость изменений и настроек потребуется явное добавление в код прагмы «use v7». Т.е. код с прагмой «use v7» можно трактовать как «современный Perl», в котором доступны нарушающие совместимость изменения языка, а без — «консервативный Perl», который останется полностью обратно совместим с прошлыми выпусками.

Источник.