S'il y a bien une nouvelle qui a surpris toute la (petite) communauté des amateurs du langage Erlang ces derniers mois, c'est celle-ci : la publication d'un framework web complet pour le développement rapide d'applications « Web 2.0 ». Mais il y a mieux : son créateur est un parfait inconnu de la communauté, et le tout sort avec une vidéo de présentation qui singe celles que l'on a pu voir à la sortie du célèbre
Ruby on Rails. Son nom ? Nitrogen.
Rusty Klophaus, car tel est le nom du père du framework, a d'ailleurs su cultiver l'effet « buzz » de son annonce. Le 16 octobre, quelqu'un
poste sur la section de reddit consacrée à Erlang un message mentionnant la sortie d'un framework web
orienté évènements, pour Erlang. La réaction de Klophaus ? Quasiment nulle : le développeur se contente de donner quelques réponses à ce message ainsi qu'un lien vers une vidéo de démonstration, et d'ajouter que la source ne pourra être téléchargée qu'à la mi-novembre.
Nombreux étaient les impatients !
Un framework web qui fait envie
Bien sûr, il faut relativiser le côté exceptionnel de l'affaire. Des frameworks web, il en sort tous les jours, et pour tous les langages. C'est à se demander s'il n'y a pas plus de frameworks différents que de sites pour les utiliser !
Ainsi, même si Erlang a été initialement développé par Ericsson pour gérer des réseaux téléphoniques (voir
une précédente news sur Ejabberd, un serveur XMPP développé en Erlang), son utilisation s'est démocratisée peu à peu, et il existait déjà des projets de framework web. Par exemple,
Erlyweb, développé par Yariv Sadan, qui n'a malheureusement jamais atteint de version stable.
Des exemples très Web 2.0
Mais c'est là que Nitrogen a suscité l'attention : Klophaus en a retardé la sortie
exprès pour donner un peu de consistance à son projet. Ainsi, il prouve l'utilité de ses travaux en fournissant deux exemples de sites qui l'utilisent.
Le premier,
Stitcho, vous permet d'être prévenu quasi immédiatement à la sortie d'un nouvel article (ou d'une nouvelle news) sur vos sites favoris. Vous pouvez télécharger un petit client (pour Windows ou Mac OS X) qui fera automatiquement le lien avec le serveur de Stitcho, lui-même s'occupant de surveiller les sites. Un développeur peut également l'intégrer à son site, de façon à ce que ses utilisateurs bénéficient du plus grand nombre de notifications possibles.
Le second exemple est du même genre :
em5k permet au webmestre de visualiser le trafic sur son site. Pour cela, il lui suffit de placer sur ses pages un petit code JavaScript qui contactera em5k… et il sera alors possible de récupérer un graphique indiquant la fréquentation du site en fonction du temps.
Quelques caractéristiques
Des généralités
Ces deux applications ont un point commun : elles nécessitent une grande disponibilité du service, qui peut être très sollicité à n'importe quel moment, et qui doit pourtant rester actif. Ça tombe bien, c'est ce pourquoi Erlang existe !
L'utilisation de Nitrogen fait donc sens. Entrons un peu dans les détails : développé en Erlang pour Erlang, il supporte les serveurs
Yaws, le plus populaire des serveurs HTTP écrits en Erlang, ou
Mochiweb, un projet encore jeune qui vise la légèreté et la gestion d'une quantité importante de connexions simultanées. Le choix de la base de données est laissé à l'utilisateur : Mnesia, PostgreSQL, MySQL...
Naturellement, impossible de prétendre être un serveur d'applications Web 2.0 sans support de la technologie Ajax : tout Nitrogen s'appuie sur la bibliothèque
Scriptaculous, à l'instar de
RoR ou
Seaside. Naturellement, si cette bibliothèque est
intégrée dans Nitrogen, c'est pour que son utilisation soit transparente. C'est donc principalement en vous servant d'une fonctionnalité intéressante de Nitrogen, les
éléments, que vous utiliserez Scriptaculous.
Les éléments Nitrogen
Bien que le concept soit encore en développement, Nitrogen s'appuie sur les éléments pour modeler les pages. Le développeur construit la page en utilisant, à la place d'un code balisé habituel, des
records (enregistrements) Erlang. Voici un petit exemple :
Code : Erlang1
2
3
4
5
6
7 | Body = #body { body=[
#panel { body=[
#label { text="Ceci est un label." },
#label { id=label1, text="Ceci est un autre label, avec un nom." },
#button { id=button1, class=mybutton, text="Pressez-moi !" }
]}
]}
|
Comme vous pouvez le voir, la structure de la page est entièrement construite en Erlang (les éléments intérieurs à d'autres se rangent dans des listes). Ce système n'est absolument pas novateur, mais tout de même plus confortable que les équivalents qui lui précédaient dans le langage Erlang.
A priori, rien de bien surprenant donc, et vous pourriez penser que ce sont juste des balises retranscrites. Mais le développeur est invité à définir ses propres composants, ainsi que le code qui produit la sortie HTML.
Plus intéressant encore, il est possible, à la création ou plus loin dans le code, de relier des évènements aux éléments (si vous étudiez un peu le code ci-dessus, vous verrez que certains éléments sont nommés). On peut ainsi relier facilement un comportement particulier à un élément de la page, juste avec son nom. Et un évènement.
Orienté évènements
La particularité la plus importante de Nitrogen est en effet de proposer une conception « orientée évènements » des applications, alors que la plupart des frameworks web actuels présentent plutôt un modèle MVC. La raison évoquée par Klophaus est que, si les gens aiment le modèle MVC pour le développement web, c'est parce qu'il apporte de l'ordre et un peu de rigueur à des langages de scripts qui permettent facilement d'en manquer. Selon lui, Erlang, en tant que langage fonctionnel, n'a pas besoin d'un modèle particulier pour être rigoureux. C'est pourquoi un autre modèle peut être envisagé.
Le développeur est donc amené à penser davantage son application en termes d'évènements que le « noyau » de l'application peut recevoir. Ainsi il est très facile de lier un élément de la page à un évènement : on utilise pour cela le champ
actions des composants, ou la fonction
wire qui relie un évènement à un composant. Concrètement, cela permet par exemple de signaler simplement à l'utilisateur qu'un champ de texte
doit être rempli, avec un code du style
Code : Erlang1
2 | wf:wire(boutonPseudo, champPseudo,
#validate { attach_to=boutonPseudo, validators=[ #is_required { text="Entrez votre pseudo !" } ] } )
|
Sur la vidéo présentant Nitrogen, Klophaus montre ainsi que l'on peut facilement rajouter un événement
click à une image (par exemple). Encore une fois, pas besoin d'un framework pour savoir faire ça, un peu de JavaScript suffit - mais ici le gain de temps est considérable, et la maîtrise de JavaScript est optionnelle. Il suffit de renvoyer un élément du style
Code : Erlang1
2
3
4 | #image {
(...) %% D'autres champs à remplir (notamment l'adresse de l'image)
actions = #event { type=click, postback={click} }
}
|
Lorsque l'utilisateur cliquera, l'événement sera transmis au serveur. Il faut donc écrire une fonction qui se charge de récupérer cet événement pour le traiter : la fonction
event. D'éventuels paramètres peuvent être fournis, par exemple l'identifiant de l'image. Dans le code ci-dessus c'est IDImage qui joue ce rôle, bien sûr il faudrait le définir avant dans le code.
Toute page Nitrogen doit donc contenir une fonction
event, comme ce qui suit :
Code : Erlang 1
2
3
4
5
6
7
8
9
10 | event(go) ->
(...) %% Code à exécuter par défaut (quand la page ne reçoit aucun événement)
ok;
event({click, ID}) ->
(...) %% Code à exécuter quand on reçoit l'événement click et l'identifiant d'une image
ok;
event(_) ->
ok. %% Si on reçoit un autre événement on ne fait rien (ok signifie que tout a bien marché).
|
Cette façon de définir une fonction
event qui doit traiter tous les types d'événements intéressants est peut-être déstabilisante pour les programmeurs qui ne sont pas habitués au
style déclaratif. Erlang rend cependant cette façon de faire très simple grâce au mécanisme des
clauses.
Un framework prometteur
Ce serait mentir que d'affirmer que Nitrogen est déjà prêt à servir en production. Bien qu'utilisable, le framework est jeune, et son API est susceptible de connaître des modifications.
Cependant, les idées qu'il présente sont intéressantes, et pourraient être très avantageuses à l'utilisation. De plus, la programmation orientée événements colle à merveille à Erlang : ce dernier est après tout un
langage concurrent, et les événements Nitrogen ressemblent beaucoup aux messages que peuvent s'envoyer les processus en Erlang.
Nitrogen est donc peut-être l'occasion pour Erlang de sortir enfin de l'ombre, et de dévoiler au grand jour ses qualités certaines pour le développement d'applications serveur

.
Liens complémentaires
79 Participations
Connectez-vous !
Connectez-vous !
Revenir à la liste des news