URL: https://linuxfr.org/news/pharo-quoi-de-neuf Title: Pharo : quoi de neuf ? Authors: tisaac Davy Defaud, stepharo, bobble bubble, palm123, Benoît Sibaud, BAud et orfenor Date: 2020-11-22T14:58:29+01:00 License: CC By-SA Tags: pharo et smalltalk Score: 4 Au début de Pharo, il a eu droit à une série de dépêches sur _LinuxFr.org_. Mais depuis 2016 et la [dépêche sur Pharo 5.0](https://linuxfr.org/news/sortie-du-langage-pharo-et-de-son-environnement-de-developpement-en-version-5-0), il faut bien reconnaître qu’il n’y a pas vraiment eu de nouvelles concernant Pharo sur _LinuxFr.org_. Ayant acheté le numéro de novembre‐décembre de _[Programmez](https://www.programmez.com/magazine/programmez-243-pdf)_, j’y ai lu un dossier intéressant sur Smalltalk qui présente Pharo comme une implémentation moderne et libre de Smalltalk. Cela m’a motivé à me renseigner un peu sur Pharo et, finalement, je me suis dit que certains seraient peut‑être intéressés de voir ce qu’est devenu Pharo depuis la dernière dépêche de 2016. ---- [Site officiel](https://pharo.org/) [Pharo sur GitHub](https://github.com/pharo-project/pharo) [Le MOOC Pharo](https://www.fun-mooc.fr/courses/course-v1:inria+41024+session01/about) [Pharo sur YouTube](https://www.youtube.com/channel/UCp3mNigANqkesFzdm058bvw) [Everything you wanted to know about http://www.pharo.org without being forced to read 1000 mails](https://pharoweekly.wordpress.com/) ---- Pharo, c’est quoi ================= La pub ------ Selon la [page d’accueil](https://pharo.org/) de son site Internet (traduction par mes soins) : > Pharo est un langage de programmation orientée objet pur et un environnement puissant, axé sur la simplicité et le retour d’information immédiat (pensez à un EDI et un système d’exploitation réunis en une même suite logicielle). Sur la même page, on vous promet : - **un langage simple et puissant :** pas de constructeurs, pas de déclaration de types, pas d’interfaces, pas de types primitifs ; pourtant, un langage puissant et élégant avec une syntaxe complète qui tient sur une carte postale ! Pharo, ce sont des objets et des messages ; et c’est tout ; - **un environnement vivant et immersif :** un retour d’information immédiat à tout moment de votre développement — développement, test, débogage — ; même dans les environnements de production, vous ne serez plus jamais bloqué dans la compilation et le déploiement des étapes ! - **une expérience de débogage étonnante :** l’environnement Pharo comprend un débogueur comme vous n’en avez jamais vu auparavant. Il vous permet de parcourir le code, de relancer l’exécution des méthodes, de créer des méthodes à la volée, et bien plus encore ! - **Pharo est à vous :** Pharo est le fruit d’une incroyable communauté, avec plus de cent contributeurs pour la dernière révision de la plate‑forme et des centaines de personnes qui contribuent constamment à des cadriciels et des bibliothèques ; - **entièrement open source :** la pile complète de Pharo est publiée sous licence MIT. Un peu d’histoire ----------------- La généalogie de Pharo remonte à Smalltalk et particulièrement la version Smalltalk-72 qui a été créée par Alan Kay pour relever le défi de spécifier un langage de programmation puissant en moins d’une page. Les fondamentaux sont là, mais la maturité viendra vraiment avec la version Smalltalk-80. Ces développements se déroulent dans le cadre du Xerox [PARC](https://fr.wikipedia.org/wiki/Palo_Alto_Research_Center "Palo Alto Research Center") qui verra dans les années 70 passer une concentration hallucinante de génies de l’informatique qui poseront les bases de nombreux éléments de l’informatique moderne. Xerox s’est montré capable de monter un centre de recherche particulièrement fécond mais sera moins inspiré concernant la valorisation de ce travail. Nous éludons une partie de l’histoire pour nous retrouver en 1995 chez Apple où Alan Kay et Dan Ingalls (un autre ancien du PARC de Xerox) créent [Squeak](https://fr.wikipedia.org/wiki/Squeak), qui est une nouvelle implémentation de Smalltalk hautement portable et dont la machine virtuelle est elle‑même écrite en Smalltalk. Le focus de Squeak est assez orienté sur les applications ludiques et multimédia. Squeak n’est pas la seule suite qui a été donnée à Smalltalk, on peut par exemple citer : - [GNU Smalltalk](https://fr.wikipedia.org/wiki/GNU_Smalltalk) ; - [VisualWorks](https://fr.wikipedia.org/wiki/VisualWorks). Pharo, quant à lui, est un divergence de Squeak qui était justifiée de la manière suivante dans [la dépêche annonçant le lancement de Pharo](https://linuxfr.org/news/naissance-dun-projet-libre-pharo) : > Le projet Pharo est un projet de Smalltalk open source. L’objectif de Pharo est de pousser Squeak au niveau supérieur. > Pharo est en effet un _fork_ de Squeak. Les _forks_ apparaissent pour résoudre des problèmes difficiles à résoudre dans le projet père. En effet, Squeak est otage de plusieurs sous‑communautés (très amicales au demeurant), ce qui ne conduit à aucune évolution utile pour ces sous‑communautés, et cela résulte finalement en une myriade de _forks_ (Etoys, OpenCroquet, Sophie, Squeak, Qwaq…), chacun spécifique à une communauté/projet, mais insuffisamment généraliste pour une portée plus large. Dans un [commentaire](https://linuxfr.org/nodes/85533/comments/1223167) de l’annonce de la version 1.2, ceci était exprimé de la manière suivante : > Pharo est un _fork_ de Squeak, suite à une divergence d’intérêts entre des développeurs qui voulaient continuer à développer une plate‑forme multimédia un peu fourre‑tout (Squeak) et ceux qui voulaient que se développe un Smalltalk avec de meilleures pratiques logicielles (tests unitaires, découplage des modèles et de l’interface utilisateur, intégration continue des modifications…). Pharo vise une cible plus professionnelle avec notamment le développement Web avec Seaside. Pharo = Smalltalk ? ------------------- Alors qu’au départ, Pharo a souvent été présenté comme une implémentation de Smalltalk, la réalité est un peu plus complexe que cela. Pharo est désormais plus présenté comme un langage (fortement) inspiré par Smalltalk [comme l’exprimait Damien Cassou](https://linuxfr.org/nodes/102093/comments/1536800) dans les commentaires de la [dépêche annonçant Pharo 3.0](https://linuxfr.org/news/sortie-du-langage-pharo-et-de-son-environnement-de-developpement-en-version-3-0) : > Effectivement, on peut voir Pharo comme une implémentation du standard Smalltalk avec son environnement de développement et ses bibliothèques de code. Cependant, nous avons décidé d’arrêter de dire ça car le standard Smalltalk n’évolue plus alors qu’on améliore Pharo en permanence. > Ça signifie qu’on s’autorise à ne pas être compatible avec le standard. Par exemple, Pharo possède la notion de _trait_ (un mécanisme d’héritage multiple de méthodes) alors que le standard ne le prévoit pas. De même, dans la prochaine version de Pharo, on n’utilisera plus de chaînes de caractères pour déclarer les variables d’instances car on utilisera à la place les _Slots_ (un mécanisme beaucoup plus poussé qui permet d’avoir différents types de variables d’instances avec des comportements différents). Là encore, on s’éloigne du standard Smalltalk. Enfin, le standard définit une API qu’on s’autorise à remplacer petit à petit par une autre plus moderne. > Pour toutes ces raisons, on parle maintenant de « _Smalltalk-inspired_ » et plus d’implémentation de Smalltalk. La syntaxe de Pharo ------------------- La syntaxe de Pharo est très proche de celle de Smalltalk et continue à tenir sur une carte postale. Quand on dit que la syntaxe de Pharo tient sur une carte postale, il faut l’entendre comme le fait que l’on peut illustrer toutes les caractéristiques de cette syntaxe sur un code qui tient sur une carte postale. ![La syntaxe de Pharo sur une carte postale, par Xkriva11 — Own work, CC BY‑SA 4.0, https://commons.wikimedia.org/w/index.php?curid=69598356](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Pharo_syntax_postcard.svg/800px-Pharo_syntax_postcard.svg.png) Pour avoir une explication un tout petit peu plus détaillée, on pourra se référer à cette _[Cheat Sheet](http://files.pharo.org/media/pharoCheatSheet.pdf)_ qui tient sur deux pages. Une des caractéristiques les plus marquantes de Pharo est son caractère très pur de langage orienté objet. Pratiquement tout est objet. Entre autres, il y a très peu de mots réservés. Notamment, on retrouve très peu d’instructions de contrôle intégrées au langage telles que `if … then … (else …)`. Ce genre de contrôle sera implémenté en utilisant des objets et en leur adressant des messages. Dans le cas d’un `if … then …`, on aura : ``` C Condition ifTrue: quelque chose ifFalse: autre chose ``` Condition est un objet de type booléen à qui on envoie deux messages (`ifTrue` et `ifFalse`, avec à chaque fois un bloc comme argument). Projets utilisant Pharo ----------------------- Un langage avec des caractéristiques plaisantes, c’est sympa. Mais c’est encore plus intéressant quand l’on peut voir ce que cela donne dans des cas concrets. Ici, une sélection très loin d’être exhaustive de projets réalisés avec Pharo. Les plus curieux trouveront [une liste plus longue sur le site de Pharo](https://pharo.org/success). Liste qui malheureusement n’est pas totalement à jour dans la mesure où elle renseigne aussi des projets qui ne semblent plus être actifs aujourd’hui. ### Dr. Geo Sans doute le projet le plus connu des moules de _LinuxFr.org_, vu que ce projet y a eu droit à [une série de dépêches](https://linuxfr.org/tags/dr_geo/public). ![Illustration Dr. Geo](https://img.linuxfr.org/img/687474703a2f2f666f72756d2e647267656f2e65752f66696c652f6e343032343930332f44757265722e706e67/Durer.png) [Dr. Geo](https://fr.wikipedia.org/wiki/DrGeo) est un logiciel de géométrie interactive euclidienne du plan, pour une utilisation à l’école secondaire et primaire. Il permet d’organiser des activités pédagogiques dans l’enseignement de la géométrie, voire d’autres domaines liés des mathématiques. Il propose également une approche de la géométrie dynamique par la programmation, soit par l’utilisation de script(s) intégré(s) à une figure, soit par une description purement programmatique d’une construction géométrique. ### Honey Ginger Honey Ginger est un simulateur hydrodynamique à particules lisses (_smoothed‐particle hydrodynamics simulator_) avec une visualisation et une interactivité riches. Je ne sais pas à quoi cela peut réellement servir et comment on peut l’intégrer à d’autres choses pour arriver à quelque chose d’utile, mais je trouve les effets dans la [vidéo de démo](http://) assez amusants. ![Illustration de Honey Ginger](http://files.pharo.org/success-stories/images/HoneyGinger-LagoonRefractionWorld.png) ### Monde bancaire Je trouve intéressant d’observer que Pharo est aussi utilisé dans des mondes « sérieux » et pas seulement chez des _geeks_, des académiques ou des graphistes. Ainsi, Pharo a été utilisé dans des [GAB](https://fr.wikipedia.org/wiki/Guichet_automatique_bancaire#Les_GAB_aujourd'hui_en_France "guichet automatique bancaire") déployés dans les rues de Moscou de 2008 à 2015. Cet usage ayant fini semble‐t‐il suite à la fermeture de la banque pour d’autres raisons (information que je n’ai pas vérifiée). On retrouve des vidéos de ces GAB par [ici](https://astares.blogspot.com/2017/10/pharo-success-story-driving-atms-in.html). Autre banque à avoir eu recours à Pharo : CSOB. CSOB est une des trois plus grandes banques en République tchèque et est une filiale à 100 % de la banque belge KBC. Sinon, en Argentine, [des banques utilisent Pharo pour la gestion des stocks](https://mercapabbaco.com/?idioma=en). ### Phratch Bien que je craigne que le projet soit abandonné depuis lors, j’ai envie de mentionner ce projet de réimplémentation de [Scratch](https://fr.wikipedia.org/wiki/Scratch_(langage)) en [Pharo](https://vimeo.com/73307234). Premièrement, parce que je suis un peu inquiet de l’évolution de Scratch qui me semble avec la version 3 aller vers une dépendance à Internet, alors que les versions précédentes pouvaient fonctionner sur un ordinateur en totale autonomie. Deuxièmement, parce que c’est quelque peu particulier de voir un projet être implémenté en Pharo alors que le projet initial était écrit en Smalltalk (les versions suivantes sont passées en ActionScript puis en JavaScript). Comme un retour aux sources. Pour ceux qui aiment ce genre de programme et qui sont prêts à se passer dans le nom de la référence explicite à Scratch, il y a aussi [NovaStelo](https://github.com/EiichiroIto/NovaStelo) qui revisite le genre. Quoi de neuf ? ============== Iceberg ------- Le gestionnaire de versions historique de Pharo était Monticello. Depuis Pharo 6.0, il a été remplacé par Iceberg qui fait le pont avec Git. L’esprit de Monticello était très similaire à Git en tant que système de gestion de versions distribué. Le système Monticello était taillé sur mesure pour les systèmes Smalltalk. Une bibliothèque cliente et un serveur ou forge Monticello sont nécessaires pour pouvoir l’utiliser. Les raisons qui ont poussé Pharo à aller au‑delà de Monticello pour favoriser une compatibilité avec Git sont : 1. le recours à Git permet à la communauté Pharo d’employer des forges standard déjà maintenues permettant de ne pas devoir y consacrer des ressources qui peuvent être plus utilement employées ailleurs dans le cadre de Pharo ; 2. Git est devenu _de facto_ le standard comme gestionnaire de versions, imposer d’en utiliser un autre tel que Monticello crée une barrière à l’entrée supplémentaire dans la découverte de Pharo ; faire usage de Git permet ainsi de réduire le coût d’entrée pour un informaticien découvrant Pharo ; 3. certaines forges telles que GitHub ou GitLab offrent une belle visibilité pour les projets qu’elles hébergent ; ainsi, l’intégration avec Git permet aussi aux développeurs en Pharo de bénéficier de cette visibilité. Iceberg permet naturellement les opérations classiques d’un dépôt Git (création, clonage, gestion des branches, _commits_, fusion de branches…). La particularité d’Iceberg c’est qu’il essaie d’articuler le monde des fichiers source (partie Git) avec la représentation objet omniprésente dans le monde Smalltalk. Par exemple, les algorithmes de diff ne mettent pas seulement en lumière une à une les lignes de codes impactées (approche Git) mais mettront en évidence les méthodes modifiées ainsi que leurs classes. bootstrapping ------------- Depuis Pharo 7.0, Pharo peut être « bootstrappé » à partir d’une version antérieure de Pharo. Dans ce contexte, « [boostrapper](https://fr.wikipedia.org/wiki/Bootstrap_(compilateur)) » signifie compiler un langage en utilisant un compilateur écrit dans ce même langage. En d’autres mots, l’image d’une nouvelle version de Pharo est générée par une application Pharo qui s’exécute dans une version antérieure de Pharo. Au‑delà de l’élégance de la démarche de créer la version suivante à partir de la précédente, cela permet aussi de créer des noyaux de Pharo réduits. Cela peut être intéressant soit dans une perspective de sécurité (on réduit la surface d’attaque), soit dans une perspective d’informatique embarquée (on réduit l’usage de la mémoire pour Pharo). Il est ainsi possible d’obtenir à l’aide de ce _bootstrap_ des noyaux de l’ordre de 200 Kio. Calypso ------- Calypso est depuis Pharo 7.0 le nouveau navigateur système de Pharo (_system browser_). Il remplace Nautilus, apporte des améliorations pour le travail à distance et des capacités de navigation plus avancées. Gestion de différents états pour les traits ------------------------------------------- Avec Pharo comme pour Smalltalk, l’héritage est simple. Une classe n’hérite que d’une seule autre. En revanche, pour quand même pouvoir gérer une forme d’héritage multiple, Pharo implémente la notion de [traits](https://fr.wikipedia.org/wiki/Trait_(programmation)). Cela permet de partager des comportements entre classes au‑delà de la hiérarchie des classes. Depuis Pharo 7.0, les _[stateful traits](https://www.slideshare.net/esug/stateful-traits-in-pharo)_ sont implémentés. 64 bits ------- Dans ses premières versions, Pharo était une version 32 bits. Depuis Pharo 6.0, une version 64 bits est disponible pour GNU/Linux et macOS. C’est également le cas pour Windows depuis Pharo 8.0. Et pour la suite ? ================== La publication de Pharo 9.0 est prévue pour mars 2021. Dans les cartons, une série de nouvelles fonctionnalités : - nouvelle syntaxe de classe ; - commentaire en Microdown (une sorte de Markdown) ; - des nouveaux outils ; - nouveau cadriciel graphique (avec possibilités de rendu GTK) ; - nouveau mécanisme de complétion automatique ; - optimisation du compilateur ; - nouvelles machines virtuelles sur ARM 64 bits ; - nouveau FFI ; - ses tonnes de corrections et tests… Ressources ========== Pharo n’est clairement pas un projet qui se cache ou qui est difficile d’accès sur Internet. Il y a pas mal de ressources qui permettent de le découvrir même pour de parfaits _newbies_. On retrouvera pas mal d’[informations sur le site officiel de Pharo](https://pharo.org/documentation). ### MOOC Mettons en exergue la possibilité de suivre un [MOOC](https://www.fun-mooc.fr/courses/course-v1:inria+41024+session01/about) sur _www.fun-mooc.fr_. C’est la première version du MOOC remis à jour, mais il se base sur le MOOC précédent qui a connu au minimum quatre sessions. Plutôt orienté pour des personnes ayant une expérience de la programmation, il devrait cependant être accessible à toute personne motivée. Pour contenter tout le monde, le MOOC est constitué de cinq parcours : - débutant complet ; - en quête de Web ; - rafraîchir votre vision OO ; - devenir un expert Pharo ; - en quête de magie noire. Ces profils sont complémentaires : pour devenir un expert en Pharo, il faut commencer par le profil débutant et compléter avec les autres parcours. ### Des livres Une série de [livres sont disponibles sur Internet](http://books.pharo.org/). Tous sont téléchargeables gratuitement. Une partie de ceux‑ci sont disponibles en version imprimée sur _[www.lulu.com](https://www.lulu.com/search?adult_audience_rating=00&keyword=object-oriented+programming&page=1&pageSize=10&q=Pharo)_. Je ne les ai pas toutes vérifiées mais il semble que tous les livres sont sous des licences CC. Parfois libre, parfois NC. Ce ne sont pas vraiment des livres, mais pour ceux qui veulent aller plus loin, il y a aussi une [recension des articles académiques](https://hal.inria.fr/PHARO/browse/meta-title) liés à Pharo. ### Mais aussi Sur la [chaîne YouTube de Pharo](https://www.youtube.com/channel/UCp3mNigANqkesFzdm058bvw), on retrouve une grande variété de vidéos, notamment des archives des Pharo Tech Talks qui sont organisées tous les mois. On retrouve aussi de nombreuses [présentations](https://www.slideshare.net/pharoproject/presentations) réalisées sur Pharo ou certaines de ses applications. Si vous désirez discuter avec la communauté Pharo sur Discord, c’est [par là](https://discord.com/invite/QewZMZa). Si vous voulez obtenir des nouvelles régulières, [ce blog est à conseiller](https://pharoweekly.wordpress.com).