Nouvelles sur Perl 5.10

Le , par Jedai, Expert éminent
Ce slide résume ce qui se prépare pour Perl 5.10 en matière de regex. Comme vous pouvez le lire, un bon coup de balai et des regex plus lisibles et plus optimisées (au prix d'un peu plus de concept à retenir si l'on veut faire plein usage de ces nouvelles possibilités d'optimisations).

Certaines des nouveautés devraient plaire à tout le monde comme les captures nommés, la nouvelle syntaxe pour les références arrière, l'opérateur Keep...
D'autres ne seront utilisées que par les amateurs de regex (les verbes par exemple, qui permettent des optimisations redoutables) et d'autres étendent sérieusement les capacités d'expression des regex de Perl (la nouvelle syntaxe de rappel des sous-motifs...), ce qui devrait encourager les Perlistes avancés à rester en Perl pur et standard pour leur besoin en matière de parsing.

En sous main le moteur de regex a été grandement amélioré, il ne devrait plus être possible de le casser avec une regex trop mal conçue (ce n'était déjà pas très facile), et les alternatives devraient être traitées plus efficacement grâce à l'intégration du concept de Trie dans le moteur. Par ailleurs le moteur de regex est maintenant complètement pluggable, ce qui devrait autoriser des choses intéressantes, implémentées de façon propre.

N'hésitez pas à poser des questions si vous ne comprenez pas certaines parties du slide.

NB : Tout ceci n'est pas hypothétique, c'est déjà disponible en 5.9 (version de développement de Perl5).

--
Jedaï


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Jedai Jedai - Expert éminent https://www.developpez.com
le 30/04/2007 à 1:01
Time:iece devrait permettre de faire des opérations basiques de manipulation de date et temps. Loin d'être aussi puissant et complet qu'une distribution comme DateTime, Time:iece présente l'avantage de remplacer localtime et gmtime sans qu'il n'y paraisse par des variantes retournant un objet en contexte scalaire (qui agit en contexte de string comme agirait localtime), ces objets retournés peuvent être additionnés, soustrait l'un à l'autre, comparés, ils disposent de nombreux accesseurs permettant d'obtenir les mêmes informations que localtime sous une forme plus humaine.

Term::UI facilite la création d'un prompt minimaliste qui valide sa réponse, la chomp()e, ... Très pratique, voir indispensable si on en juge par le nombre de tel code qu'on trouve dans les questions sur ce forum.

CPANPLUS est le successeur autoproclamé de CPAN, il offre tout ce que CPAN offrait mais gère mieux les dépendances, Module::Build, ...

L'inclusion de Inline est une très bonne nouvelle car ce module est tout simplement fantastique pour transformer rapidement une fonction cruciale de son application en C (et ainsi multiplier par 40 la vitesse de votre module... ) ou en C++. Il permet également de créer rapidement une interface avec une librairie dans un des langages supportés par Inline (et Inline en supporte beaucoup, encore que seul Inline::C sera inclus dans le CORE bien sûr).


Module::Build
est un module pur perl pour installer des modules (et les compiler, les tester etc entretemps), une alternative au traditionnel ExtUtils::MakeMaker qui présente entre autres désavantages qu'il nécessite d'avoir un "make" sur son système. Module::Build est plus autonome, et de conception plus moderne, ce qui lui permet d'éviter certains des problèmes de compatibilité arrière de son concurrent. Il est possible/probable(?) qu'une majorité de modules Perl passent à Module::Build à terme.

Archive::Extract prend en charge la plupart des formats d'archive standard (non-propriétaires, soit zip, gzip, bzip2, tar...). Ce module utilise Compress::Zlib. Une autre interface pour la zlib est fournie : IO::Zlib (qui vient compléter les modules IO déjà dans le CORE). A noter qu'avec Archive::Tar vient le sympathique ptar, un tar en pur perl, pratique pour les utilisateurs de Windows.

Digest::SHA offre une fonction de hachage plus robuste que MD5 (qui est maintenant considéré comme relativement insuffisant même pour une sécurité peu élevé).

File::Fetch est un module intéressant pour qui ne veut pas se soucier de ce que le fichier qu'il veut récupérer est en locale ou sur internet (file, http, ftp et rsync pris en charge, peut-être...).

Module::CoreList donne la liste des modules présents dans le CORE d'une version donnée, ou à partir de quelle version un module est entré dans le CORE, toutes informations utiles pour garder ses applications compatibles avec sa cible présumée.

Params::Check représente un bon module de validation d'arguments. (surtout inclus parce qu'il est nécessaire à CPANPLUS, néanmoins à cheval donné on ne regarde pas les dents... ).


Module::Load::Conditional
aide à vérifier si un module (ou une version suffisante) est bien présent sur votre système et à le charger le cas échéant. Module::Load et Module::Loaded sont dans la même veine.

IPC::Cmd facilite juste le lancement d'une instruction système et la récupération de ses diverses sorties et sorties d'erreur.

Object::Accessor rend aisé la création d'accesseurs sur un objet (et pas une classe...).

Module:luggable est un framework pour créer des modules auxquels on pourra facilement rajouter des plugins.

Hash::Util::FieldHash est un module qui permet d'utiliser proprement des références en tant que clés d'un hash, il facilitera la mise en place d'objets dits "retournés" (inside-out objects, un modèle objet en Perl qui assure une encapsulation complète des champs d'une classe, ainsi que divers avantages supplémentaires).

Locale::Maketext::Simple est un simple prérequis de CPANPLUS, la plupart des utilisateurs vraiment intéressé par la localisation de leur module/application ferait mieux de se tourner vers son grand frère Locale::Maketext::Lexicon.

Math::BigInt::FastCalc : calcul plus rapide pour les entiers de taille arbitraires.

--
Jedaï
Avatar de Arioch Arioch - Membre éprouvé https://www.developpez.com
le 30/04/2007 à 9:07
Jedai, si tu trouves mon post inaproprié ou pas à sa place, tu peux le sucrer, no problemo

Je suis admin d'un jeu qui m'a pris 3 ans à développer. On y trouve un peu de C mais beaucoup beaucoup de code écrit en Perl (environ 45.000 lignes).

Ecrit au début en Perl 5.6.1, il tourne actuellement en 5.8.7 sous Linux et ma seule appréhension majeure sur les futures évolutions de Perl, c'est que l'utilisation des "vieux" scripts ne soit plus faisable. Dans mon Camel book de la version 5, j'ai plusieurs pages de mises en garde sur la non portabilité de certains (trop) vieux scripts.

Ma plus grosse crainte, c'est de me retrouver un jour, alors que j'installe un nouveau système Linux (sur lequel Perl fait partie intégrante puisque certains outils d'admin sont écrits en Perl), avec mes 30 et quelques scripts Perl qui refusent de faire le boulot qu'ils faisaient jusqu'alors trés bien et sans buguer.

PS : mon code comporte bcp de RegExps qui vont de la recherche de patterns, de transformation ou de substitution de chaînes de caractères, gestion de l'aléatoire, emploi de goto dans un trés gros script, etc.
Avatar de Jedai Jedai - Expert éminent https://www.developpez.com
le 30/04/2007 à 12:51
Il est assez peu probable que tu aies des problèmes, en effet Perl reste très compatible avec ses versions précédentes. La plupart (toutes les volontaires en tout cas) des incompatibilités viennent d'une utilisation abusive des 'bugs' d'une version particulière, si tu as codé proprement et sans chercher l'exploit, il n'y a pas de raison que ton code arrête de fonctionner. Il y a encore des codes prévu pour Perl4 qui tournent aujourd'hui sur des versions récentes de Perl avec des modifications mineures.
Un autre indice qui peut te mettre sur la voie d'un problème potentiel est l'apparition de warnings 'deprecated', en effet même lorsque les développeurs jugent qu'une fonctionnalité est définitivement un échec, ils préviennent des années à l'avance avant de la supprimer et souvent elle est disponible sous forme de module du CPAN (par exemple Class:: PseudoHash pour les pseudohashes, à noter que si vous avez utilisé le pragma 'field' ceci ne vous concerne pas, l'implémentation de 'field' sera juste changée en sous main) après la suppression définitive.

(Cette préservation de la compatibilité à tout prix pose évidemment d'autres problèmes pour faire évoluer le langage, Perl6 est la réponse à ces problèmes)

--
Jedaï
Avatar de djibril djibril - Responsable Perl et Outils https://www.developpez.com
le 31/10/2007 à 17:03
avez vous une idée de la prochaine sortie de perl 5.9 ou perl 5.10 avec activestateperl ?
Avatar de drigaudiere drigaudiere - Candidat au Club https://www.developpez.com
le 24/11/2007 à 20:15
Citation Envoyé par djibril  Voir le message
avez vous une idée de la prochaine sortie de perl 5.9 ou perl 5.10 avec activestateperl ?

Jan Dubois d'ActiveState a annoncé la première béta d'ActivePerl 5.10.0 Build 1000. Elle est basée sur les sources de Perl 5.10RC1 :

David "Sniper" Rigaudiere

ActiveState is pleased to announce ActivePerl 5.10.0 Build 1000 Beta,
a beta release of the complete, ready-to-install Perl distribution for
Windows, Mac OS X, Linux, Solaris, and AIX.

This build is based on the first release candidate of the Perl 5.10
source code. Since Perl 5.10 is not yet complete, this build
is designated as a Beta and will be followed by a final build once
Perl 5.10 is officially released.

Please use this beta build to try out new features in Perl 5.10 and to
test source level compatibility of your existing Perl code under this
new release (note that Perl 5.10 is not binary compatible to earlier
releases).

For detailed information or to download this beta release, see:

http://www.activestate.com/Products/..._download.plex

New in ActivePerl 5.10.0 Build 1000 Beta
========================================

Some exciting new features to look for:

* The new switch statement and smart-match operator

The new smart-matching operator ~~ compares two expressions with each
other; the exact nature of the match is being determined by the types of
both expressions: matching a string and hash will return if the hash
contains a key equal to the string; matching a regular expression
against an array will return if any element of the array matched
successfully against the regexp etc.

The new switch statement will smart-match a single expression repeatedly
against a list of other expression until one matches. For example:

given($foo) {
when ("foo") {
say '$foo is the string "foo"';
}
when ([1,3,5,7,9]) {
say '$foo is an odd digit';
continue; # Fall through
}
when ($_ < 100) {
say '$foo is numerically less than 100';
}
default {
die q(I don't know what to do with $foo);
}
}

* Defined-or operator

The new defined-or operator // allows you to write

$a // $b

instead of repeating the first argument as in

defined $a ? $a : $b

Also the statement

$c //= $d;

can now be used instead of

$c = $d unless defined $c;

* Many improvements to the regular expression engine, including:

The regular expression engine is no longer recursive, meaning that
patterns that used to overflow the stack will either die with useful
explanations, or run to completion, which, since they were able to blow
the stack before, will likely take a very long time to happen.

- It is now possible to write recursive patterns that are easy to read
(for a regular expression), and are executed in an efficient manner.

- It is now possible to name capturing parenthesis in a pattern and
refer to the captured contents by name. The naming syntax is
(?<NAME>....). It's possible to backreference to a named buffer with
the \k<NAME> syntax. After the match the named capture groups are
accessible via the %+ hash:

my $value = "foo 42";
if ($value =~ /^(?<name>\w+) \s* (?<number>\d+)$/x) {
say "Name $+{name} and Number $+{number}";
}

- possessive quantifiers
- backtracking control verbs
- relative backreferences

Other new features include:

* new say() function
* lexical $_ variable
* _ prototype
* UNITCHECK blocks
* state variables
* stacked filetest operators
* byte-order modifiers for pack() and unpack()

* Many bug fixes
* Additional core modules
* Extended documentation

Download ActivePerl 5.10.0 Build 1000 Beta now:

http://www.activestate.com/Products/..._download.plex

Getting Started
===============

Whether you're a first-time user or a long-time fan, our free resources
will help you get the most from ActivePerl.

Mailing list archives:

http://aspn.activestate.com/ASPN/Mai...ded/ActivePerl

Feedback
========

Everyone is encouraged to participate in making Perl an even better
language.

For bugs related to ActiveState use:

http://bugs.activestate.com/enter_bu...l&version=1000

For bugs related directly to Perl please use the 'perlbug' utility.

Enjoy!
Avatar de GnuVince GnuVince - Membre éclairé https://www.developpez.com
le 18/12/2007 à 21:56
La nouvelle version de Perl, la 5.10, a été lancée aujourd'hui, en l'honneur du vingtième anniversaire de Perl.

http://grokbase.com/topic/2007/12/18...7E5xxKRmOXxIBY
Offres d'emploi IT
Développeur WEB PHP F/H
VACALIANS GROUP - Languedoc Roussillon - SETE (34)
Développeur Web FULL-STACK
VACALIANS GROUP - Languedoc Roussillon - SETE (34)
RESPONSABLE WEB ANALYTICS F/H
VACALIANS GROUP - Languedoc Roussillon - SETE (34)

Voir plus d'offres Voir la carte des offres IT
Responsable bénévole de la rubrique Perl : djibril -