Pharo 2.0 et son écosystème

Posté par  . Édité par detail_pratique, claudex et Lucas Bonnet. Modéré par Lucas Bonnet. Licence CC By‑SA.
28
21
mar.
2013
Communauté

Le projet Pharo est fier d’annoncer la sortie de Pharo 2.0 — un environnement de programmation et un langage inspirés de Smalltalk. Pharo est un projet libre distribué sous licence MIT.

Pour rappel, Pharo consiste en un langage objet extrêmement bien conçu et un environnement de développement intégré innovant. Pharo est un environnement dynamique dans lequel il est par exemple possible de modifier un programme en cours d'exécution depuis le débuggeur.

Pharo 2.0 introduit de nombreuses nouveautés, détaillées dans la suite de la dépêche, dont un tout nouveau navigateur de code (manipulable au clavier), des bibliothèques complètement réécrites (sérialisation ultra-rapide de n'importe quel objet, système de fichiers, protocoles HTTP et SSL), un nouveau framework pour la création d'outils graphiques, un générateur de langage machine manipulable par les développeurs, une bibliothèque graphique avec binding Cairo…

Sommaire

Pharo 2.0

En bref,

  • Nautilus, un nouveau navigateur de code (voir ci-dessous)
  • Spec, un nouveau framework d'interfaces graphiques (voir ci-dessous)
  • Zinc et Zodiac, une grosse amélioration de l'implémentation de HTTP avec gestion de SSL, OAuth, OpenID…
  • FileSystem, une nouvelle bibliothèque de gestion de fichier
  • Andreas Profiler, un nouveau profiler
  • suppression de vieux code, nettoyage et mise à jour pour utiliser les bibliothèques et frameworks introduits
  • un nouveau modèle d'AST (représentation interne du programme lors de la compilation)
  • ASMJit et NativeBoost FFI (voir ci-dessous)
  • Fuel, un serialiseur ulta-rapide (voir ci-dessous)
  • du code pour intégrer avec Google Code et Jenkins

Des nouveaux outils de développement par défaut

Le nouveau navigateur de code par défaut de Pharo s'appelle Nautilus. Nautilus apporte beaucoup d'améliorations comme une vue alternative de groupe (sélection par le développeurs des paquetages qu'il veut voir), une architecture de plugin, une integration avec Monticello (le DVCS) et le contrôle de qualité de code.

L'auto-complétion a aussi bénéficié de nombreux changements : son utilisation est plus intuitive et les résultats proposés sont meilleurs.

Un appui sur shift+enter à n'importe quel moment va maintenant afficher un champ de recherche qui amènera à n'importe quelle méthode ou classe dont le nom est entré (auto-complétion disponible).

Accéléré par NativeBoost et Fuel

Pharo veut être rapide. NativeBoost et Fuel sont là pour ça.

NativeBoost est un framework permettant de générer et exécuter du code machine depuis du code Smalltalk. NativeBoost fournit aussi le nécessaire pour appeler du code C depuis Smalltalk avec un effort minimum.

Par exemple, le code suivant fournit une méthode appelée nbGetEnv: pour la classe NBBasicExamples qui permet de récupérer une variable d'environnement à partir de son nom.

NBBasicExamples>>nbGetEnv: str
"
  This is a basic example for making an external call. 
  This method calls a Standard C library getenv() function
"
  <primitive: #primitiveNativeCall
   module: #NativeBoostPlugin
   error: errorCode >

  ^ self
      nbCall: #( String getenv (String str) )
      module: NativeBoost CLibrary

Pour appeler cette nouvelle méthode :

NBBasicExamples nbGetEnv: 'HOME'   ---> '/home/cassou'

Le code suivant utilise une API Smalltalk pour générer l'instruction machine MOV EAX, 123456789 (EAX est le registre qui contient la valeur de retour suivant la convention d'appel x86).

NBBasicExamples>>returnInteger
  <primitive: 'primitiveNativeCall'
   module: 'NativeBoostPlugin'>

  ^ self nbCallout 
      function: #( int ( void) )  
      emit: [:gen :proxy :asm |
                asm mov: 123456789 to: asm EAX]

L'implémentation de cette méthode est directement remplacée par le code machine généré. Elle retourne donc 123456789.

NativeBoost va devenir la pierre angulaire pour l'implémentation de nombreux bindings vers le monde extérieur. La bibliothèque graphique Athens est une des premières à utiliser NativeBoost: Athens

Fuel, est un sérialiseur d'objets Smalltalk (convertisseur d'objets en mémoire vers un format échangeable) optimisé pour une déserialisation ultra-rapide dans l'espoir qu'un objet est déserialisé beaucoup plus souvent qu'il n'est sérialisé. Fuel permet de sérialisé n'importe quel type d'objet, comme par exemple les clôtures, les contextes d'exécution et les debuggueurs (ceci est particulièrement utile dans un rapport d'erreur, le programmeur peut donc retrouver dans son environnement tous les éléments qui étaient chez le client au moment du problème).

Interfaces utilisateurs – Spec et Keymappings

Pharo 2.0 inclut 2 nouvelles bibliothèques pour les interfaces utilisateurs : Spec et Keymappings

Spec est un framework de programation permettant de construire des interfaces graphiques avec un langage déclaratif. Spec apporte des idées nouvelles sur la réutilisation et la composition de composants graphiques. Quelques outils ont déjà été réécrit pour utiliser Spec, d'autres sont à venir.

Keymappings est une bibliothèque permettant de contrôler plus facilement les interactions avec le clavier. Keymappings est déjà utilisé à de nombreux endroits dans Pharo et va continuer à remplacer les déclarations en dur dans le code. Keymappings facilite la personnalisation des raccourcis.

Changements systèmes

Le système d’envoi d’événements (par exemple, « nouvelle classe créée » et « modification de méthode ») a été réécrit. Un nouveau gestionnaire de paquetage (RPackage) a été mis en place pour remplacer l'im-maintenable actuel. L'ancienne bibliothèque de gestion de fichiers a été supprimée et entièrement remplacée par une bien meilleure bibliothèque (déjà introduite dans Pharo 1.4).

La machine virtuelle qui était auparavant commune avec d'autres langages (dont Squeak et Newspeak) est maintenant spécifique à Pharo : la base de code reste la même, mais quelques patchs, plugins et l'icône diffèrent.

Bien sûr, il y a beaucoup d'autres améliorations et nouveautés comme la gestion du SSL, des outils pour la ligne de commande, des notifications non bloquante pour l'utilisateur… Une liste détaillée est disponible.

En route vers Pharo 3.0

Les développements autour de Pharo 3.0 ont déjà commencé. On s'attend à des changements radicaux, dont, entres autres :

  • Opal, un nouveau compilateur, moderne et paramétrable
  • Un nouvel outil de gestion de bugs (basé sur FogBugz)
  • Un nouveau debuggueur va être intégré (nouveau moteur et nouvelle interface)
  • Slots, une redéfinition de la notion de variable d'instance de premier ordre
  • de nouvelles bibliothèques de code (XStreams pour la gestion de flux, Ghost pour faire des proxys vers n'importe quel objet, Athens pour faire de la programmation graphique proprement)

Un consortium et une association Pharo

Comment supporter le développement de Pharo ? Comment garantir que l'infrastructure va continuer d'évoluer ? Doit-on uniquement compter sur la volonté et le temps libre des développeurs bénévoles ? C'est pour répondre à ces questions que le Pharo Consortium (pour les sociétés et groupes) et la Pharo Association (pour les individus) ont été créés.

Intégration continue

Inria fournit à la communauté Pharo des outils d'intégration continue assurant que les tests soient automatiquement exécutés en permanence, pour chaque commit (pour le projet Pharo et son écosystème).

SmalltalkHub, nouvelle plateforme pour collaborer

SmalltalkHub vient d'être lancé ! SmalltalkHub est une plate forme d'hébergement de projets Smalltalk. La communauté est ravie car SmalltalkHub va remplacer les très vieillissants SqueakSource et SqueakSource3.

Les livres

Un volume 2 pour le livre Pharo By Example est en préparation. Vous pouvez d'ores et déjà lire et commenter ce que nous avons écrit. Le volume 1 est quant à lui toujours disponible, en version papier ou PDF (gratuite). Nous avons besoin de volontaires pour mettre à jour le volume 1 et relire le volume 2. N'hésitez pas à nous rejoindre.

Le collaborActive book, est un livre collaboratif recensant les trucs et astuces des utilisateurs de Pharo.

Amber, un Smalltalk pour le web

Amber est une implémentation du langage Smalltalk pour le web qui se compile vers du Javascript efficace. Il a été conçu pour accélérer le développement d'applications web côté client. Amber permet aux développeurs d'écrire de grosses applications web en Smalltalk. Amber fournit un environnement de développement intégré avec un navigateur de classes, un espace de travail (pour évaluer n'importe quelle expression n'importe quand), un inspecteur d'objets, un débuggeur… Tout ça restant accessible depuis le navigateur web.

Vous pouvez l'essayer dès maintenant en cliquant sur le bouton 'Class Browser' et sans installer quoi que ce soit.

Dr. Geo, un environnement de géométrie interactive

Dr. Geo est un environnement de programmation et de géométrie euclidienne interactive pour une utilisation de l’école primaire au lycée. C'est un projet qu'Hilaire Fernandes a commencé à implémenter en C++ (il y a 16 ans) puis a réécrit entièrement en Smalltalk avec l'environnement Squeak puis Pharo à partir de 2005.

Conférences

Pharo 2.0 a récemment été présenté au FOSDEM (slides).

La prochaine conférence de l'European Smalltalk User Group (ESUG) aura lieu à Annecy du 9 au 13 Septembre 2013. Si vous êtes étudiant, ESUG se propose de vous payer la conférence, les repas du midi et l'hébergement en échange d'une aide à l'organisation (programme student volunteers).

La prochaine PharoConf sera organisée du 2 au 4 avril à Berne, Suisse.

Aller plus loin

Suivre le flux des commentaires

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