Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2020-11-16T23:36:54+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Que se passe-t-il avec camlp4 ?, message #2281612020-11-16T23:36:54+01:00titus/@titushttps://zestedesavoir.com/forums/sujet/14672/que-se-passe-t-il-avec-camlp4/?page=1#p228161<p>Merci pour ta réponse <a href="/membres/voir/gasche/" rel="nofollow" class="ping ping-link">@<span class="ping-username">gasche</span></a>.</p>
<blockquote>
<p> Cette transition a commencé avec OCaml 4.01 en Septembre 2013, ce n’est pas nouveau; ton étonnement suggère que tu n’es pas un utilisateur actif de versions à jour d’OCaml</p>
</blockquote>
<p>En effet. J’ai souvent eu l’impression, en regardant de loin les nouvelles versions d’OCaml, que les nouveautés ne concernaient que des gens « du milieu » et que j’avais encore beaucoup à faire avec les éléments de base du langage dont je dispose… ce qui explique que je ne traîne pas souvent sur ocaml.org (et c’est sûrement un tord !)</p>
<blockquote>
<p>Dans ce contexte, sur le moyen/long terme le choix le plus sain serait d’éviter d’utiliser l’extension syntaxique pour les streams (<code>[< ... >]</code> et <code>parser</code>).</p>
</blockquote>
<p>C’est noté ! J’ai pu lire ici et là par le passé que camlp4 était un outil intéressant justement pour cette extension syntaxique. Mais je comprends un peu mieux les raisons qui ont poussé la communauté OCaml à ne plus maintenir camlp4 en lisant <a href="https://discuss.ocaml.org/t/the-end-of-camlp4/4216/22">ton post</a> sur ocaml.org.</p>
<p>Et pour conclure sur le fond « technique » de ce topic, j’opte pour ta solution long terme en utilisant le module Stream de OCaml. Pour des parsers simples, la fonction Stream.next fera bien le travail dans un premier temps <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>Que se passe-t-il avec camlp4 ?, message #2275442020-11-01T12:04:11+01:00gasche/@gaschehttps://zestedesavoir.com/forums/sujet/14672/que-se-passe-t-il-avec-camlp4/?page=1#p227544<p>Il y a plusieurs choses différentes à discuter:</p>
<ul>
<li>
<p>Tu utilises des méthodes de compilation qui sont fragiles (elles supposent que <code>camlp4o.cma</code> est installé avec la bibliothèque standard, alors que c’est maintenant un paquet séparé) et d’un autre âge (à minima utiliser <code>ocamlfind</code> qui abstrait sur ces détails). C’est facile à corriger et tu auras du code qui marche en réponse à ce fil.</p>
</li>
<li>
<p>En effet, globalement camlp4 est déprécié aujourd’hui et n’est plus considéré comme une bonne solution. La communauté d’utilisateurs OCaml recommande ppx.</p>
<p>Cette transition a commencé avec OCaml 4.01 en Septembre 2013, ce n’est pas nouveau; ton étonnement suggère que tu n’es pas un utilisateur actif de versions à jour d’OCaml, ce qui n’a rien de honteux, il faut que ça se passe bien même pour des utilisateurs occasionnels ou très non-spécialistes.</p>
<p>Concrètement, Camlp4 est de moins en moins maintenu à jour depuis quelques années (tu as vu l’annonce de la fin du support en août 2019; c’est en fait toujours maintenu mais à petites doses), et finira par arrêter d’être facile à utilier sur une version à jour de OCaml. C’est utilisable aujourd’hui, mais pas une bonne approche sur le long terme.</p>
</li>
<li>
<p>Dans ce contexte, sur le moyen/long terme le choix le plus sain serait d’éviter d’utiliser l’extension syntaxique pour les streams (<code>[< ... >]</code> et <code>parser</code>). Ça veut dire soit faire le parsing sur les flux directement (en utilisant <code>Stream</code> ou une autre bibliothèque), ce qui est plutôt facile pour des parsers simples, soit utiliser une autre approche de parsing, par exemple Menhir ou des combinateurs de parsing.</p>
</li>
</ul>
<p>Ceci étant dit, le plus simple pour corriger ton problème à court terme est d’utiliser <code>ocamlfind</code>, qui sait où trouver <code>camlp4o.cma</code>. Pour compiler un projet, il suffit de dire à ton outil de build d’ajouter le paquet <code>camlp4</code>. Dans le toplevel interactif:</p>
<ol>
<li>Si tu utilises <code>ocaml</code>, faire <code>#use "topfind";;</code> pour charger le support ocamlfind, et ensuite <code>#camlp4o;;</code> qui active les extensions syntaxiques dans le toplevel.</li>
<li>Si tu utilises <code>utop</code>, un toplevel grandement amélioré (je t’invite à essayer), <code>#use "topfind";;</code> n’est plus nécessaire, utiliser <code>#camlp4o;;</code> directement devrait suffire.</li>
</ol>Que se passe-t-il avec camlp4 ?, message #2275332020-10-31T14:56:04+01:00titus/@titushttps://zestedesavoir.com/forums/sujet/14672/que-se-passe-t-il-avec-camlp4/?page=1#p227533<p>Bonjour,</p>
<p>Récemment, j’ai souhaité me replonger dans l’interprétation, en commençant par me rafraîchir la mémoire sur l’analyse lexicale avec OCaml (version 4.08.1) et la manipulation des streams.</p>
<p>Je rencontre une erreur au chargement des modules usuellement appelés dans ce contexte :</p>
<div class="hljs-code-div hljs-code-ocaml"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span></div><pre><code class="hljs language-ocaml">#load <span class="hljs-string">"dynlink.cma"</span> ;;
#load <span class="hljs-string">"camlp4o.cma"</span> ;;
<span class="hljs-type">Cannot</span> find file camlp4o.cma.
</code></pre></div>
<p><code>camlp4</code> ne semblait pas installé, j’ai donc lancé <code>opam install camlp4</code> suivi de <code>opam update</code> et <code>opam upgrade</code>.
Il me semble que l’installation s’est bien passée :</p>
<div class="hljs-code-div hljs-code-bash"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span></div><pre><code class="hljs language-bash">$ ocamlfind query camlp4
/home/titus/.opam/4.08.1/lib/ocaml/camlp4
</code></pre></div>
<p>Cependant, je rencontre la même erreur au chargement de <code>camlp4o.cma</code> dans le top-level OCaml. Dans le doute, j’ai voulu m’assurer que je ne travaillais pas sur une ancienne version d’OCaml mais il semblerait que non :</p>
<div class="hljs-code-div hljs-code-bash"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span></div><pre><code class="hljs language-bash">$ opam switch show
4.08.1
</code></pre></div>
<p>Cela correspond bien à la version pour laquelle camlp4 a été installée.</p>
<p>D’où une première question : mon installation et mon appel à camlp4 sont-ils corrects ? J’utilise opam très ponctuellement et quelque chose m’a peut-être échappé.</p>
<p>J’ai ensuite, de façon prétentieuse, supposé que le problème ne venait pas de moi. En faisant des recherches, je suis tombé sur un <a href="https://discuss.ocaml.org/t/the-end-of-camlp4/4216">post</a> sur ocaml.org. Ce message explique que camlp4 arrive en fin de vie et sera à terme remplacé par un outil du nom de <code>ppx</code>.</p>
<p>Je comprends du dernier paragraphe que les développeurs OCaml ne considèrent plus les streams comme un outil pertinent pour l’analyse lexicale, et nous encouragent à explorer d’autres solutions (mais j’ai peut-être mal compris…)</p>
<p>Cela signifie-t-il qu’il sera désormais impossible de faire tourner des codes appelant des pattern matching sur des stream, ou qui utilisent la notation <code>[< >]</code> ?</p>
<p>Y a-t-il un lien entre cette annonce (qui pourtant indique qu’une version de camlp4 est disponible pour OCaml 4.08) et mon problème ?</p>
<p>Merci d’avoir pris le temps de me lire et merci par avance pour vos réponses ! <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>