Tu sors pas sans ton manteau !

Voilà, le manteau collection automne-hiver 2007 est sorti, bientôt dans votre gallerie du CPAN.

use Coat !

Moose, oui mais… SmartObject ?

Dans le cadre d’une mission que je réalise en ce moment, je suis amené à écrire une API en Perl pour faciliter l’écriture du logiciel proposé par l’entreprise à ses clients.

Je me suis porté sur Moose pour écrire cette API mais j’ai vite compris que ça n’allait pas être si simple : l’application est déployée aussi bien sur des serveurs Unix que Windows et l’installation de Moose sous Windows n’est pas aussi triviale qu’elle peut l’être sous un Unix. De plus le processus de déploiement est critique puisque nous sommes dans une position d’éditeur logiciel où l’application est livrée à un client qui doit l’installer sur ses propres serveurs.

Bref dans un existant restrictif comme celui auquel je suis confronté, les nombreuses dépendances de Moose sont un handicap : en dépendant de Moose, le déploiement de l’application finale serait fortement complexifié.

Je suis donc en train d’écrire une meta-classe (que j’ai nommée SmartObject pour l’instant) en me basant sur ce que j’aime dans Moose, mais en ne gardant que l’essentiel :

  • aucune dépendance vers un module non standard dans Perl 5
  • héritage automatique sur un simple use SmartObject
  • use strict et use warnings implicites
  • déclaration d’attributs avec un mot clef exporté (j’ai choisi var)
  • constructeur automatique hérité (qui construit l’instance avec les déclarations var rencontrées dans la classe)

Bien sûr on sera très loin de Moose, et c’est d’ailleurs volontaire, SmartObject ne vise qu’à fournir l’essence de Moose : la structure magique qui permet d’écrire des objets sans y penser, principalement : l’héritage d’une série d’accesseurs automatiques et d’un constructeur.

L’exercice est intéressant car on implémente ici une mécanique objet en ne se servant que de code Perl 5 standard. Mon prototype me satisfait suffisament pour que je reste sur cette piste plutôt que de chercher à déployer Moose chez le client (ici je n’aurai qu’à embarquer mon petit SmartObject.pm avec ma livraison).

Pour illustrer le propos, un petit exemple de ce que ça donne :

package Point;

use SmartObject;

var 'x' => (default => 0, type => 'Int');
var 'y' => (default => 0, type => 'Int');

1;

SmartObject a réalisé les choses suivante :

  • use strict; use warnings;
  • la classe Point possède deux attributs : x et y (et uniquement ceux-ci)
  • les méthodes d’instances get(), set(), x() et y() sont disponibles

Jouons avec pour vérifier tout ça :

Perl> use Point
Perl> my $p1 = new Point x => 4
$Point1 = Point=HASH(0x876d8b8);

Perl> $p1->x
4

Perl> $p1->y
0

Les attributs sont bien accessibles, nous pouvons également utiliser set() et get() à la main :

Perl> $p1->get('x')
4

Perl> $p1->set('y', 32)
32

SmartObject s’assure également de nous empêcher de toucher à des attributs non déclarés avec “var” :

Perl> $p1->set('z', 1)
[!] Runtime error: Unknown attribute 'z' for class Point, cannot set at (eval 38) line 6

De même l’appel à une méthode non définie déclenchera une exception :

Perl> $p1->foo()
[!] Runtime error: unknown method 'foo' for class 'Point' at (eval 41) line 6

La structure est en place donc et fonctionne (avec un module de 200 lignes) ; cependant il manque encore quelques fonctionnalités importantes que je compte ajouter :

  • un mécanisme d’héritage similaire à “extends” de Moose
  • une gestion fine des attributs : type (pour l’instant ignoré), permissions, etc

Une fois une première version documentée et bien testée, je compte publier la chose sur le CPAN. Même si je pense que dans la majeure partie des cas on se tournera vers Moose, ça peut être intéressant d’avoir un ersatz plus léger et qui ne traine pas une floppée de dépendances derrière lui.

Les Journées Perl 2007

Une conférence sur le langage Perl aura lieu à Lyon durant le mois de Novembre, il s’agit des « Journées Perl 2007 ».

J’ai proposé deux présentations pour l’occasion :

Par ailleurs, je suis en train de voir avec les membre du Debian Perl Group si une conférence sur le packaging Debian des bibliothèques Perl est envisageable. Cela pourrait être intéressant, je pense, sous un angle “développeur Perl sous Debian”. A suivre donc.

Pour le reste, on peut consulter sur la liste des présentations qui auront lieu les autres sujets abordés.

Découvrez Libellaris et partagez vos coups de coeur littéraire. En un clic devenez membre de la comunnauté !

Internet Libre ou Minitel 2.0 ?

Le site des RMLL propose les vidéos de toutes le conférences qui ont eu lieu cette année. Un régal si comme moi vous n’avez pas pu vous y rendre.

On notera la présentation du système Debian par Sam Hocevar ainsi que la très percutante et pertinente intervention de Benjamin Bayart (président de l’association FDN) qui nous montre à quel point le modèle « Internet » tend de plus en plus vers un modèle de facturation et de distribution du contenu proche de celui du Minitel. Son argumentation se tient tout à fait pour qui veut bien y préter une oreille attentive.

J’ai particulièrement aimé un passage de cette conférence, que je me permet de citer plus ou moins fidèlement :

« sans logiciels libres, pas d’internet. Sans Internet, pas de logiciels libres [...] les deux sont intimement liés, en fait ce sont deux facettes d’un même objet [...] : ce qu’on appelle la société du savoir. »

Get Adobe Flash playerPlugin by wpburn.com wordpress themes