Sortie de Pharo et de son environnement de développement en version 4.0

Posté par  . Édité par Damien Cassou, MerwanOuddane, laurent laffont, Benoît Sibaud et BAud. Modéré par tuiu pol. Licence CC By‑SA.
Étiquettes :
32
20
avr.
2015
Technologie

Comme promis, un an après Pharo 3.0 nous sommes heureux de vous annoncer la sortie de Pharo 4.0. Entre autres nouvelles fonctionnalités, les outils de l'environnement de développement ont été entièrement revus.

Pharo c'est quoi ?

Pharo consiste à la fois en un langage de programmation purement objet inspiré de Smalltalk (avec compilateur et machine virtuelle) et un environnement dynamique de programmation. Pharo est diffusé sous licence MIT. Le langage Pharo s'appuie sur les bases solides de Smalltalk tout en y ajoutant, entre autres, les concepts modernes de trait (héritage multiple) et de slots (pour attacher du comportement à la lecture/écriture de variables d'instances).

Qui l'utilise ?

Actuellement 23 universités, 13 groupes de recherches et une cinquantaine de sociétés déclarent utiliser Pharo pour leurs développements (et si vous développez avec Pharo, merci de nous le faire savoir :)).

Que font-ils avec ?

Le catalogue de projets référence plus de 300 projets libres. Quelques entreprises partagent leurs success stories. Deux livres gratuits et libres (licence CC-by-sa) permettent d'apprendre les bases et les concepts avancés du langage et de son environnement : Pharo by example (disponible en français) et Deep into Pharo.

Nouveautés

Pharo 4.0

La grande communauté internationale de développeurs Pharo a travaillé d'arrache-pied pour vous offrir le meilleur en matière d'environnement de développement dynamique, tout en vous rappelant que Pharo vous appartient aussi. Vous pouvez retrouver toutes les nouveautés de la version 4.0 de Pharo dans le changelog détaillé et dans l'annonce officielle.
Parmi ces nouveautés, outre les 1697 bugs corrigés depuis Pharo 3.0, on trouve une réécriture de l'outil d'inspection d'objets, de l'outil de recherche et du workspace (les GT tools).

GTools:

Le workspace (ou playground) offre une zone de texte (avec coloration syntaxique et auto-complétion) dans lequel le développeur peut tester son code. Dans l'image ci-dessous, le développeur a tapé FileSystem workingDirectory dans la zone de texte pour étudier à quoi ressemble l'objet résultant (une instance de la classe FileReference). En tapant Alt+Shift+g, un inspecteur s'ouvre à droite pour étudier cet objet en détail : dans le cas de la classe FileReference, l'inspecteur montre le contenu du fichier ou du dossier.

Playground

L'inspecteur permet d'étudier et de manipuler les objets du programme. Chaque classe peut définir plusieurs façons d'être représentée dans l'inspecteur. Allez voir la vidéo, ça vaut le détour. Ci-dessus, on peut voir qu'inspecter un dossier affiche son contenu. Ci-dessous, à droite, on peut voir qu'inspecter un dictionnaire (i.e., une table de hachage) affiche toutes les paires clé/valeur.

Inspector

Le spotter quant à lui aide les développeurs à rechercher rapidement n'importe quel objet du système. Allez voir la vidéo, elle vaut largement son pesant de cacahouètes. L'utilisation du spotter permet, entre autres, de naviguer au travers du code :

  • Explorer une classe, poursuivre dans ses méthodes et variables ;
  • Obtenir les classes implémentant une méthode, obtenir les endroits où cette méthode est appelée.

Et bien d'autres!

Vous pouvez consulter une présentation complète ici

Spotter

Retrouvez toute l'actualité de l'équipe GT sur leur site.

OSWindow

OSWindow propose une nouvelle manière de gérer les fenêtres et les événements :

  • création de fenêtres natives dans un système d'exploitation ;
  • événements gérés par la bibliothèque SDL2 ;
  • modélisation 3D avancée via Woden.

Dark Theme

Les amateurs d'environnements sombres sauteront de joie !

Dark Theme

Et plus encore

D'autres briques majeures évoluent telles que Zinc (la bibliothèque réseau), Fuel (le sérialiseur d'objets ultra-rapide) et Versionner (l'outil de gestion de dépendances et de release).

Côté visuel, Pharo introduit de nouvelles polices par défaut. Morph (la bibliothèque de composants graphiques) prend un coup de jeune grâce à Athens (la bibliothèque de graphiques vectoriels). Cela permet de proposer tout un panel de nouveaux widgets.

Pour les amateurs de Raspberry et de systèmes embarqués, vous pouvez désormais compiler la machine virtuelle sur Raspbian. Pharo tourne maintenant aussi sur FreeBSD.

Aller plus loin

  • # Un peu embêté...

    Posté par  . Évalué à 6.

    Bonjour, et merci beaucoup pour cette dépêche, qui m'a donné envie de découvrir Pharo. J'ai suivi le tutoriel intégré à l'image - c'est très simple et plutôt clair, et ça donne envie de continuer à jouer avec l'image (dommage que les livres "Pharo par l'exemple" soient un peu périmés, d'ailleurs).

    C'est peut-être pas le meilleur endroit pour ça, mais personne ne parle alors je pose ma question. Je suis un peu embêté : ça fait longtemps qu'on me dit "en Smalltalk, tous les objets sont modifiables à l'exécution, y compris les classes tout en haut de la hiérarchie". Du coup, je me suis dit que j'allais essayer : j'ai modifié une méthode au hasard de la classe Morph, qui est la classe racine de tous les objets graphiques si j'ai bien compris.

    Ça n'est pas très difficile : on clique sur le nom de la classe et on peut explorer la liste de toutes ses méthodes, par exemple on trouve la méthode mouseDown: qui est appelée à chaque fois que l'on enfonce le bouton de la souris. Bon, j'ai modifié cette méthode pour que, à chaque appel, elle écrive dans un terminal (Transcript). J'ai fait ça :

    (Transcript class allInstances size > 1)
         ifTrue:[Transcript show:'foo']
         ifFalse:[Transcript open; show:'bar'].
    

    Mon but c'était d'être sûr qu'on ouvrirait au plus un seul Transcript. Seulement voilà, quand je sauvegarde et que je clique sur les fenêtres de ma GUI, plusieurs Transcript s'ouvrent.

    Pourquoi plusieurs ? Les différents Transcripts créés appartiennent-ils à différentes classes ? Qu'est-ce que j'ai mal compris ?

    • [^] # Re: Un peu embêté...

      Posté par  . Évalué à 5.

      dommage que les livres "Pharo par l'exemple" soient un peu périmés, d'ailleurs

      Nous en sommes bien conscient et le livre Updated Pharo by Example va dans ce sens (en cours de mise à jour).

      C'est peut-être pas le meilleur endroit pour ça, mais personne ne parle alors je pose ma question.

      ça fait vivre le post, merci !

      Mon but c'était d'être sûr qu'on ouvrirait au plus un seul Transcript. Seulement voilà, quand je sauvegarde et que je clique sur les fenêtres de ma GUI, plusieurs Transcript s'ouvrent.

      Transcript est un singleton : unique instance de la classe ThreadSafeTranscript. De plus, Transcript représente le modèle, i.e., l'objet qui reçoit le texte à afficher. Il faut le distinguer de la vue (instance de la class PluggableTextMorph) qui offre une représentation graphique du modèle. Le code Transcript open augmente le nombre d'instances de PluggableTextMorph mais pas le nombre d'instances de ThreadSafeTranscript qui reste à 1.

      Pour faire ce que tu veux, je te conseille de n'utiliser que la méthode show: dans ton code. Quand tu le souhaites, tu ouvres un transcript depuis le World menu (en cliquant sur le bureau).

      • [^] # Re: Un peu embêté...

        Posté par  . Évalué à 1.

        Nous en sommes bien conscient et le livre Updated Pharo by Example va dans ce sens (en cours de mise à jour).

        Ah, ça c'est une super nouvelle ! On peut aider ?

        Merci pour les explications, sinon. Je vais continuer ma lecture.

        • [^] # Re: Un peu embêté...

          Posté par  . Évalué à 2.

          Ah, ça c'est une super nouvelle ! On peut aider ?

          c'est plus que bienvenu ! Il suffit de récupérer le livre et de faire des pull requests avec les changements. Envoie moi un email pour plus de précisions.

    • [^] # Re: Un peu embêté...

      Posté par  (site web personnel) . Évalué à 2.

      Attention, dans l'instruction :

      Transcript class allInstances size
      

      Tu demandes à la méta-classe de Transcript (obtenue via le message class de Transcript) le nombre d'instance de celle-ci, autrement dit le nombre de classes issues d'elle ; or il n'y en a qu'une, la classe Transcript même.

      En fait, l'instruction :

      Transcript open
      

      ouvre une fenêtre qui se trouve être une instance de SystemWindow. Pour faire ce que tu veux, ce serait alors plutôt :

      (SystemWindow allInstances size > 1)
         ifTrue: [ Transcript show: 'coucou'; cr ]
         ifFalse: [ Transcript open; show: 'coucou'; cr ].
      

      Et encore je ne suis pas sûr que ce soit la bonne façon de faire pour maintenir une seule fenêtre Transcript.

      • [^] # Re: Un peu embêté...

        Posté par  . Évalué à 2.

        Effectivement, en cherchant un peu (en naviguant dans le code de Transcript !) on trouve le code de open qui contient tout ce que Damien et toi décrivez. C'est plutôt intéressant de pouvoir constater tout ça tout seul, et le modifier après.

        Et encore je ne suis pas sûr que ce soit la bonne façon de faire pour maintenir une seule fenêtre Transcript.

        Non, sans doute pas. J'aurais préféré changer le code pour que l'interface fasse un bruit de canard à chaque clic, mais je ne sais pas encore comment jouer du son ou communiquer avec l'extérieur de la VM.

        Merci !

        • [^] # Re: Un peu embêté...

          Posté par  . Évalué à 3.

          C'est plutôt intéressant de pouvoir constater tout ça tout seul, et le modifier après.

          c'est une des grandes forces de Pharo (ainsi que des autres Smalltalk et des Lisp) : tout son code est sous le nez, tout le temps et il est modifiable !

      • [^] # Re: Un peu embêté...

        Posté par  . Évalué à 2.

        Tu demandes à la méta-classe de Transcript (obtenue via le message class de Transcript) […]

        bien tenté mais en fait non :-). Transcript n'est pas une classe, c'est une variable globale, unique instance de ThreadSafeTranscript.

        (SystemWindow allInstances size > 1)

        ça ne suffit pas car il pourrait y avoir d'autres instances de SystemWindow qui ne serait pas des transcripts. Une solution possible est de ne compter que les instances dont le label est Transcript. Dans tous les cas, je recommande d'utiliser la méthode #detect:ifFound:ifNone: qui évite à la fois les parenthèses, la comparaison entre la taille et le nombre 1 et le #ifTrue:ifFalse: qui suit.

  • # Mes remarques en vrac

    Posté par  . Évalué à 2.

    hey, la vidéo de présentation de Gt Inspector est trop rapide, je n'ai rien compris !

    Je crois aussi que vous utilisez la même musique sur les deux vidéos, t t t quelle redondance ;)

    Dommage que la majorité des apps dans le catalogue n'aient pas de description.

    Dans la présentation, la phrase "Even in production environments, you will never be stuck in compiling and deploying steps again!" m'interpelle vraiment. Qu'on ne compile pas, je peux comprendre. Qu'on n'ait pas de pb de déploiement, là je sèche.

    J'ai aussi un pb avec la doc. Je cherche quel genre d'app on peut développer. J'ai vu des success stories avec des applications web, donc je cherche des indications de développement web dans la doc mais ne vois aucun lien.

    Voilà !

    • [^] # Re: Mes remarques en vrac

      Posté par  . Évalué à 4.

      Salut

      Pour l'Inspector il est difficile de bien l'expliquer à distance, rien ne vaut un essai en pratique pour voir l'étendue de ses capacités.

      Concernant le catalogue, il est tout récent, toutes les équipes des projets n'ont pas encore mis une description, mais ça viendra.

      Seaside est un excellent framework pour le web. Voici un très bon tutoriel pour débuter, nul doute que tu trouveras ton bonheur là dessus.

      Voilà ! ;-)

  • # Data mining

    Posté par  . Évalué à 3.

    Je continue de découvrir le langage, les outils et l'univers Smalltalk/Pharo, et je suis maintenant à la recherche d'outils de fouille de données (ou data mining :) pour Pharo. Je suis tombé sur le framework Moose, mais je ne comprends pas bien ce que c'est : de la fouille de données pour le génie logiciel ? Qu'est-ce que ça fait par exemple ? J'ai aussi découvert BioSmalltalk, mais ça a l'air plutôt mort.

    Est-ce que vous avez des explications ou des pointeurs ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.