Ur/Web : un langage fonctionnel coordonateur pour des applications Web plus sûres et plus faciles à écrire

Par:
fredericmazue

ven, 02/01/2015 - 15:44

Ecrire une application Web implique de maîtriser plusieurs technologies : HTML, CSS,JavaScript, JSON et/ou XML, un langage côté serveur, SQL, etc.

En outre, avec les technologies actuelles, les applications Web peuvent être particulièrement sensibles aux effets de bord. Par exemple, du code JavaScript devant gérer normalement une partie d'une page Web peut très bien écraser des variables dont dépend une autre partie de la même page.

A partir de ces constats et dans l'intention de remédier à ces inconvénients, Adam Chlipala, chercheur du MIT, propose Ur/Web.

Ur/Web a pour propos d'apporter des performances aux applications Web, car le code est compilé en code natif. Il a pour propos de simplifier le développement. Ainsi, il va automatiquement empaqueter les données échangées sur le réseau dans du XML. Il va générer le CSS nécessaire à la bonne apparence des pages, il va encore injecter aux bons endroits du 'bon code' JavaScript dans les pages. Bon code se comprenant par du code JavaScript qui ne risquera pas de provoquer des effets de bords. Ur/Web peut donc être vu comme un langage coordonateur des multiples technologies impliquées dans le développement d'une applications Web.

Présenté ainsi, Ur/Web a de quoi séduire les développeurs. D'autant plus qu'il propose un modèle de programmation concurrente pour gérer les communications complexes entre clients et serveurs.

Est-ce que Ur/Web séduira les développeurs ? En dépit des qualités indéniables que le langage présente, rien n'est moins sûr.

Car Ur/Web comme le nom le suggère, dérive du langage fonctionnel Ur. Ur/Web est donc un langage fonctionnel dont le code ressemble à du code Haskell. Haskell est un langage absolument génial, mais universellement qualifié d'ésotérique. Il est vrai que la courbe d'apprentissage de Haskell est assez raide.

Il n'y a donc rien d'étonnant à ce que Adam Chlipala lui-même indique que la courbe d'apprentissage de Ur/Web est "un peu difficile".

Incontestablement, la programmation fonctionnelle, en dépit de tous les avantages qu'elle peut présenter en ce qui concerne l'expressivité et la sûreté dans l'écriture du code peine à s'imposer. Sans doute en grande partie pour des raisons pédagogiques, elle fait même plutôt figure d'épouvantail. C'est pourquoi Ur/Web risque de rester un langage confidentiel.

Mais Ur/Web n'en est pas moins un  langage très intéressant que vous pouvez découvrir dans ce document qui en présente l'essentiel et contient des didacticiels.

Ci-dessous, afin de vous donner une idée de ce qu'est Ur/Web, extrait du document de présentation mentionné, le code qui servirait de base à une chat room :

table room : { Id : int, Title : string }
table message : { Room : int, When : time, Text : string }

fun chat id = let
  fun say r =
   dml (INSERT INTO message (Room, When, Text)
     VALUES ({[id]}, CURRENT_TIMESTAMP, {[r.Text]}));
   chat id
in
  title <− oneRowE1 (SELECT (room.Title) FROM room
                                      WHERE room.Id = {[id]});
   log <− queryX1 (SELECT message.Text FROM message
                                       WHERE message.Room = {[id]}
                                       ORDER BY message.When)
                                    (fn r => <xml>{[r.Text]}<br/></xml>);
   return <xml><body>
     <h1>Chat Room: {[title]}</h1>
 

   <form>
     Add message: <textbox{#Text}/>
    <submit value="Add" action={say}/>
     </form>
     <hr/>

 {log}
 </body></xml>
  end

fun main () =
  rooms <− queryX1 (SELECT * FROM room
                              ORDER BY room.Title)
                 (fn r => <xml><li><a link={chat r.Id}>
                                  {[r.Title]}</a></li></xml>);
   return <xml><body>
   <h1>List of Rooms</h1>

   {rooms}
  </body></xml>