• [^] # 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.