Workshop ReasonML : Retour d'expérience et sources

Mardi soir, s’est tenue une nouvelle édition du Meetup Js-Star.Paris dans les locaux de JS-Republic, comme chaque mois, cela a été l’occasion de partager entre membres de la communauté JavaScript. Cette édition était consacrée au langage ReasonML.

meetup1-Mars2018
meetup2-Mars2018
meetup3-Mars2018
meetup4-Mars2018
meetup5-Mars2018
SG
Pour rappel, ReasonML est un langage développé par les équipes de Facebook et notamment par le créateur de React. C’est en quelque sorte un fork de OCaml mais simplifié et adapté aux besoins et aux habitudes des développeurs JavaScript. Facebook l’utilise d’ailleurs pour son système de messagerie.
Si vous êtes curieux de tester chez vous le Workshop, vous retrouvez ci-dessous le lien pour accéder aux sources du projet avec les explications des exercices :
https://github.com/js-republic/reason-ml-workshop
Vous noterez qu’il y a deux branches, master et solution, la première permet de réaliser le workshop, et la deuxième contient le workshop intégralement corrigé.

Qu’est-ce que nous avons pensé de ReasonML ?

La préparation de ce workshop a été très enrichissante. En effet, c’était la première fois que nous développions avec ce langage. Voici ce que nous avons appris :

L’approche de ReasonML peu paraître très frustrante.

Comme OCaml et d’autres langages du même genre, ReasonML impose une importante rigueur. Clairement, quand vous développez avec ReasonML, vous passez 15 min à régler les problèmes de syntaxe, de type, de compilateur. Vous ne passez finalement qu’une minute sur votre page web, car tout ou presque marche nickel. Cette approche peut dérouter beaucoup de développeurs habitués à utiliser du JavaScript “pur”. Ils auront plutôt tendance à rapidement développer, tester dans le navigateur, voir que ça crash, corriger et recommencer. On passe plus de temps à réfléchir, moins à débugger avec ReasonML 😉

Les outils doivent encore évoluer

La meilleure manière de développer en ReasonML est actuellement d’utiliser Visual Studio Code avec le plugin ReasonML et le compilateur à côté. Même si l’on doit déjà reconnaitre qu’il y a un beau boulot de fait, la route reste encore longue sur ce sujet. Lorsqu’une erreur de syntaxe arrive (comme souvent lors de l’apprentissage d’un nouveau langage), le compilateur vous répond souvent Error: 3096: sur la ligne concernée, alors que Visual Studio Code vous souligne la mauvaise ligne comme étant incorrecte. BuckleScript, le projet qui gère la compilation ReasonML -> JavaScript, peut lui aussi vous coller des saignements de nez notamment quand vous devez créer vous-même les signatures de fonction pour communiquer avec une API JavaScript.

L’ombre de OCaml est omniprésente

Comme dit plus haut, ReasonML est en quelque sorte un “fork” de OCaml avec une syntaxe retravaillée pour correspondre aux besoins du développement web et JavaScript. Il est cependant courant de tomber sur des fichiers “.ml”, extensions de OCaml, quand on cherche l’implémentation d’API native ou encore quand on fouille dans les outils de la communauté. Typiquement bs-jest en est un bon exemple. Il ne faut pas avoir peur de lire du OCaml.

Les abstractions & le typage offrent une puissance incomparable

Les potentielles frustrations citées jusqu’à maintenant ne sont pas inutile. En effet, une fois qu’on a passé les prises de tête de la montée en compétence on savoure la puissance des vérifications de typage faites par le compilateur (un peu comme en TypeScript). On adore ces abstractions qui vous font disparaitre toutes les erreurs dues aux null ou undefined. On prend beaucoup de plaisir à écrire un code élégant. À ma connaissance, seul ELM offre le même niveau de langage dans le monde JavaScript avec un intérêt de la communauté equivalent.