Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2017-01-04T09:29:14+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Découverte du langage Pony, message #1374002017-01-04T09:29:14+01:00Gabbro/@Gabbrohttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=2#p137400<p>Bonjour,</p>
<p>La bêta du contenu « Découverte du langage Pony » a été désactivée.</p>
<p>Le contenu est en ligne <a href="https://zestedesavoir.com/articles/1329/decouverte-du-langage-pony/">ici</a>.</p>Découverte du langage Pony, message #1323862016-11-24T00:43:51+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=2#p132386<p>Bonjour.</p>
<p>La bêta a été mise à jour. Correction d'une erreur dans un tableau (« écriture » à la place de « lecture »).</p>
<div align="center">
<p><a href="https://zestedesavoir.com/contenus/beta/1329/decouverte-du-langage-pony/">Découverte du langage Pony</a> </p>
</div>
<p>Merci d'avance pour vos commentaires.</p>Découverte du langage Pony, message #1318172016-11-20T13:03:05+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=2#p131817<p>Bonjour.</p>
<p>La bêta a été mise à jour. Précision dans le passage sur les <em>capabilities</em>.</p>
<div align="center">
<p><a href="https://zestedesavoir.com/contenus/beta/1329/decouverte-du-langage-pony/">Découverte du langage Pony</a> </p>
</div>
<p>Merci d'avance pour vos commentaires.</p>
<hr>
<p>Je vais demander la validation de l'article. Quelques points techniques (coloration syntaxique et tableaux cassés) font que l'article ne sera peut être pas publié immédiatement après la validation.</p>Découverte du langage Pony, message #1314902016-11-17T18:16:21+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p131490<p>Bonjour.</p>
<p>La bêta a été mise à jour. Précision d'un détail sur les <em>reference capabilities</em> transmissibles.</p>
<div align="center">
<p><a href="https://zestedesavoir.com/contenus/beta/1329/decouverte-du-langage-pony/">Découverte du langage Pony</a> </p>
</div>
<p>Merci d'avance pour vos commentaires.</p>Découverte du langage Pony, message #1314882016-11-17T18:07:36+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p131488<p>Bonjour.</p>
<p>La bêta a été mise à jour.</p>
<ul>
<li>Ajout d'un préambule sur la programmation concurrente ;</li>
<li>Allégement de la section sur les types et ajout de plus d'exemples de cas d'utilisation ;</li>
<li>Étoffement de la section sur les <em>reference capabilites</em> avec une introduction sur les <em>capabilities</em> en général ;</li>
<li>Plusieurs modifications mineures.</li>
</ul>
<div align="center">
<p><a href="https://zestedesavoir.com/contenus/beta/1329/decouverte-du-langage-pony/">Découverte du langage Pony</a> </p>
</div>
<p>Merci d'avance pour vos commentaires.</p>Découverte du langage Pony, message #1306612016-11-11T20:28:28+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p130661<blockquote>
<p>Le passage sur les types est lourd, long, et on ne sait pas où on va. C'est d'autant plus gênant que c'est la première vraie partie. Je crains que des gens ne trouve ce passage chiant et quitte l'article sans aller plus loin. C'est pour moi <strong>le</strong> point noir du contenu.</p>
</blockquote>
<p>Je verrai comment alléger.</p>
<blockquote>
<p>Tu parles très tôt de <em>reference capabilities</em>, mais tu n'expliques que tard ce que c'est. Et tu n'expliques jamais ce que sont les <em>races conditions</em>. Remonter une partie des explications permettrait de plus d'alléger la partie sur les <em>reference capabilities</em>, qui est assez complexes (ce qui je pense est inévitable vu ce dont tu parles).</p>
</blockquote>
<p>Je vais ajouter une explication sur les <em>race conditions</em>. Pour les <em>reference capabilities</em>, je verrai si je peux diluer les explications dans l'article.</p>
<blockquote>
<blockquote>
<p>L'implémentation de référence du langage est compilée et fonctionne actuellement sur x86 et ARM.</p>
</blockquote>
<p>Dans la nomenclature linuxienne typique x86 désigne parfois les systèmes 32 bits, et ARM désigne toujours les systèmes 32 bits. Je suppose que des binaires sont proposés pour un x86_64 (x86 64 bits, parfois appelés amd64), et peut-être même pour AArch-64 (ARM 64 bits). Peut-être util de tourner cette phrase autrement.</p>
</blockquote>
<p>Les versions précompilées ne sont disponibles que pour x86 32 et 64 bits, mais la compilation manuelle est également possible sur ARM 32 et 64 bits. Je vais préciser dans l'article.</p>
<blockquote>
<blockquote>
<p>Le langage est le fruit du projet de doctorat de Sylvan Clebsch. Il a commencé à travailler sur les concepts derrière Pony en 2011 et le langage est open-source depuis 2015. C'est donc un langage très jeune, mais avec de réelles fondations scientifiques. Les plus grandes inspirations de Pony ont été les travaux sur les acteurs (par Carl Hewitt à l'origine) et sur la sécurité capability-based (par Mark Miller à l'origine). La thèse de S. Clebsch, bien qu'actuellement non finalisée, est disponible sur Github.</p>
</blockquote>
<p>Désolé de faire mon chieur, mais <em>j'aime pas</em> ce paragraphe. Dire que le langage a des « fondations scientifiques » n'a pas grand sens. « Issus de récents travaux de la recherche académique » serait nettement plus concret (si c'est bien ça l'idée). Dire <strong>C'est la Science</strong>, c'est souvent un bon moyen de dire des sottises en affirmant qu'on n'est pas contestable. Je suis persuadé que tu peux dire ce que tu veux dire avec cette phrase de manière bien plus claire et propre. Rien que « basé sur des travaux scientifiques » serait beaucoup mieux à mon avis (avec un lien vers les travaux publiés bien évidemment <img alt="^^" src="/static/smileys/hihi.png"> ).</p>
</blockquote>
<p>Je prends note.</p>
<blockquote>
<p>Pour la thèse pas fini, ça me fait plus peur qu'autre chose. On a l'impression qu'il l'a commencé en 2011 et toujours pas fini (j'espère que c'est pas ça).</p>
</blockquote>
<p>C'est bien ça. Pour plus de contexte, il est en phase de finalisation et il avait toujours un boulot à côté pendant la majeure partie de son doctorat. Je ne sais pas si c'est vraiment utile de détailler ce point dans l'article.</p>
<blockquote>
<p>Par un mélange de curiosité et de rigueur scientifique, j'aurai aimé un lien vers les travaux quand tu les cites (un simple lien vers l'article de référence suffirait).</p>
</blockquote>
<p>J'ajouterai ça.</p>
<blockquote>
<blockquote>
<p>Pas de data races, avec une vérification complète à la compilation via un système nommé reference capabilities ;</p>
</blockquote>
<p>J'ai pas compris. <img alt=":-°" src="/static/smileys/siffle.png"> Faut dire que je ne sais ni ce qu'est une data races, si un système de références capabilites. Et on n'est qu'au 4<sup>e</sup> paragraphe…</p>
</blockquote>
<p>Je pense que j'ajouterai un préambule sur la programmation concurrente en général.</p>
<blockquote>
<figure><blockquote>
<p>d'exhaustion
</p>
</blockquote>
<figcaption></figcaption></figure><figure><blockquote>
<p>Méthode de calcul ou de vérification d'une grandeur consistant en une suite d'approximations de plus en plus précises. Démontrer par exhaustion.</p>
<p>Méthode d'analyse consistant à énumérer tous les cas possibles, toutes les hypothèses contenues dans une question.
</p>
</blockquote>
<figcaption><p><a href="http://www.cnrtl.fr/lexicographie/exhaustion">CNRTL</a></p></figcaption></figure><p>T'es sûr que c'est ce mot que tu voulais utiliser ?</p>
</blockquote>
<p>Je vérifierai.</p>
<blockquote>
<blockquote>
<p>Pony est un langage à acteurs. Un acteur est assez similaire à un objet mais dispose de propriétés supplémentaires très intéressantes. […]</p>
</blockquote>
<p>À la fin de la partie, tu n'as pas dit quelles étaient les propriétés qui différenciait les acteurs des objets. De ce que j'ai compris, toute la spécificité est contenu dans les <em>behaviours</em>. De fait, c'est quoi un acteur, sinon un objet qui peut contenir un <em>behaviour</em> ?</p>
</blockquote>
<p>C'est exactement ça.</p>
<blockquote>
<blockquote>
<p>En plus des acteurs, Pony dispose de classes, celles-ci étant introduites sans surprise par le mot-clé class.</p>
</blockquote>
<p>Stop ! Les acteurs sont proches des objets, les classes sont proches des objets. Dis-nous tout de suite ce qui différencie les deux ! Ne pars pas sur un exemple sans nous dire où tu vas avant.</p>
</blockquote>
<p>Je pense que la confusion sur ce point et sur le précédent vient de la distinction classe/objet pour modèle/instance, alors que j'utilise acteur pour désigner à la fois le modèle et l'instance. Je vais voir comment reformuler.</p>
<blockquote>
<p>Idem pour les interfaces et les traits. Après avoir lu ton texte, je dirai bien qu'ils sont identiques, et non pas seulement similaires.</p>
</blockquote>
<p>La grosse différence c'est qu'une interface introduit un sous-typage implicite alors qu'un trait introduit un sous-typage explicite. Par exemple, avec une interface, on peut avoir des types d'une bibliothèque externe en sous-type, mais pas avec un trait vu que le sous-typage doit être déclaré explicitement. En gros, on choisira l'un ou l'autre en fonction de si l'on veut être flexible et accepter n'importe quel type qui satisfait l'interface, ou si l'on veut éviter le sous-typage accidentel et n'accepter que les types définis comme sous-types.</p>
<p>Je vais plus détailler.</p>
<blockquote>
<p>J'ai sauté les types. Je ne sais pas où tu vas et ce que tu veux me montrer. Je me reconcentre et repart sur la partie suivante.</p>
</blockquote>
<p>L'objectif de cette partie est de montrer à quoi ressemble le système de types dans sa globalité. Peut être qu'il faudrait que je m'attarde moins sur les éléments individuels ?</p>
<blockquote>
<blockquote>
<p>la précédence des opérateurs n'existe pas et il faut placer des parenthèses dans toutes les expressions à plus de deux opérateurs.</p>
</blockquote>
<p>Tu es bien en train de dire qu'il faut faire (a * b) + c, voir (a * b) / c pour que le programme compile ? <img alt="o_O" src="/static/smileys/blink.gif"></p>
</blockquote>
<p>Oui. Ça peut paraître lourd au début mais on s'y habitue.</p>
<blockquote>
<blockquote>
<p>Filtrage de motifs</p>
</blockquote>
<p>Pour avoir fait un peu d'OCaml, je me demandais ce que me dis le compilateur en cas de filtrage incomplet. Par exemple,</p>
<p><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="k">let</span> <span class="n">x</span><span class="o">:</span> <span class="o">(</span><span class="nc">String</span> <span class="o">|</span> <span class="nc">None</span><span class="o">)</span> <span class="o">=</span> <span class="n">get_x</span><span class="bp">()</span>
<span class="k">match</span> <span class="n">x</span>
<span class="o">|</span> <span class="nc">None</span> <span class="o">=></span> <span class="n">foo</span><span class="bp">()</span>
<span class="o">|</span> <span class="s2">"abc"</span> <span class="o">=></span> <span class="n">bar</span><span class="bp">()</span>
</pre></div>
</td></tr></table>
</p>
</blockquote>
<p>Actuellement, une branche <code>else</code> renvoyant <code>None</code> est toujours ajoutée. À l'avenir, il est prévu de détecter les filtrages complets pour éviter d'ajouter le <code>else</code>.</p>
<blockquote>
<p>Pour les références, je trouve ça compliqué mais j'ai à peu près compris, ce qui tient de l'exploit vu le machin. <img alt=":-°" src="/static/smileys/siffle.png"></p>
</blockquote>
<p>Oui, c'est pas évident au début. On n'a pas encore trouvé la manière idéale pour expliquer tout ça. Apparemment les gens visualisent mieux le truc expliqué en terme d'alias autorisés plutôt qu'interdits mais ça reste difficile. En moyenne il faut une semaine ou deux de pratique pour bien assimiler le truc.</p>
<blockquote>
<p>Pour les performances, y a-t-il des tests un peu standard de fait ? Un truc comme <a href="https://benchmarksgame.alioth.debian.org/">ça</a>.</p>
</blockquote>
<p>Non, tous les benchmarks dont j'ai connaissance sont faits maison (mais avec le code disponible). En effet, il faudrait qu'on ajoute des trucs pour Pony sur ce genre de sites.</p>
<blockquote>
<p>Il y a deux langages récents qui se veulent concurrents (ou parallèle, il faut que je lise l'article de Nohar) et qui sont récents : Rust et Go. Comment Pony se place-t-il face à eux ?</p>
</blockquote>
<p>Pour Rust, je ne pense pas que ça soit comparable, les problématiques visées sont différentes. Je vois Rust comme un « super C », des performances comparables, des <em>threads</em> nus, des garanties de sûreté et un accès direct aux machineries dangereuses si besoin. Je n'ai pas l'impression que Rust vise la concurrence massive, un programme basé uniquement sur des <em>threads</em> ne scale pas. Il faudrait implémenter un système d'acteurs ou de coroutines au dessus pour obtenir les mêmes possibilités qu'en Pony (d'ailleurs, je pense que le <em>runtime</em> Pony est implémentable en Rust). Au niveau des garanties, les deux langages rendent les <em>data races</em> impossibles, Pony avec uniquement son système de types et Rust avec son système de types et un mécanisme de comptage de références (donc avec un léger surcoût à l'exécution).</p>
<p>Pour Go, la différence se situe dans la manière d'approcher la concurrence. Si l'on prend les exemples de <a href="http://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/">cet article</a>, Go serait un langage entièrement bleu, avec uniquement des opérations bloquantes, et Pony serait un langage entièrement rouge et non bloquant. La manière de programmer est donc très différente. Le meilleur paradigme dépendra probablement du problème à résoudre mais mon avis général sur les <em>channels</em> est à peu près aligné avec <a href="http://www.jtolds.com/writing/2016/03/go-channels-are-bad-and-you-should-feel-bad/">cet article</a>. De plus, Go peut subir des <em>data races</em>.</p>
<p>J'ajouterai un passage là dessus dans l'article.</p>
<figure><blockquote>
<p>Conclusion</p>
<p>Bref, un bel article, qui manque peut-être encore un peu de clarté par endroit (tout du moins pour les gens qui comme moi, n'ont vu le parallélisme que de loin). Merci. <img alt=":)" src="/static/smileys/smile.png"></p>
</blockquote>
<figcaption><p><a href="https://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p130593">Gabbro</a></p></figcaption></figure><p>Merci pour tes retours.</p>Découverte du langage Pony, message #1305932016-11-11T12:35:11+01:00Gabbro/@Gabbrohttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p130593<p>Bonjour, comme promis, le retour complet,</p>
<div class="information ico-after">
<p>Avertissement d'usage : j'ai tendance à être assez lourd lors des béta. Mon but n'est nullement de <em>taper</em> sur ton texte, mais bel et bien de pointer ce qui m'a gêné pour t'aide à l'améliorer. Ceci n'est <strong>en aucun cas</strong> une attaque personnelle.<sup id="fnref-passé"><a class="footnote-ref" href="#fn-passé">1</a></sup></p>
</div>
<hr>
<p>Impression globale (faite après la lecture du contenu en entier) :</p>
<ul>
<li>L'intro est beaucoup mieux. N'hésite pas à refaire une passe dessus et à étoffer ce que tu penses possible. <img alt=";)" src="/static/smileys/clin.png"></li>
<li>Le passage sur les types est lourd, long, et on ne sait pas où on va. C'est d'autant plus gênant que c'est la première vraie partie. Je crains que des gens ne trouve ce passage chiant et quitte l'article sans aller plus loin. C'est pour moi <strong>le</strong> point noir du contenu.</li>
<li>Tu parles très tôt de <em>reference capabilities</em>, mais tu n'expliques que tard ce que c'est. Et tu n'expliques jamais ce que sont les <em>races conditions</em>. Remonter une partie des explications permettrait de plus d'alléger la partie sur les <em>reference capabilities</em>, qui est assez complexes (ce qui je pense est inévitable vu ce dont tu parles).</li>
</ul>
<p>C'est globalement un bel article. <img alt=":)" src="/static/smileys/smile.png"></p>
<hr>
<p>Impressions au fil de l'eau (faite au fur et à mesure de la lecture) :</p>
<blockquote>
<p>L'implémentation de référence du langage est compilée et fonctionne actuellement sur x86 et ARM.</p>
</blockquote>
<p>Dans la nomenclature linuxienne typique x86 désigne parfois les systèmes 32 bits, et ARM désigne toujours les systèmes 32 bits. Je suppose que des binaires sont proposés pour un x86_64 (x86 64 bits, parfois appelés amd64), et peut-être même pour AArch-64 (ARM 64 bits). Peut-être util de tourner cette phrase autrement.</p>
<blockquote>
<p>Le langage est le fruit du projet de doctorat de Sylvan Clebsch. Il a commencé à travailler sur les concepts derrière Pony en 2011 et le langage est open-source depuis 2015. C'est donc un langage très jeune, mais avec de réelles fondations scientifiques. Les plus grandes inspirations de Pony ont été les travaux sur les acteurs (par Carl Hewitt à l'origine) et sur la sécurité capability-based (par Mark Miller à l'origine). La thèse de S. Clebsch, bien qu'actuellement non finalisée, est disponible sur Github.</p>
</blockquote>
<p>Désolé de faire mon chieur, mais <em>j'aime pas</em> ce paragraphe. Dire que le langage a des « fondations scientifiques » n'a pas grand sens. « Issus de récents travaux de la recherche académique » serait nettement plus concret (si c'est bien ça l'idée). Dire <strong>C'est la Science</strong>, c'est souvent un bon moyen de dire des sottises en affirmant qu'on n'est pas contestable. Je suis persuadé que tu peux dire ce que tu veux dire avec cette phrase de manière bien plus claire et propre. Rien que « basé sur des travaux scientifiques » serait beaucoup mieux à mon avis (avec un lien vers les travaux publiés bien évidemment <img alt="^^" src="/static/smileys/hihi.png"> ).</p>
<p>Pour la thèse pas fini, ça me fait plus peur qu'autre chose. On a l'impression qu'il l'a commencé en 2011 et toujours pas fini (j'espère que c'est pas ça).</p>
<p>Par un mélange de curiosité et de rigueur scientifique, j'aurai aimé un lien vers les travaux quand tu les cites (un simple lien vers l'article de référence suffirait).</p>
<blockquote>
<p>Pas de data races, avec une vérification complète à la compilation via un système nommé reference capabilities ;</p>
</blockquote>
<p>J'ai pas compris. <img alt=":-°" src="/static/smileys/siffle.png"> Faut dire que je ne sais ni ce qu'est une data races, si un système de références capabilites. Et on n'est qu'au 4<sup>e</sup> paragraphe…</p>
<figure><blockquote>
<p>d'exhaustion
</p>
</blockquote>
<figcaption></figcaption></figure><figure><blockquote>
<p>Méthode de calcul ou de vérification d'une grandeur consistant en une suite d'approximations de plus en plus précises. Démontrer par exhaustion.</p>
<p>Méthode d'analyse consistant à énumérer tous les cas possibles, toutes les hypothèses contenues dans une question.
</p>
</blockquote>
<figcaption><p><a href="http://www.cnrtl.fr/lexicographie/exhaustion">CNRTL</a></p></figcaption></figure><p>T'es sûr que c'est ce mot que tu voulais utiliser ?</p>
<blockquote>
<p>Pony est un langage à acteurs. Un acteur est assez similaire à un objet mais dispose de propriétés supplémentaires très intéressantes. […]</p>
</blockquote>
<p>À la fin de la partie, tu n'as pas dit quelles étaient les propriétés qui différenciait les acteurs des objets. De ce que j'ai compris, toute la spécificité est contenu dans les <em>behaviours</em>. De fait, c'est quoi un acteur, sinon un objet qui peut contenir un <em>behaviour</em> ?</p>
<blockquote>
<p>En plus des acteurs, Pony dispose de classes, celles-ci étant introduites sans surprise par le mot-clé class.</p>
</blockquote>
<p>Stop ! Les acteurs sont proches des objets, les classes sont proches des objets. Dis-nous tout de suite ce qui différencie les deux ! Ne pars pas sur un exemple sans nous dire où tu vas avant.</p>
<p>Idem pour les interfaces et les traits. Après avoir lu ton texte, je dirai bien qu'ils sont identiques, et non pas seulement similaires.</p>
<p>J'ai sauté les types. Je ne sais pas où tu vas et ce que tu veux me montrer. Je me reconcentre et repart sur la partie suivante.</p>
<blockquote>
<p>la précédence des opérateurs n'existe pas et il faut placer des parenthèses dans toutes les expressions à plus de deux opérateurs.</p>
</blockquote>
<p>Tu es bien en train de dire qu'il faut faire (a * b) + c, voir (a * b) / c pour que le programme compile ? <img alt="o_O" src="/static/smileys/blink.gif"></p>
<blockquote>
<p>Filtrage de motifs</p>
</blockquote>
<p>Pour avoir fait un peu d'OCaml, je me demandais ce que me dis le compilateur en cas de filtrage incomplet. Par exemple,</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="k">let</span> <span class="n">x</span><span class="o">:</span> <span class="o">(</span><span class="nc">String</span> <span class="o">|</span> <span class="nc">None</span><span class="o">)</span> <span class="o">=</span> <span class="n">get_x</span><span class="bp">()</span>
<span class="k">match</span> <span class="n">x</span>
<span class="o">|</span> <span class="nc">None</span> <span class="o">=></span> <span class="n">foo</span><span class="bp">()</span>
<span class="o">|</span> <span class="s2">"abc"</span> <span class="o">=></span> <span class="n">bar</span><span class="bp">()</span>
</pre></div>
</td></tr></table>
<p>Pour les références, je trouve ça compliqué mais j'ai à peu près compris, ce qui tient de l'exploit vu le machin. <img alt=":-°" src="/static/smileys/siffle.png"></p>
<p>Pour les performances, y a-t-il des tests un peu standard de fait ? Un truc comme <a href="https://benchmarksgame.alioth.debian.org/">ça</a>.</p>
<p>Il y a deux langages récents qui se veulent concurrents (ou parallèle, il faut que je lise l'article de Nohar) et qui sont récents : Rust et Go. Comment Pony se place-t-il face à eux ?</p>
<hr>
<p>Conclusion</p>
<p>Bref, un bel article, qui manque peut-être encore un peu de clarté par endroit (tout du moins pour les gens qui comme moi, n'ont vu le parallélisme que de loin). Merci. <img alt=":)" src="/static/smileys/smile.png"></p>
<div class="footnote">
<hr>
<ol>
<li id="fn-passé">
<p>J'ai déjà eu des gens qui ont (malheureusement) <strong>très</strong> mal pris un retour de béta, donc je préfère être parfaitement clair.  <a class="footnote-backref" href="#fnref-passé" title="Retourner au texte de la note 1">↩</a></p>
</li>
</ol>
</div>Découverte du langage Pony, message #1305632016-11-11T00:12:23+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p130563<p>Au passage, l'article approchant probablement de la complétude sur le fond, je suis à la recherche de remarques sur l'orthographe, la tournure des phrases et la forme en général.</p>
<p>Merci.</p>Découverte du langage Pony, message #1305612016-11-10T23:45:54+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p130561<p>Bonjour.</p>
<p>La bêta a été mise à jour. Correction d'une faute moche.</p>
<div align="center">
<p><a href="https://zestedesavoir.com/contenus/beta/1329/decouverte-du-langage-pony/">Découverte du langage Pony</a> </p>
</div>
<p>Merci d'avance pour vos commentaires.</p>Découverte du langage Pony, message #1305602016-11-10T23:38:10+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p130560<p>Bonjour.</p>
<p>La bêta a été mise à jour.</p>
<ul>
<li>Ajout de la section « Pony est-il le bon outil pour vous ? »</li>
<li>Ajout du chaînage de méthodes dans la section « Où l'on parle d'expressions ». Il s'agit d'une nouvelle <em>feature</em> tout juste finalisée.</li>
</ul>
<div align="center">
<p><a href="https://zestedesavoir.com/contenus/beta/1329/decouverte-du-langage-pony/">Découverte du langage Pony</a> </p>
</div>
<p>Merci d'avance pour vos commentaires.</p>Découverte du langage Pony, message #1302002016-11-08T19:45:49+01:00cepus/@cepushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p130200<p>Merci pour l'explication ! C'est exactement le genre d'explication qui me manquait dans ton article. <img alt=":)" src="/static/smileys/smile.png"></p>
<p>Du coup on pourrait dire que Pony est un genre d'Erlang mais mieux adapté à des calculs importants. C'est intéressant ça. Erlang a de très jolies feintes de sorte que l'immutabilité - et donc parfois la copie - ne pose pas de problème. Par exemple l'usage de ropes pour les strings.</p>
<p>Mais effectivement, des fois on pense à Erlang pour par exemple distribuer du calcul, mais ce serait mieux avec Pony.</p>Découverte du langage Pony, message #1301952016-11-08T19:04:03+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p130195<p>Le principal avantage, par rapport à Erlang en l'occurrence, c'est la vitesse intrinsèque du langage. Erlang copie le contenu de tous les messages et implémente ses files de messages avec des mutex. Pony n'a pas besoin de copier grâces aux garanties des <em>reference capabilities</em> et les files de messages ont une simple instruction atomique sur le push et sur le pop. Ce ne sont pas les seuls éléments mais ça joue énormément. Il y a quelques benchmarks dans un des papiers.</p>
<p>Par rapport à d'autres langages à acteurs, comme Scala par exemple, où le contenu des messages n'est pas copié, l'avantage est également au niveau de la sûreté. Il est possible d'avoir des <em>data races</em> en Scala, pas en Pony. De plus, la différence de performances est notable ici aussi.</p>
<p>Je vais ajouter quelques mots sur ça dans l'article.</p>Découverte du langage Pony, message #1301722016-11-08T16:18:44+01:00cepus/@cepushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p130172<p>Cool, je me réjouis de voir. Je trouve super d'avoir un article sur un sujet dont on parle peu.</p>
<p>Je serai peut-être pas le seul à trouver l'article intéressant mais à ne pas comprendre l'avantage de Pony sur ses concurrents, disons par exemple Erlang/OTP/BEAM. A part que le GC collecte les process.</p>Découverte du langage Pony, message #1297572016-11-05T17:46:34+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p129757<p>Le <code>let</code> ici représente la valeur qui sera utilisée dans le <code>match</code>. Ce n'est pas un code complet, il manque la valeur d'initialisation. Ce n'est en effet pas très clair, je vais modifier.</p>Découverte du langage Pony, message #1295852016-11-04T00:46:15+01:00cepus/@cepushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p129585<p>Cool, je trouve beaucoup mieux. <img alt=":)" src="/static/smileys/smile.png"></p>
<p>J'ai une question par rapport à l'exemple de filtrage de motif :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
6
7
8</pre></div></td><td class="code"><div class="codehilite"><pre><span></span>let x: (String | None)
match x
| None => foo()
| "abc" => bar()
| let s: String if s.contains("str") => baz()
else
bat()
end
</pre></div>
</td></tr></table>
<p>Tu as dit plus haut ici que tout est expression, du coup le <code>match</code> retourne une valeur. Donc pour la capturer, il faudrait pas un <code>=</code> à la fin de la ligne <code>let</code> et indenter le <code>match</code> pour rendre la chose plus claire ?</p>Découverte du langage Pony, message #1295832016-11-04T00:33:30+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p129583<p>Bonjour.</p>
<p>La bêta a été mise à jour.</p>
<ul>
<li>Étoffement de l'introduction</li>
<li>Clarification concurrent/parallèle</li>
</ul>
<div align="center">
<p><a href="https://zestedesavoir.com/contenus/beta/1329/decouverte-du-langage-pony/">Découverte du langage Pony</a> </p>
</div>
<p>Merci d'avance pour vos commentaires.</p>Découverte du langage Pony, message #1295212016-11-03T14:18:25+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p129521<p>Le fait que tout soit expression, pour commencer. Ensuite, il y a du filtrage de motifs et de l'application partielle de fonction. Et si on se cantonne aux <em>reference capabilities</em> <code>val</code> et <code>box</code>, sans acteurs ni FFI, on se retrouve avec un langage fonctionnel pur. En ajoutant les acteurs par dessus, on obtient grosso-modo les mêmes concepts qu'Erlang (par contre ça sera minable niveau perfs, les acteurs Pony ne sont pas pensés pour avoir un état immuable).</p>Découverte du langage Pony, message #1294662016-11-02T22:54:44+01:00cepus/@cepushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p129466<figure><blockquote>
<p><strong>victor</strong> : Ta formulation pour les acteurs semble en effet plus adéquate. Concernant OO vs fonctionnel, le langage est plutôt un mix des deux. Il y a des structures OO basiques (pas d'héritage) mais le système de types fait penser à un langage fonctionnel. Pour l'anecdote, Sylvan Clebsch, le designer principal du langage, répond « oui » à la question « Pony est-il orienté objet ou fonctionnel ? »</p>
</blockquote>
<figcaption><p><a href="https://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p129424">Praetonus</a></p></figcaption></figure><p>Je pense que tu confonds un peu typage et paradigme. Il y a un bon nombre de langages fonctionnels qui contrairement à Pony ne sont pas statiquement typés. Toujours pour garder le parallèle, regarde Erlang ou Elixir.</p>
<p>On pourrait dire aussi que Pony est OO, mais que son système de type fait penser à un langage OO (Java, Cpp). Plus sérieusement, la homepage de Pony dit que Pony est OO, idem sur GitHub : <a href="https://github.com/ponylang/ponyc">https://github.com/ponylang/ponyc</a> , et peu de choses me font penser qu'il est multiparadigme OO/fonctionnel.</p>
<p>Quels aspects fonctionnels vois-tu dans Pony ?</p>Découverte du langage Pony, message #1294242016-11-02T19:35:48+01:00Praetonus/@Praetonushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p129424<p><strong>Gabbro</strong> : Je vais revoir ça.</p>
<p><strong>nohar</strong> : En effet, les acteurs expriment plutôt la concurrence. En monocœur, on aura (par défaut) un seul <em>scheduler</em> (donc un seul <em>thread</em>). Pour Go et Pony, ils jouent globalement dans la même cour, la principale différence est que Go a des paradigmes bloquants, contrairement à Pony. Go peut <em>deadlock</em>, Pony non. De plus, Go n'est pas <em>data-race free</em>. J'ajouterai un paragraphe sur l'historique du langage et les inspirations.</p>
<p><strong>victor</strong> : Ta formulation pour les acteurs semble en effet plus adéquate. Concernant OO vs fonctionnel, le langage est plutôt un mix des deux. Il y a des structures OO basiques (pas d'héritage) mais le système de types fait penser à un langage fonctionnel. Pour l'anecdote, Sylvan Clebsch, le designer principal du langage, répond « oui » à la question « Pony est-il orienté objet ou fonctionnel ? »</p>
<p>Merci pour vos remarques.</p>
<p>PS : Au passage, concernant la coloration syntaxique, j'ai soumis une PR sur le dépôt de pygments (il me semble que c'est ce que ZdS utilise) il y a quelques temps, qui ne semble pas avoir attiré l'attention d'un mainteneur. Il y a un tas de PR inactives dans le dépôt, quelqu'un saurait si le projet est abandonné ? Si c'est le cas, il y aurait-il un autre moyen pour ajouter un langage à la coloration syntaxique de ZdS ? J'aimerais bien que le code Pony soit formaté correctement avant la publication de l'article.</p>Découverte du langage Pony, message #1293512016-11-02T10:50:18+01:00cepus/@cepushttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p129351<p>Chouette article, merci et bravo !</p>
<blockquote>
<p>Pony est un langage orienté acteurs.</p>
</blockquote>
<p>J'aime pas trop cette phrase. Je dirais plutôt que Pony est orienté objet, et se base sur le modèle d'acteur.</p>
<p>Je connais moins Pony qu'Erlang/Elixir, mais j'ai cette impression :</p>
<blockquote>
<p>Langages pour la prog concurrente avec actor modèle :</p>
<ul>
<li>OO : Pony</li>
<li>Fonctionnel : Erlang / Elixir</li>
</ul>
</blockquote>
<p>Je rejoins la remarque de nohar à propos du parallélisme. C'est bien la concurrence qui fait la force de Pony ou Erlang. Un CPU ? Pas de problème, ça se planifie. 12 CPU ? C'est pareil ! Juste un peu plus de boulot pour le scheduler. 24 CPU sur 12 différents serveurs ? Pas de problème, suffit que les schedulers se passent bien les messages.</p>
<p>C'est ça qui est fun historiquement avec Erlang par exemple, de mon point de vue. On avait des Pentium 2 à 200MhZ, donc il a fallu distribuer, donc il a fallu avoir une bonne plateforme/langage concurrent. Il y a quelques années avec l'arrivée des multicore, les malins se sont dit "Bon ben on a déjà tout en place pour faire tourner un truc sur 1000 machines, faire tourner un truc sur une seule machine qui a 1000 coeurs c'est easy peasy". Et c'est probablement une des raisons du grand regain d'intérêt pour BEAM à mon avis.</p>Découverte du langage Pony, message #1293432016-11-02T10:25:31+01:00nohar/@noharhttps://zestedesavoir.com/forums/sujet/7263/decouverte-du-langage-pony/?page=1#p129343<p>Parallélisme <strong>et/ou</strong> concurrence ? J'ai l'impression que l'article mélange les deux notions.</p>
<p>Une explication en français <a href="https://zestedesavoir.com/articles/1568/decouvrons-la-programmation-asynchrone-en-python/#2-concurrence-et-parallelisme">ici</a> (dans mon article sur la prog asynchrone), ou plus crédible et certainement plus complet, par Rob Pike (en anglais, <a href="https://talks.golang.org/2012/waza.slide#1">slides</a> ) : </p>
<iframe allowfullscreen="true" frameborder="0" height="281" src="https://player.vimeo.com/video/49718712" width="500"></iframe>
<p>En très résumé, que fait Pony s'il n'a qu'un seul CPU à sa disposition ?</p>
<p>D'ailleurs, où est-ce que le langage se situe par rapport à Go qui semble être très, très cousin sur la catégorie de problèmes que Pony cherche à résoudre. Un petit mot sur les sources d'inspiration ?</p>