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”, который останется полностью обратно совместим с прошлыми выпусками.

Release. Ссылка here.