cognominal a écrit 11 commentaires

  • [^] # Re: Un coup d'état futile

    Posté par  . En réponse à la dépêche Annonce de Perl 7. Évalué à 6. Dernière modification le 16 juillet 2020 à 19:41.

    J'ai dit : Même utf-8 par défault n'est pas acquis et ne sera jamais comparable au support par raku.

    Je précise.
    raku utilise en interne des code synthétiques de longueur constante de 32 bits donc tous les caractère même composites sont de même longueur ce qui facilite l'implémentation
    des routines concernant les chaines. Bien sûr l'utf-8 est supporté mais pas utilisé en interne.

  • # Un coup d'état futile

    Posté par  . En réponse à la dépêche Annonce de Perl 7. Évalué à 5.

    Ca restera Perl 5 avec des défauts acceptables. Défauts dans les deux sens du mots. Je ne met pas en doute les compétences programmatiques de Sawyer. Mais appeler ça 7.0 est une escroquerie car l'architecture sous jacente reste la même. C'est un coup d'éclat égotique, futile et sans lendemain. La promesse d'une version majeure est d'attirer de nouveaux utilisateurs mais ça n'a aucun sens d'apprendre Perl en 2020.

    Les détails importants sont flous et seront l'objet de guerres de tranchée. Véritable support objet, difficile donc exclu par Sawyer. Même utf-8 par défault n'est pas acquis et ne sera jamais comparable au support par raku.

    Larry Wall, le créateur de Perl, voulait que le futur de Perl soit raku (anciennement Perl 6). Raku devait profiter de la notoriété de Perl. Le coup d'état à consisté à enfumer les gens de Perl 6.0 en leur demander de se renommer en raku. Le coût a été énorme, programmatique et de notoriété. Larry Wall voyait 7.0 comme une version hypothétique et parfaite donc personne n'a vu le coup venir. Mais 6.0 étant dégagé,
    sawyer pouvait utiliser 7.0. Ne jamais faire de concessions à des manipulateurs, c'est le prélude à d'autres concessions.

    Les modes de compatibilités prévus initialement prévus pour raku ne sont pas possible. On peut faire interopérer le moteurs de Perl 5 et de raku mais on ne pourra pas interpréter du Perl 5 ou 7 avec le moteur raku.

    Raku est un excellent langage. Son moteur, MoarVM est excellent. Mais sans support
    académique et corporate, il dépend du bon vouloir d'une core teapm excellente mais peu nombreuse.

    On ne voit plus Larry Wall qui semble maintenant plus s'intéresser à ces petits enfants qu'à Perl. 7.0 ne vas pas le ramener.

    Je fais du Perl depuis plus de 30 ans, ne suis plus guère Perl 5 et connaît les internes de raku. Les mongueurs de Perl qui auraient dû publier ce post mais sont en état de coma avancé.

  • [^] # Re: ack, Unicode

    Posté par  . En réponse à la dépêche Travailler avec des expressions rationnelles. Évalué à 1.

    Oui. Je ne connaissais pas Nim. Merci pour le pointeur.

  • [^] # Re: ack, Unicode

    Posté par  . En réponse à la dépêche Travailler avec des expressions rationnelles. Évalué à 1. Dernière modification le 13 février 2016 à 10:18.

    La réponse est le premier paragraphe de https://design.perl6.org/S05.html.
    En gros, en Perl 6, une regex est un terme qui englobe celui d'une expression régulière.
    Selon les choix de défaut pour le backtracking et de traitement des espaces, un utilisera le mot règle, token ou regex (cette fois-ci dans un sens précis).

    Quand je parle de NFA comme un des trois sous-moteurs, c'est justement ce qui implémente
    la partie expression régulière. C'est d'ailleurs pour ça que je parle dans ce cas d'appel "notionnel" des méthodes d'une grammaire. Dans le cas des NFA, c'est une convention syntaxique qui recouvre autre chose qu'un bête appel. C'est pour ça que Larry Wall insiste sur le fait qu'on a un mix de procédural (les expressions avec opérateurs, et le récursif descendant) et de déclaratif (implémenté par les NFA).
    D'ailleurs, techniquement, le moteur d'expression avec opérateurs est implémenté en terme du moteur récursif descendant dont il n'apparait pas dans la documentation. Dommage car il est essentiel pour ceux qui veulent utiliser rakudo/nqp comme base pour implémenter d'autres langage que Perl.

    Bien sûr, Perl 6 n'impose pas d'utiliser une grammaire quand cela n'est pas nécessaire pas plus qu'il n'impose de déclarer explicitement une classe et une fonction pour afficher "Hello word".
    C'est la spécificité de Perl, de proposer des raccourcis syntaxiques pour les cas les plus fréquents.
    Le raccourci allant jusqu'à l'absence syntaxique de l'entité conceptuelle sous-jacente (ou du pattern selon la terminologie de "design patterns").
    Exemple: on itère très souvent en Perl 6 mais il n'y a guère que les implémenteurs de Perl 6 qui manipulent explicitement des opérateurs.
    Là est le manque criant de "design patterns", une partie du design d'un pattern se doit d'être syntaxique.
    Evidemment ce n'est pas possible avec des langages rigides comme C++ donc ça ne leur est même pas venu à l'idée.
    C'est une nouvelle frontière explorée depuis 30 ans par Perl et soigneusement ignorée par ailleurs. Les concepteurs d'un langage vont choisir leur syntaxe dans la famille dérivée d'algol (C, Java… ) où celle dérivée de ISWIM (haskell, elm, idris…) sans trop se poser de questions.
    C'est un souci en moins et ça permet un apprentissage plus facile. Mais ça fige l'état de l'art.

    C'est le propre d'un langage que d'incarner les patterns les plus communs. Avec les slangs, Perl 6 permet de ce faire et cela va plus loin que la notion de DSL qui m'a toujours semblé bien vague.

    Jonathan Worthington, un des implémenteurs de rakudo un (à vrai dire le) compilateur Perl 6 a une belle remarque qui distille l'essence même de Perl comparé à d'autres langages. je vais paraphraser faute de retrouver l'original.
    On reproche à Perl d'être illisible car il faut du temps pour maîtriser sa syntaxe mais c'est justement ça qui permet à un programme Perl d'être compréhensible au programmeur entraîné.
    Les regex et les grammaires en sont un exemple. Un programme C qui parse "à la mano" une chaîne de caractères est très lisible pour le programmeur qui ne connait pas les regex mais le résultat est moins compréhensible qu'une regex et un réceptacle de bug potentiels dû à la manipulation explicite de pointeurs.
    Pour paraphraser une expression anglopone : Perl est un goût acquis.

  • [^] # Re: ack, Unicode

    Posté par  . En réponse à la dépêche Travailler avec des expressions rationnelles. Évalué à 1.

    J'ai oublie de dire que ack est un outil Perl 5 et de donner un URL
    http://beyondgrep.com/

  • # ack, Unicode

    Posté par  . En réponse à la dépêche Travailler avec des expressions rationnelles. Évalué à 4. Dernière modification le 13 février 2016 à 10:17.

    Je suis étonné de voir que ce post ne mentionne ni ack, ni Unicode et pas le futur que sont les grammaires Perl 6. Excellent article, mais Il aurait pu être écrit il y a vingt ans.

    ack

    ack est un outil permet de chercher toute une arborescence évitant de jongler avec find et xargs. Il est intégré dans emacs et probablement dans vim.

    grammaires Perl 6

    Les systèmes dit d'expressions régulières ne sont pas modulaires et donc ne peuvent pas traiter les cas complexes.
    Perl 6 utilise un système de grammaires qui sont une forme de classe, les règles y sont des méthodes qui s'appelle les unes les autres. Notionnellement, tout au moins, puisque les grammaires sont un composite de NFA, d'analyse récursive et d'analyse d'expressions (aussi récursive mais à base de piles opérandes et opérateurs) avec des opérateurs.

    Perl 6 et Unicode : forme normalisée NFC

    Faire sérieusement de l'analyse syntaxique avec Unicode est difficile sauf avec Perl 6. Un des problèmes résolu par Perl 6 est que des graphèmes peuvent être composés de plusieurs codepoints. Avec les formes de normalisations actuelles, cela
    signifie que des opérations en O(1) ne le sont plus puisqu'on ne peut pas prévoir l'offset d'un graphème.
    Perl 6 propose la normalisation NFC avec des graphèmes synthétiques. Elle ne sort pas de l'interpréteur Perl 6 donc Perl 6 est par ailleurs conforme à la norme Unicode.
    La liste des fonctionnalités spécifique à Perl 6 serait trop longue pour ce post.
    Un seul exemple, donc.
    En Perl 6, des tâches comme mettre en majuscule une "lettre accentuée" est triviale.

    Mieux que les DSL, Perl 6 et les slangs

    Finalement, Perl 6 est écrit en Perl 6 donc est analysé en Perl 6. Il permet l'usage de slangs (argot en anglais, mais aussi sub*lang*age, c'est à dire de tisser finement syntaxiquement un langage dans un autre. On parle beaucoup de DSL mais ça, c'est beaucoup mieuxmême si pour le moment, certains détails laissent à désirer pour les perfectionnistes que sont les perlers.
    Ainsi Perl6 comprend, le langage de quotes avec un contrôle très fin de ce qui est expansé et de ce qui ne l'est pas.
    et deux langages de regex (le mot pour ne pas le terme expression rationnelles beaucou trop limitatif), celui de Perl 5 et celui de Perl 6. Oui, il y a plusieurs manières d'utiliser Perl 5 dans Perl6 !

    Les grammaires Perl 6 sont le futur

    Je peux dire avec confiance que quelque soit le succès ou l'insuccès de Perl 6, les grammaires Perl 6 influenceront beaucoup de languages comme les expressions rationnelles de Perl 1/2/3/4/5 l'ont fait depuis près de trente ans.

    La doc et les tutoriels

    La doc http://docs.perl6.org/ n'est pas complète, mais il faut déjà un bon niveau pour repérer les manques.

    La communauté Perl 6 francophone bien que non organisée est à la pointe pour les tutoriels, même si seul ceux de Laurent Rosenfeld ont pour original le français.
    Naoum Hankache est l'auteur de Perl 6 intro : http://perl6intro.com/
    Vendethiel celui de Perl 6 in y minutes: https://learnxinyminutes.com/docs/perl6/
    Laurent Rosenfeld a pondu tout une série d'excellent tutorilels: http://laurent-rosenfeld.developpez.com/tutoriels/perl/perl6/les-bases/

  • [^] # Re: c'est quoi Perl ?

    Posté par  . En réponse à la dépêche Conférences « Perl, fun again! » le 5 mars 2012 à Paris. Évalué à 3.

    Remarque factuellement vraie, mais sans aucun intérêt.
    Perl n'est pas COBOL.
    On parle de code vivant, pas de code qui n'est plus guère maintenu.
    Cite-moi un site web connu dont le front-end est écrit en COBOL.

  • [^] # Re: Version

    Posté par  . En réponse à la dépêche Conférences « Perl, fun again! » le 5 mars 2012 à Paris. Évalué à 8.

    Je ne suis pas spécialiste des machines virtuelles donc je ne commenterais pas l'affirmation que parrot est lent. Mais ce qui est très lent actuellement est surtout le compilateur rakudo qui utilise la VM Parrot; tant le temps de compilation que la lenteur du code généré.
    On est encore en phase de bootstrapping d'un compilateur complet.
    Il faut comprendre l'ambition du projet rakudo. Outre un compilateur Perl 6, c'est destiné à être un environnement pour compiler du code écrit en différent langages dynamiques.
    Pour cela rakudo inclut un métamodèle, le meta object protocol qui permet de décrire le système OO d'un langage et les conventions de représentation de données.
    La notion de protocol métaobjet n'est pas nouvelle. Comme beaucoup de concepts qui sont redécouverts progressivement par le monde des langages dynamique, celui-ci du vient du monde LISP en général et CLOS en particulier. Il a été explicité dans un livre "The art of Meta object protocol" publié en 91, mais toujours disponible.
    L'intégration de l'implantation du métamodèle presque terminée (entre autre) explique que le projet vu des utilisateurs de Rakudo Star ait pu régresser en apparence mais il est d'une portée immense.
    A terme il est probable que la notion d'objet défini par le métamodèle soit intégré au modèle de classe de Parrot (les PMC ou PolyMorphic Containers, anciennement Magic Cookies, évitant des indirections inutiles.

    Les gens qui critiquent Perl 6 ne comprennent généralement pas l'ampleur du projet. Ils ont une excuse, le projet a évolué au cours du temps et la communication sur le projet est clairement suboptimale.
    Perl. n'est pas d'une meilleure version d'un langage existant, mais de la création d'un écosystème de toutes pièces, qui inclut la spécification d'un langage et des compilateurs. Il ne s'agit pas d'un projet de recherche, puisque toutes les technologies utilisées existent déjà sous une forme ou une autre. Seulement, elles n'ont jamais été intégrées en un tout cohérent.

    L'exception est la syntaxe du langage. C'est la concrétisation d'un vieux projet de Larry Wall dont Perl 5 n'était qu'un brouillon : un langage informatique conçu sur les principes des langues naturelles, enfin les principes applicables dans un context informatique. Il ne s'agit en aucun cas de singer ou "cargo culter" les langages naturels comme Fortran, Cobol ou AppleScript ont pu le faire.

    En attendant, même si l'interpréteur perl 5 est contraint par la rétrocompatibilité, il est très performant et a pu profiter de fonctionnalités de Perl 6 "rétrofittées" dans Perl 5. Cette rétrocompatibilité est nécessaire car, contrairement à d'autres langages concurrents qui sont essentiellement utilisés pour le web, Perl est utilisé en administration système. La durée de vie d'un script d'admin se mesure en décennies et non en mois comme pour le web. Au vu de cette contrainte, comparer Perl à des langages qui ont la latitude de tout casser à chaque release majeure, et ne se privent pas de le faire, est comparer des oranges et des pommes.

    Il n'empêche que Perl fournit un environnement serveur moderne appelé Dancer qui bénéficie du savoir-faire du projet Ruby Sinatra. Contrairement à d'autre modules de CPAN, le nombre de dépendances est modérés. Une seconde itération majeure est dans les tuyaux.

    Pour une certaine population qui se croit cool, Perl est has been. Cette population me rappelle les jeunes beaufs (il n'y a pas d'âge pour ça) présentés par la publicité Virgin. Ils mettent la musique plus fort et secouent la tête comme des autistes en pensant que c'est un signe de branchitude. Il est triste de voir que certains commentaires sur linuxfr relèvent de cette mentalité.

    Cette publicité est un exemple de la segmentation des marchés en populations de différents âges qui se méprisent, incapables de communiquer entre elles. Cette prolétarisation organisée du monde n'a rien à faire dans l'économie contributive du monde du libre. Mais c'est un autre sujet. Allez sur le site ars industrialis si vous voulez en savoir plus. Pour les autres, retournez vous laver la tête avec NRJ, Virgin, rire et chansons et touchez pas à mon poste.

  • [^] # Re: Perl 6

    Posté par  . En réponse à la dépêche Calendriers de l'avent Perl 5 et Perl 6. Évalué à 1.

    continuation.

    D'après ce que je sais, les premiers Lisps avaient pour seul scopage, un scopage dynamique. Cela a été ensuite remplacé par un scopage lexical qui est généralement ce que le programmeur désire.
    Si je me souviens bien Perl a commencé avec le seul scopage local (mécanisme similaire au scopage dynamique) pour y ajouter plus tard le scopage lexical.

    Mais il y a des cas où le scope dynamique est préférable.
    Le scopage dynamique est très utilisé pour passer du contexte sans passer par des paramètres explicites. Ainsi dans la grammaire Perl 6, les variables avec le twigil '*' sont des variables dynamiques.

  • [^] # Re: Perl 6

    Posté par  . En réponse à la dépêche Calendriers de l'avent Perl 5 et Perl 6. Évalué à 1.

    Mais c'est très vite oublier la vieille famille de langages Lisp, infiniment plus propre et d'autant moins soumis aux problèmes de rétrocompatibilité que Lisp est champion (tous langages confondus) en matière de "programmabilité" il est LE langage programmable et donc naturellement extensible.

    En effet.
    Malheureusement, si Lisp est l'ancêtre des langages dynamiques, il n'est pas très populaire aujourd'hui.

    Lisp est toujours une source d'inspiration pour les designers de langage et de VM.
    Ainsi, Parrot a des véritables systèmes de continuation et de GC, et non un simple système de comptage de référence comme Perl 5; Perl 6 propose a la fois des variables lexicales et des variables dynamiques; il propose des aussi des macros hygiénique (en cours d'implémentation).

    Mais côté grammaire, le choix de Perl 6 est opposé à celui de Lisp. Il a une syntaxe riche, et maintenant extensible, qui permet de mettre en valeur la structure des programmes et la nature des données (sigils et twigils). Cela ne s'oppose pas à l'extensibilité puisque le système de grammaire entièrement intégrés à l'objet est très expressif.

  • [^] # Re: Perl 6

    Posté par  . En réponse à la dépêche Calendriers de l'avent Perl 5 et Perl 6. Évalué à 2.

    Je pense que Perl 6 sera la continuation d'une idée qui n'a été qu'ébauchée avec la lignée Perl jusque là. Il y a toujours des sigils par exemple.

    Il y aura donc deux lignes concurrentes Perl 5 et Perl 6. Perl 5 évoluera encore longtemps, mais contraint par les règles de rétrocompatiblité avec bientôt 25 d'existence. Alors que Perl 6 est conçu dès le départ pour évoluer avec l'expérience acquise pendant tout ce temps.
    L'existence d'un mécanisme de grammaire permet à chacun d'étendre le langage à son goût et les expériences les plus réussies entreront dans le langage standard. Peu de langage ont réussi une évolution aussi propre. Dans le monde des langages dynamiques, Perl est le premier et encore longtemps le seul car les autres langages ont sérieusement cassé la compatibilité avec leurs release majeures.
    Cela n'enlève rien aux mérites propre des autres langages.