vendredi 2 mai 2008

A propos de la danse des canards et de la Java

Ce post sur la programmation à l'occasion de la sortie de Perl version 5.10.

Paresse, Impatience et orgueil (Lazyness, impatience , hubris) sont les trois qualités à avoir pour être un bon programmeur. Cette citation de Larry Wall est à mon avis la phrase qui résume le mieux le métier de développeur.

La paresse : chercher en permanence à se décharger de tâches répétitives. Le paresseux est aussi un bon gars (good guy) , il ne refilera pas son travail à un autre , il le fera faire par sa machine. Souvent cette recherche désespérée d'en faire le moins possible , se solde par une charge de travail démesurée. ainsi le paresseux devient un travailleur acharné sans s'en rendre compte.

Impatient : il faut que ça aille vite. car le paresseux déteste avoir l'impression d'accomplir une travail de longue haleine. Ainsi un programme complexe sera souvent découpé en plusieurs morceaux.

Orgueil : La fierté d'avoir créer quelque chose et surtout de le montrer aux autres, avec souvent des égos enflés comme puissant moteur. Le logiciel libre en est le meilleur exemple. Qui connait l'équipe qui à développé Windows 98 ? , qui à développé MSN ? . Par contre les créateurs des projets libres , Linus Torvald en tête sont clairement identifiés et accessibles. Le livre 'la cathédrale et le bazar" d'Eric S Raymond (projet Fetchmail) , traduction gratuite en français ici constitue une lecture essentielle pour comprendre l'acte de création en informatique.

Perl sort donc un opus 10 de la version majeure 5. Cette version est importante à plus d'un titre. Normalement c'est la dernière évolution de la version 5 avant la sortie de la révolutionnaire version 6 de Perl.
La version 6 de Perl doit être la dernière. En effet d'après les architectes , Perl6 sera LE langage , il n'y aura plus besoin d'évolution. Pour l'instant la version Perl 5.10 reprend a son compte des concepts introduits dans Perl6 comme le 'sucre' de programmation 'say' .
Au lieu d'écrire : print "coucou\n";
On aura : say "coucou" ;

Cette page reprend toutes les avancées de Perl 5.10
(On notera aussi la présence de l'opérateur 'given' => CASE) .

D'une manière générale Perl 5.10 intègre les innovations prévues pour Perl6.
L'énorme évolution de Perl6 se trouve dans son architecture: Il utilisera une machine virtuelle , comme java mais mieux que Java. A l'inverse de Java sa machine virtuelle sera basée sur des registres comme un microprocesseur.
Cette machine virtuelle sera capable de faire tourner n'importe quel langage de script (Perl ,Python, Ruby, PHP) et même du Java.

Un nouvel opérateur issu de Perl6 est implémenté : '~~' .
Cet opérateur est polymorphique: Son comportement dépend du type de donnée à comparer :
Son équivalent pour deux nombre sera '==' et 'eq' pour deux chaines .

Cet opérateur est un piège à c.. , il renforce la confusion intrinsèque de Perl entre les types de données.

Car Perl est un langage 'lazy typing' (typage souple) . Il n'est pas nécessaire (et possible) de déclarer le type d'une variable (string ou integer) , c'est le contenu et l'usage de la variable qui renseigne sur son type. Une variable peut changer dynamiquement de type en cours d'exécution.
Ainsi pour comparer deux chaines de caractères il faut utiliser l'opérateur 'eq' alors que pour la même opération avec des nombres il faudra employer '==' .


Exemple d'erreur très gênante :

perl -e "print ('eric' eq 'german')"
résultat : 0 (false ) normal
perl -e "print ('eric' ne 'german')" ;#ne => not egal
résultat 1 (true ) normal aussi
perl -e "print ('eric' == 'german')" ;
résultat 1 !!!! erreur , mais Perl évalue la première chaine la tente de la transformer en expression numérique et cela échoue . Idem pour la deuxième chaine DONC Perl considère la condition echec==echec VRAIE.

C'est un genre d'étourderie qui coute parfois plusieurs jours de travail pour trouver la ligne erronée.

En Ruby , on ne pratique plus le Lazzy Typing mais le duck typing: Le typage 'canard'. Dans plupart des langages c'est parce que vous avez déclaré une variable comme étant de type canard qu'elle peut et doit se comporter comme un canard. En ruby c'est différent ; si vous élevez déjà des canards et que vous recevez une pintade ,vous n'allez pas forcement créer une classe Pintade pour un seul animal. Vous allez plutôt utiliser la technique des 'singletons' qui consiste à surcharger ponctuellement une classe pour une instance donnée. Votre pintade se déplacera comme un canard , ne fera pas forcement le bruit du canard , peu importe ,une fois engraissée elle finira dans l'assiette comme un canard.

L'univers des langages informatiques fourmille d'anecdote pas toujours innocente . Par exemple le Cobol a été inventé par une femme (Amiral grace Hopper) et c'est pour cela qu'il est verbeux ..(c'est une blaque) . Perl a été inventé par un un informaticien ... non larry wall était avant tout un linguiste. L'inventeur de Ruby est japonais , il a fait la synthèse entre Perl , Php, java ou Python. Larry Wall piqué au vif ,c'est mis à apprendre le japonais pour comprendre les subtilités de ruby et pour creer le 'killer' langage Perl6.

comme dit notre maitre à tous Stallman : good Hacking

Aucun commentaire: