Pharo

Restez toujours informé : suivez-nous sur Google (☆)

Introduction

Pharo
Logo du site www.pharo-project.org
Auteursl'équipe du Projet Pharo
ParadigmesPOO
Typagedynamique
Influencé parSimula, Sketchpad, LISP, Squeak
ImplémentationsPharo
Système d'exploitationMultiplate-forme
LicenceMIT
Site Webhttps://www.pharo-project.org/

Pharo est une implémentation libre créée en 2009 sous licence MIT du langage de programmation Smalltalk. La version 1.0 de Pharo est sortie le 15 avril 2010.

Introduction

Pharo est un environnement de programmation dynamique. C'est une implémentation performante du langage Smalltalk, basée sur une machine virtuelle écrite en large partie en Smalltalk elle-même.

Pharo étant un fork de Squeak est donc comme tout Smalltalk issu de travaux menés d'abord au Xerox PARC, puis chez Apple puis enfin chez Disney Interactive par une équipe constituée autour de Dan Ingals et Alan Kay.

Lancé en 2008, le Projet Pharo se propose de supprimer tout ce qui n'est pas essentiel dans le code de Squeak et aussi de devenir l'implémentation de référence de Seaside, un framework web pour développer des applications web en Smalltalk .

Pharo a une politique qui oblige ses contributeurs à accepter de publier leur code sous licence MIT

Comme dans Squeak, on trouve dans Pharo une implémentation de Morphic. Mais plusieurs des paquetages qui sont intégrés dans Squeak sont optionnels dans Pharo (comme par exemple E-Toys). En revanche et contrairement à Squeak, Pharo gère en natif les fontes TrueType

Il est notoire que la communauté Smalltalk de Pharo comme celle de Squeak (un autre dialecte de Smalltalk) est très conviviale.

Pharo est un environnement de développement dans lequel tout est objet (au sens de la Programmation Orientée Objet)

Pharo est reflexif (il permet de modifier sa structure et son comportement lors de l’exécution)

Pharo utilise un typage dynamique : Contrairement à certains langages (à typage statique) qui forcent le développeur à indiquer de quel type est chaque variable (entier, chaîne de caractères...). En typage dynamique, les variables peuvent prendre n'importe quelle valeur.

Dans Pharo comme dans tout Smalltalk l'héritage est simple

Pharo (comme Lisp) utilise un ramasse-miettes (le garbage collector).

Il est notoire que les durées de développement (pour de gros projets) sont nettement réduites avec Smalltalk. Quelques points à souligner :

  • La syntaxe de Smalltalk est une syntaxe minimaliste : elle tient sur une carte postale.
  • La liste francophone de Smalltalk est ouverte à tous (donc aux débutants de Pharo)
  • Sur la page officielle de Pharo se trouvent toutes les explications utiles pour télécharger puis installer Pharo aussi bien sur une machine Unix que MacOSX ou encore Windows
  • En ligne et gratuit il est possible de télécharger un livre en anglais d'initiation à Pharo (dont une traduction française est en cours).

Environnement de développement

Pharo propose un environnement de développement qui comportent des outils similaires à ceux que l'on retrouve dans tous les environnements Smalltalk (inspecteur d'objets, navigateurs de classes, outils de refactorisation), mais dont certains sont plus originaux :

  • Refactoring Browser : permet de visualiser facilement tout le code source de Pharo rangé en paquetages, classes, protocoles et méthodes. Il possède des fonctions pour les transformations de code :
  • Renommage d'une classe, d'une méthode ou d'une variable automatiquement répercutée sur toutes les occurrences du nom de cette classe dans le code source.
  • Création en un clic des accesseurs à l'ajout d'une variable d'instance.
  • Extraction d'une partie d'une méthode dans une autre méthode (factorisation du code).
  • Method Finder : permet de retrouver une méthode dans tout le code en lui donnant une liste de paramètres (ordre non nécessaire) et un résultat attendu. Exemples :

MethodFinder methodFor: #( ('Pharo is a programming environment' 6) ('Pharo') )

Résultat retourné :

'(data1 truncateTo: data2) '

→ Il faut donc utiliser la méthode truncateTo: pour avoir le début d'une chaîne de caractères.

MethodFinder methodFor: #( #(#(4 2 3 1)) #(1 2 3 4))

Résultat retourné :

'(data1 asSortedArray) (data1 sort) '

→ Il existe donc deux méthodes pour trier un tableau.

  • Workspace : permet de s'entraîner en tapant des commandes Smalltalk et en voyant immédiatement leurs résultats.
  • Navigateur pour les tests unitaires, navigateur pour la gestion de version des paquets, etc.

Pharo en action dans l'industrie du logiciel

La page (en anglais) "Success Stories" liste un ensemble de sociétés utilisant Pharo dans des projets commerciaux ou libre. Ils s'appuient notamment sur :

  • Seaside (framework), développement d'applications web, avec un très haut niveau d'abstraction.
  • Pier : CMS (Content Management System) basé sur Seaside (framework)
  • Magritte : Un framework pour méta-modèles utilisé notamment pour générer et valider des formulaires web
  • AidaWeb : Framework web
  • Magma : SGBD
  • Moose : Ensemble d'outils et de bibliothèques dédiées à l'analyse de programmes dans différentes langages
  • OpenCroquet : Plate-forme 3D collaborative
  • O2