Styles

dimanche 11 janvier 2009

Incantation Perl

Étant en train de lire Object Oriented Perl de Damian Conway, de petites perles de programmation m'apparurent comme cette merveilleuse façon d'implémenter un itérateur en Perl :
package Iterator;
$VERSION = 1.00;
use strict;

sub new {
my ($class,@data) = @_;
@data = @$class if !@data && ref($class);
bless [ @data ], ref($class)||$class;
}

sub each {
my ($self) = @_;
my @next = splice @$self, 0, 2;
return wantarray? @next : $next[0];
}

Pour le hacker en Perl, rien de plus trivial que de coder de cette manière. Pour celui qui ne parle pas cette langue, c'est tout de même assez déroutant. Le succès de Perl en son temps, était du en parti à sa simplicité de mise en œuvre, à sa disponibilité sur toutes les plateformes. Comme nous le dit très bien Michael Schwern dans sa présentation "Perl is unDead" lors de la YAPC::Asia 2008, il s'agit de ce qu'il nomme le Folk Programming :



Ce qui fait qu'un langage de programmation émerge et fini par être utilisé par tout le monde, c'est son adoption par le peuple des programmeurs de base, puis le constat de son omniprésence par les managers dans les entreprises. L'adoption se réalise quand le langage apporte avec lui une nouveauté, un moyen de faciliter et d'accélérer le développement. En son temps, Perl apportait une facilité de programmation sans commune mesure avec ce qui se faisait alors. De plus, il profita de l'arrivée du Web et de son modèle de développement très rapide et itératif car il était devenu très simple de coder quelque chose en Perl et d'avoir immédiatement le résultat sur son écran, un feedback en quasi temps-réel en quelque sorte.

Mais tout ça c'était les années 90. Aujourd'hui pour faire de la programmation orienté objet en Perl, on est loin de la simplicité des autres langages. Cela fait longtemps que Perl n'est plus le choix le plus évident, qu'il n'offre plus de nouveautés vraiment intéressantes pour le programmeur de base. Depuis, nombreux sont les logiciels qui ont apportés des nouveautés que Perl n'a pas su fournir le premier : Rails sur Ruby, PHP et son extrême simplicité (un langage fourre-tout), JavaScript et Web2.0 ... Si Perl veut revenir sur le devant de la scène, c'est en proposant des moyens aussi simples et puissants tout en proposant de nouvelles techniques encore plus indispensables.

C'est l'objet notamment de Perl6 et de sa machine virtuelle Parrot. Comme pour s'approprier les succès de ses pseudo-concurrents, Perl6 vise à proposer une machine virtuelle réellement optimisée pour les langages dynamiques, et réellement portée sur de nombreuses architectures (pas comme Java qui se targue de permettre de la programmation multi-plateforme, mais qui ne supporte que 3 systèmes (Linux sur x86/x64, Solaris, et Windows) alors que perl a été portés sur une centaine de systèmes)

Cette machine virtuelle permettra de faire fonctionner ensemble des programmes écrits dans des langages différents, un peu comme la .NET CLR (ou la JVM aujourd'hui où l'on voit apparaître de nombreux langages compilant du bytecode, comme JRuby). L'important c'est que cette machine virtuelle ait été conçue dans le même esprit que perl : TIMTOWTDI. Elle permet de faire fonctionner des langages aussi compliquer à implémenter que Perl tout en permettant de faire tourner des langages comme Ruby, PHP, et pourquoi pas Java d'ailleurs. C'est ce que nous explique le Primer Parrot :
Parrot is designed with the needs of dynamically typed languages (such as Perl and Python) in mind, and should be able to run programs written in these languages more efficiently than VMs developed with static languages in mind (JVM, .NET). Parrot is also designed to provide interoperability between languages that compile to it. In theory, you will be able to write a class in Perl, subclass it in Python and then instantiate and use that subclass in a Tcl program.
Personnellement, je verrais bien Parrot comme machine virtuelle d'un Emacs refondu à la sauce XXIème siècle. En ajoutant à Parrot les types de base de Emacs (buffer, window, frame, ...) on devrait pouvoir porter un compilateur elisp vers Parrot et avoir l'éditeur de texte le plus puissant du marché :) Ça permettrait de palier à la lenteur de la machine VM de Emacs (qui d'ailleurs, et ce n'est peut-être pas une coïncidence, a été codée initialement par James Gosling, le papa de Java et de la JVM).

Aucun commentaire: