From ponder.stibbons at orange.fr Wed Oct 2 20:03:19 2024 From: ponder.stibbons at orange.fr (Jean) Date: Wed, 2 Oct 2024 20:03:19 +0200 Subject: [Perl] =?utf-8?q?Rakudo_=3A_comment_faire_cohabiter_deux_versions?= =?utf-8?q?_du_m=C3=AAme_module_=3F?= Message-ID: Dans Rakudo, il est possible d'installer deux versions d'un même module. Je prends l'exemple du module de calendrier Aztèque, car la version 0.0.2 comporte un attribut 'daycount', qui est absent de la version 0.0.1. On peut installer les deux versions avec : -*-*-*-*- début du script shell git clone https://github.com/jforget/raku-Date-Calendar-MayaAztec.git cd raku-Date-Calendar-MayaAztec git checkout v0.0.2 zef install . git switch - git checkout v0.0.1 zef install . git switch - zef locate Date::Calendar::Aztec zef --installed list | grep Calendar -*-*-*-*- fin du script shell Ensuite, je tente de créer une date en version 0.0.1 avec : -*-*-*-*- début du script Raku use Date::Calendar::Aztec:ver<0.0.1>; my Date $dg .= today; my Date::Calendar::Aztec $da .= new-from-date($dg); say $da.raku; -*-*-*-*- fin du script Raku Le résultat est que l'objet $da comporte un attribut 'daycount', ce qui prouve que c'est la version 0.0.2 et non pas la version 0.0.1. Ajouter une clause ':ver<0.0.1>' à l'instruction 'use' signifie « utiliser la version 0.0.1 **ou ultérieure** », comme en Perl. Question 1 : comment peut-on écrire un programme de façon que ce soit la version 0.0.1 qui soit utilisée et non pas la version 0.0.2 ? Question 2 : est-il possible d'écrire un programme qui utilise les deux versions du module ? Si oui, comment ? Question 3 : en admettant une réponse affirmative à la question précédente, comment peut-on identifier la version du module pour le contenu d'une variable du programme ? Certes je peux poser une question indirecte et tester l'existence de l'attribut 'daycount', mais cela ne fonctionnera qu'avec le module de calendrier aztèque. Plus généralement, comment faire pour poser une question directe et obtenir un résultat '0.0.1' ou '0.0.2' ? Lorsque j'essaie say $da.WHO; j'obtiens uniquement : Date::Calendar::Aztec et lorsque j'essaie say $da.WHAT; j'obtiens un message d'erreur. Quant à say $da.VERSION; (comme en Perl), j'obtiens un message d'erreur m'indiquant qu'il n'y a pas de méthode 'VERSION'. Et maintenant, réécrivons le passé et supposons que j'aie ajouté un paramètre de classe 'api', ce qui aurait donné dans un cas : unit class Date::Calendar::Aztec:ver<0.0.1>:auth:api<1> et dans l'autre : unit class Date::Calendar::Aztec:ver<0.0.2>:auth:api<2> Question 4 : comment le paramètre ':api' fonctionne-t-il ? Questions 5, 6 et 7 : est-ce que cela change quelque chose pour les réponses 1, 2 et 3 ? Pour mémoire, j'ai expérimenté dans une machine virtuelle Fedora 39 avec : -*-*-*- début du copier-coller jf at fedora:~$ raku -v Welcome to Rakudo? v2024.04. Implementing the Raku® Programming Language v6.d. Built on MoarVM version 2024.04. jf at fedora:~$ zef --version 0.21.4 -*-*-*- fin du copier-coller Merci d'avance pour vos lumières, Jean F From mc at unistra.fr Fri Oct 4 17:12:30 2024 From: mc at unistra.fr (Marc Chantreux) Date: Fri, 4 Oct 2024 17:12:30 +0200 Subject: [Perl] =?iso-8859-1?q?Rakudo_=3A_comment_faire_cohabiter_deux_ver?= =?iso-8859-1?q?sions_du_m=EAme_module_=3F?= In-Reply-To: References: Message-ID: salut Jean, On Wed, Oct 02, 2024 at 08:03:19PM +0200, Jean wrote: > Question 1 : comment peut-on écrire un programme de façon que ce soit > la version 0.0.1 qui soit utilisée et non pas la version 0.0.2 ? en l'absence de réponse, je te propose de retenter ta chance sur perl6-users sur perl.org. > Question 2 : est-il possible d'écrire un programme qui utilise les > deux versions du module ? Si oui, comment ? heuu ? perso je comprendrais assez bien que la réponse soit "non" mais bon ? c'est raku. j'aurais tendance à tenter de fouiller dans le code de zef. cordialement, -- Marc Chantreux Pôle CESAR (Calcul et services avancés à la recherche) Université de Strasbourg 14 rue René Descartes, BP 80010, 67084 STRASBOURG CEDEX 03.68.85.60.79