Quel titre étrange. On est tous plus ou moins geek.. première idée qui pourrait nous venir à l’esprit en lisant se titre c’est une référence à Stars wars, batman, et.. mais en fait, pas du tout, on va rester dans un contexte d’article technique car chez Lunatech on aime la technique 😀

En fait, Dark est le nom d’un nouveau langage… enfin d’une nouvelle approche.

Encore un vous allez dire.. oui, c’est pas faux (kamelott inside).

La particularité de Dark est qu’il a été conçu avec un prisme différent. C’est un langage de programmation pour le continuous delivery.

Alors dit comme ça, ça nous laisse avec des questions… Je vais essayer de vous faire une description de Dark et ensuite je vous fournirai une liste de pointeurs vous permettant de vous faire une idée pas vous-même.

L’environnement

L’environnement de développement est exclusivement dans le cloud et accessible via votre navigateur. Ci-dessous un aperçu de l’environnement.

On trouve dans la tool bar à gauche, une série de modules :

  • HTTP module : permet d’exposer une endpoint
  • Worker module : permet d’émettre ou consommer des messages
  • Database module : permet de créer une base clef/valeur ou documents
  • Function module : permet de créer des fonctions
  • Cron module : permet de sheduler des taches
  • REPL module : permet de tester du code.

Le principe est simple, on a besoin d’un module, on le sélectionne dans la toolbar et on le fait glisser sur l’espace de droite. Ensuite on code son implémentation.

Le code est exécuté instantanément. C’est à dire, si je veux faire exposer un endpoint HTTP GET. Au moment où je le dépose dans mon workspace, celui-ci reçoit une requête et on voit le résultat immédiatement. Dans cet état initial, on aura une réponse vide, mais au fur et à mesure que l’on implémente on voit la réponse se construire jusqu’à atteindre la cible. La boucle de retour est très rapide.

Chaque module unitairement est dédié à une tâche bien particulière. Par exemple, si l’on veut exposer 3 endpoints, alors on aura trois modules HTTP.

Cette approche est intéressante, on pense en terme de feature et l’on ne se perd pas dans des abstractions parfois inutiles.

Chaque module peut communiquer avec les autres modules. Par exemple, je peux lire dans la base de données suite à un GET fait sur un des endpoints et renvoyer le résultat.

Chaque composant a une responsabilité et une seule. Dans son implémentation, le périmètre doit rester clair et défini.

La proposition de Dark

Dark ne vient pas seulement comme un nouveau challenger qui viendra compléter les courbes d’utilisation des langages.

Dark vient avec une vraie philosophie.

Dark is a holistic programming language, structured editor, and infrastructure, for building backend web services. It’s aimed at frontend, backend, and mobile engineers.

Our goal is to make coding 100x easier, which we believe will allow a billion people to build software. This is a huge challenge, that requires a significant rethink of how we write software.

A holistic language

The core problem here is that the tools we have been building — as an industry — are incremental. This is natural: you build a new tool to scratch an itch, to solve known problems, and you do it in a way that can be adopted next to users’ existing tools. “Do one thing and do it well” is the core of the Unix philosophy that we’ve been following since the 70s.

Dark is holistic: it combines an editor with a language and infrastructure. It is not a general-purpose language, or a general-purpose editor, or general-purpose infrastructure. Each piece is designed specifically to work with the other pieces, and this tight integration allows us cut out a great deal of that complexity:

source : https://medium.com/darklang/the-design-of-dark-59f5d38e52d2

Nouveau mind set

En effet, l’approche est vraiment différente des approches traditionnelles.

Dans un projet classique, on va devoir coder, builder, tester, déployer pour que l’utilisateur final puisse voir le résultat.

Ici, ce que l’on voit dans l’environnement et ce que l’on modifie, c’est ce qui est en production. Tout se fait à chaud.

Cela peut faire peur.. on imagine que la prod peut être cassée en deux coups de cuillère à pot. Mais rappelez-vous, l’ensemble du programme est une multitude de petits modules qui communique ensemble.. du coup, la complexité, que l’on peut retrouver classiquement, est ici écartée. Chaque modification à un impacte faible et est facilement maîtrisable.

Aussi, il existe une fonction de flag, qui permet de créer des versions temporaires, non exposées. Cela permet de construire une nouvelle feature avant de l’exposer.

Le changement d’état d’esprit est assez drastique. La valeur métier est placée au centre des préoccupations.

La syntaxe

Derrière l’approche graphique, il y a un langage, typé statiquement. La plateforme compte sur le compilateur pour valider que le code est cohérent et que nous n’aurons pas de surprise au runtime.  La syntaxe est proche de celle de Ocaml. Il y a une eu petite courbe d’apprentissage à prévoir mais rien de monstrueux.

En tout état de cause, il ne faut pas s’arrêter à la syntaxe du langage. La valeur de Dark se trouve ailleurs.

Dark pourquoi faire?

C’est une bonne question. Dark est exclusivement réservé à des applications backend.

Toutes l’infrastructure est hébergée par les équipes de Dark. Tout est clef en main, plus de problématique d’infra à gérer.

Pour l’instant Dark est accessible uniquement sur sélection / invitation. Avoir un accès n’est pas chose triviale.

Les accès sont soumis à un questionnaire, où le focus est fait  sur les vrais projets avec l’objectif de partir en production rapidement.

Les projets développés sur la plateforme seront directement exposés dans des conditions de production.

Cela permet aux équipes de Dark de tester grandeur nature leur produit en limitant les accès.

Mieux comprendre ce qu’est Dark

Expliquer concrètement Dark n’est pas une chose triviale au travers d’un billet de blog. L’environnement est riche. Pas mal de ressources vidéo ainsi que des articles apportent un éclairage et une meilleure compréhension.

Voici une liste (non-exhaustive) de différentes ressources :

Ces premières ressources vous donneront un première aperçu et une bonne compréhension de cet environnement.

Conclusion

Si vous êtes arrivé jusqu’ici, c’est que Dark ne vous laisse pas insensible.

A l’heure actuelle, je ne sais pas si ça sera la prochaine révolution dans le monde du développement, mais pourquoi pas.

Personnellement, je suis séduit par l’approche et je vois les avantages que l’on peut tirer de Dark.

J’ai eu la chance d’obtenir une invitation. En effet, j’ai une petite idée de projet à bâtir sur cette plateforme.

Bonne découverte et n’hésitez pas à poser vos questions en commentaire.