Journal Merry 6.c! Mon expérience avec Perl 6

Posté par (page perso) . Licence CC by-sa
Tags :
22
26
déc.
2015

Je profite d'un journal pour vous parlez de la sortie de Perl 6 mais surtout offrir un avis qui sort du "Regardez on peut écrire le code du lanceur d'une fusée en 1 ligne"

Ce journal n'est pas là pour vous faire une liste des fonctionnalités de Perl 6, car des gens mieux informés que moi comprennent probablement mieux la plupart des concepts existant dans le langage. Désolé de n'être qu'un simple mortel. Mes connaissances en matière de compilateur/théorie du langage sont vraiment faibles.

Premièrement je vais préciser ce qui est sorti réellement, même si l'annonce officielle est assez claire sur ce point (https://perl6advent.wordpress.com/2015/12/25/christmas-is-here/)
La version "1.0" est surtout une publication des spécifications du langage, accompagnée d'une implémentation de ces spécifications. Pour les personnes moins informées cela signifie surtout qu'à partir de cette version $truc + $machin signifiera toujours l'addition numérique de $truc et $machin. (Oubliez qu'on peut étendre le langage pour changer ça, mais vous avez saisi l'idée générale je pense.)

Maintenant je vais parler de mon expérience avec perl6 sur ces 3 derniers mois. Ce n'est pas forcement pour troller mais offrir peut-être une vue plus "pratique" sur ce qu'est bosser avec Perl 6.

Pour être clair, même si ces spéc. regroupent beaucoup de choses, Il y a encore énormément de choses qui sont aussi importantes que le langage en lui-même qui ne sont pas (ou vaguement) définies.

Sans vous faire un détail de ce qui est là/pas là il est important de savoir que l'écosystème actuel est un peu le bazar. Il est basé sur des répertoires git sur github avec un installeur qui a tendance à exploser d'un jour à l'autre, et il n'est pas rare qu'un changement 'mineur' puisse casser un module déjà existant. Ne vous attendez pas du tout à du solide comme le CPAN, ni à voir les modules intégrés dans votre distribution préférée.

Je devrais probablement vous parler de comment je me suis mis à Perl 6. Je lis beaucoup de fanfiction sur l'univers de Mon Petit Poney et le site fimfiction (https://www.fimfiction.net) est une place centrale pour en trouver. J'étais curieux de faire des statistiques sur ce que je lisais (Combien d'histoires concernent ce personnage? Je suis plutôt aventure ou romance…) et j'étais curieux de voir où en était Perl 6.

Je vais pas détailler mon parcours entier avec le langage, ça ressemble beaucoup à https://perl6advent.wordpress.com/2015/12/16/day-16-yak-shaving-for-fun-and-profit-or-how-i-learned-to-stop-worry-and-love-perl-6/ avec de nombreux patchs et quelques modules écrits pour arriver à mes fins. (Hé, je suis dans l'annonce de Rakudo pour mes patchs sur NativeCall).

Autant être honnête sur les performances, Perl 6 est lent. J'ai dû écrire un module qui utilise une bibliothèque C pour analyser les pages web de fimfiction parce que le module qui fait ça avec du code natif met 30 à 40s à analyser les 250ko de HTML du site et offre un résultat faux. En comparaison la bibliothèque C utilisée (gumbo) met moins de 0,1s et 1,5s est perdu à générer les objets perl. Je pense que Perl 6 est pas du tout prêt à, par exemple, être utilisé pour faire du web. Je suis pas du tout un développeur web mais 15s pour générer http://www.nyo.fr:1080/fimstuff/stats_230097.html sur mon serveur dédié (Un i7 2.2Ghz) ça me parait pas génial (les données sont prises dans une base de données dans cet exemple).

Quelque chose qui est très frustrant aussi et je pense qui ça risque de dérouter beaucoup de gens : c'est presque une obligation (en ce moment) de travailler si possible avec la version de développement de Rakudo si vous voulez utiliser certain modules. Ça devrait sûrement se stabiliser dans le prochain mois. Un souci avec ça, c'est que les outils de mise à jour ne sont pas trop finis et souvent ça se résume à : Virer son installation, reconstruire Rakudo et réinstaller les modules.

Je vous conseille aussi d'avoir un compte github, vous allez sûrement rencontrer un moment où vous devrez forker un module pour corriger quelque chose. J'avais des moments où pour lancer un script j'utilisais 4 ou 5 copies locales de modules, le temps que mes modifications soient mergées.

Bon après tous ces points pas forcement glorieux, qu'est-ce qui rend bosser avec Perl 6 assez cool :
Mine de rien c'est super agréable d'écrire du Perl 6, spécialement si vous avez déjà bossé avec Perl 5, juste des trucs comme say ou %hash<key> ou encore la syntaxe de la boucle for. Les paramètres nommés sont super agréables et offrent de nouvelles façons de gérer les fonctionnalités sur certaines fonctions car ils peuvent facilement être utilisés comme une forme de flags. Par exemple en utilisant DBIish vous pouvez écrire $sth.row() pour récupérer des données sous forme de liste ou $sth.row(:hash) pour les avoir sous forme d'un tableau de hachage.

Écrire des bindings vers des bibliothèques C est vraiment simple (http://doc.perl6.org/language/nativecall), surtout comparé à ce qu'offre XS pour perl5. Vous n'aurez pas forcement besoin d'une bonne compréhension du C. Cela permet assez facilement de combler un manque dans les modules. Les modules Perl 5 sont à priori facilement utilisables aussi, mais ce qui permet de les utiliser ne veut pas s'installer pour moi, donc je n'ai pas encore pu tester.

Les gens qui bossent sur Perl 6 sont assez accueillants, il est assez facile de modifier des composants du langage car une grande partie est écrite en Perl 6 ou un langage s'en rapprochant (NQP). Il est pas rare qu'un bug reporté sur #perl6 se trouve corrigé dans l'heure qui suive.

Dans tout ça je me suis un peu perdu dans mon journal, mais ce qu'il faut retenir c'est que Perl 6 est vraiment fun avec beaucoup de potentiel mais la récente publication n'est pas vraiment prête pour le monde "réel". Mais si plus de personnes commencent à utiliser le langage, il devrait atteindre une bonne maturité assez rapidement, car le grand facteur bloquant (à mon avis) est le manque de développeurs surtout au niveau des modules.

Voici quelques liens relatifs à ma participation sur Perl 6
https://github.com/Skarsnik Mon profile Github
http://skarsnik-stuff.blogspot.fr/2015/11/scrapping-web-with-perl6-so-you-want-to.html Un article (en anglais) sur comment parser du web/html.
Mes modules
http://modules.perl6.org/dist/Gumbo
http://modules.perl6.org/dist/Config::Simple
http://modules.perl6.org/dist/Discord
http://modules.perl6.org/dist/NativeCall::TypeDiag
http://modules.perl6.org/dist/Acme::WTF

  • # Peinture Fraiche

    Posté par . Évalué à 4.

    Perl6 est un joli cadeau de Noël dont la peinture n'est pas encore sèche :)

    C'est vrai Skarsnik, c'est dur d'essuyer les plâtres surtout pour les modules, car à vrai dire panda est loin d'être finit, c'était particulièrement la plaie pendant la semaine d'avant Noël. Et vu la lenteur de chargement de l'ensemble qui est d'autant plus pénalisante avec l'utilisation de modules, ça peut vite devenir frustrant (Bailador + DBlish et le web peut attendre quelques dizaines de secondes …), je pense surtout à Tux et son CSV qui depuis presque un an fait la politique des "petits pas" pour prendre la température sur la vitesse de P6.

    Quoi qu'il en soit Perl6 est très agréable à lire et à écrire, l'écosystème des modules reste à définir (mais ça se précise), et quand à sa vitesse elle ne peut que s'améliorer, alors … longue vie au papillon !

  • # Perl6, le Hurd des langages ....

    Posté par . Évalué à 3.

    Après plus de 10 ans on a pas encore une specification définie ? En tout cas, il faut esperer que ç en vaille le coup. Je me demande si les gens qui ont commencé à bosser dessus au début ne se sont pas découragés à force. Mais si au final ça en vaut la peine, pourquoi pas?

    • [^] # Re: Perl6, le Hurd des langages ....

      Posté par (page perso) . Évalué à 3.

      Les spec principales sont definies, le langage en lui même est définit, il y a une implementation qui respect une très grande partie de ces spec.

      Ce qui est manquant c'est des choses périphériques qui sont aussi important qu'un langage, comme tout ce qui concerne la distribution des modules/installation. Le déployement des outils au sein des distributions, la traduction, etc…

      • [^] # Re: Perl6, le Hurd des langages ....

        Posté par (page perso) . Évalué à 5.

        Les spec principales sont definies, le langage en lui même est définit, il y a une implementation qui respect une très grande partie de ces spec.

        D'un point de vue correction et fonctionnalités, ça me semble plutôt bon (les trucs qui restent à faire n'existent pas dans la plupart des langages de script), et à chaque fois que je teste un peu rakudo, je suis très agréablement surpris par la qualité des messages d'erreurs, en particulier pour les erreurs de syntaxe (contrairement à Perl 5, si on oublie un point virgule, l'erreur va pointer direct au bon endroit, par exemple), qui à la fois sont compréhensibles et abordables par un débutant, tout en donnant aussi des infos sur les types quand c'est opportun, qui peuvent être utiles pour quelqu'un de plus aguerri.

        Par contre, en dehors d'un écosystème de modules un peu chaotique pour le moment (mais j'ai confiance que ce point va s'arranger), ce qui me bloque un peu pour l'utiliser plus couramment, c'est les performances sur tout ce qui a trait aux manipulations de chaînes de caractères, ce qui ironiquement le rend peu utilisable pour certains des cas historiques d'utilisation les plus typiques de Perl 5, dès que c'est un peu intensif. Par exemple, un simple comptage de mots dans un gros fichier va être plusieurs dizaines de fois plus lent que Perl 5 actuellement. Mais j'espère que ça va s'améliorer un de ces jours sur ce point, parce que le support pour grammaires de Perl 6 (qui servent à parser Perl 6 lui-même avec d'excellents messages d'erreur) donne vraiment envie d'utiliser ce langage pour manipuler du texte.

      • [^] # Re: Perl6, le Hurd des langages ....

        Posté par . Évalué à 4. Dernière modification le 28/12/15 à 08:08.

        J'étais persuadé que c'était justement le cas depuis des années (enfin depuis que je me suis intéressé de loin à perl 6 en fait). Le problème c'est que quasi tout le monde se sent soit très confortable avec perl 5 et donc ne désire pas changer, soit a déjà switcher sur un autre langage depuis belle lurette.

        Sinon c'est dommage de chercher à apprendre un nouveau langage avant de combler ses lacunes dans sa langue maternelle. Parce que je ne suis pas un grammar nazi de base et je fais moi aussi pas mal de fautes mais il y'a quand même des passages qui piquent sérieusement les yeux.

        sorti avec un t à la fin, les infinitifs qui se transforment ou les substitutions de conjuguaisons (Je devrais probablement vous parlez / _vous devrait forker ), etc.

        Courageux d'avoir fait ton coming out en rapport avec les petits poneys. C'est quand même du costaud !

  • # Moteur inside

    Posté par (page perso) . Évalué à 2.

    Finalement, le moteur de Perl6, est-ce que c'est le Parrot issu d'une blague des devs Python et Perl ?

    Python 3 - Apprendre à programmer en Python avec PyZo et Jupyter Notebook → https://www.dunod.com/sciences-techniques/python-3

    • [^] # Re: Moteur inside

      Posté par (page perso) . Évalué à 1.

      Non, Perl 6 utilise Rakudo qui est une implémentation de Perl6, Rakudo lui même tourne soit avec MoarVM (Du C), ou la JVM. Il y aussi une version en cours de développement prévus pour s'executer en Javascript.

      Parrot est probablement mort, mais beaucoup de travail dans Parrot à servit à écrire Rakudo/Moar

      • [^] # Re: Moteur inside

        Posté par . Évalué à 2. Dernière modification le 29/12/15 à 11:32.

        Parrot est probablement mort, …

        T'es sûr ?

        • New release 7.11.0 "Amazonian parrotlet" Submitted by rurban on Sat, 12/19/2015 - 20:54
        • Parrot 7.10.0 "Wyrd Parrot" released! Submitted by Util on Tue, 11/17/2015 - 23:59
        • (wikipedia) Stable release 7.8.0 / September 15, 2015
        • (ftp) parrot-6.9.0.tar.bz2 2014-10-21 07:42 4.2M
        • (ftp) parrot-7.9.0.tar.bz2 2015-10-20 09:55 4.3M

        Tout ça me dit le contraire…

        • [^] # Re: Moteur inside

          Posté par (page perso) . Évalué à 3.

          Parrot continue mais à partir du moment ou Perl6 à basculé sur la JVM et MoarVM, il n'y a plus vraiment de gros projet dessus. Il y a donc une forte probabilité que le projet soit mort à moyen terme. Surtout que les personnes travaillant sur le cœur de Perl6 vont surtout travailler les performances donc Parrot sera je pense de plus en plus largué.

          Bref, c'était un beau projet, très ambitieux… qui n'a certainement pas eu assez de ressources humaines mais MoarVM me semble aussi un beau bébé. Les projets doivent savoir évoluer et passer la main à de nouvelles implémentations ;-)

          • [^] # Re: Moteur inside

            Posté par . Évalué à 2.

            Je ne connais pas (encore) MoarVM.

            Je ne sais pas si ils ont les mêmes objectifs que Parrot. Parrot voulait supporter plusieurs langages dynamiques.

            Je ne sais pas si c'était une bonne idée au final. Moi je trouvais çà séduisant pour mutualiser les efforts d'optimisation.

            • [^] # Re: Moteur inside

              Posté par (page perso) . Évalué à 2.

              MoarVM est un projet jeune qui a été dédié pour le méta modèle objet de Perl6. Il a vite été le plus rapide et n'était pas une usine à gaz comme Parrot. Du coup le projet Perl6 a pu avancer plus vite.

              L'idée derrière Parrot était bonne et louable mais il aurait fallu que tous les langages de script mutualise dessus des ressources. Devant les millions d'heures ingénieur mis sur Java et Javascript, partir sur une machine généraliste comme Parrot était certainement trop ambitieux sans noyau dur organisé et retour rapide.

              On voit depuis que MoarVM fonctionne que Perl6 est de nouveau dans un cercle vertueux ou tout progresse et ou cela marche déjà. La prochaine étape est bien sur le CPAN6…

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.