Il consiglio di gestione del progetto Perl ha riassunto i piani per lo sviluppo futuro del ramo Perl 5 e per la creazione del ramo Perl 7. Nel corso delle discussioni, il consiglio ha convenuto che non è accettabile violare la compatibilità con il codice già scritto per Perl 5, tranne nei casi in cui la violazione della compatibilità sia necessaria per eliminare vulnerabilità. Il consiglio ha anche concluso che il linguaggio deve evolversi e che occorre promuovere in modo più intenso nuove funzionalità, semplificando al contempo l'accesso alle innovazioni emergenti e stimolandone l'implementazione.
Contrariamente alle intenzioni iniziali, che prevedevano l'inclusione di modifiche che violano la retrocompatibilità nel ramo Perl 7 per impostazione predefinita, il nuovo piano implica una trasformazione graduale del ramo Perl 5 in Perl 7 senza compromettere la retrocompatibilità con il codice esistente. Il rilascio di Perl 7.0 non sarà concettualmente diverso dall'ultima versione del ramo Perl 5.xx.
Lo sviluppo di nuove versioni di Perl 5 continuerà come prima: le nuove funzionalità aggiunte al ramo, che non sono compatibili con il vecchio codice, saranno incluse solo quando esplicitamente indicate nel codice con la pragma 'use version' o 'use feature feature_name'. Ad esempio, nella versione Perl 5.010 è stata introdotta la nuova parola chiave 'say', ma poiché nel codice esistente potrebbero essere utilizzate funzioni con il nome 'say', il supporto della nuova parola chiave è stato attivato solo mediante l'uso esplicito della pragma 'use feature 'say'.
La nuova sintassi introdotta nel linguaggio, che in versioni precedenti generava un errore durante l'analisi, diventa immediatamente disponibile senza necessità di specificare pragma speciali. Ad esempio, in Perl 5.36 verrà introdotta una sintassi semplificata per l'elaborazione simultanea di più valori di lista ('foreach my ($key, $value) (%hash) {') che sarà disponibile immediatamente, anche nel codice privo della pragma 'use v5.36'.
Nell'attuale versione di Perl 5.36, utilizzando la pragma 'use v5.36' si attivano 13 funzionalità che compromettono la compatibilità ('say', 'state', 'current_sub', 'fc', 'lexical_subs', 'signatures', 'isa', 'bareword_filehandles', 'bitwise', 'evalbytes', 'postderef_qq', 'unicode_eval' e 'unicode_strings'), vengono attivati per impostazione predefinita i modi 'use strict' e 'use warnings' e viene disabilitato il supporto per la notazione indiretta di chiamata agli oggetti obsoleta (dove invece di '->' si utilizza uno spazio) e per gli array e hash multidimensionali in stile Perl 4 ('$hash{1, 2}').
Quando i cambiamenti accumuleranno un numero sufficiente, invece di un'altra versione di Perl 5.x verrà rilasciata la versione Perl 7.0, che rappresenterà un vero e proprio spaccato della situazione, ma rimarrà completamente retrocompatibile con Perl 5. Per includere modifiche e impostazioni che violano la compatibilità, sarà necessaria un'aggiunta esplicita nel codice della pragma "use v7". Quindi, il codice con la pragma "use v7" può essere interpretato come "Perl moderno", in cui sono disponibili modifiche al linguaggio che violano la compatibilità, mentre senza di essa si avrà "Perl conservativo", che rimarrà completamente retrocompatibile con le versioni precedenti.
Fonte: opennet.ru
