URL: https://linuxfr.org/news/sortie-de-deno-1-0 Title: Sortie de Deno 1.0 Authors: Bruno Michel Davy Defaud et Ysabeau Date: 2020-05-14T22:47:53+02:00 License: CC by-sa Tags: Score: 5 Deno est un possible successeur à Node.js. Ryan Dahl, qui est l’auteur à l’origine de Node.js, a présenté lors d’une conférence il y a deux ans une liste de dix choses qu’il regrette à propos de Node.js. À partir de cette liste, il a voulu créer un nouveau moteur d’exécution de script qui tourne en dehors du navigateur mais qui en reprend les conventions. Le projet s’appelle Deno et il vient d’atteindre la version 1.0. ![Logo de Deno](https://avatars1.githubusercontent.com/u/42048915) ---- [Annonce de la sortie de la v1](https://deno.land/v1) [Le code source de Deno sur GitHub](https://github.com/denoland) [Présentation des dix choses que Ryan Dahl regrette à propos de Node.js](https://www.youtube.com/watch?v=M3BM9TB-8yA) ---- D’un point de vue technique, Deno est codé en Rust et repose toujours sur V8. Le code exécuté est désormais du [[TypeScript]] et le fonctionnement est plus proche d’un navigateur Web. Par exemple, il utilise les mêmes API que celles fournies par les navigateurs quand cela fait sens, plutôt que de proposer des API propres (p. ex. `fetch` plutôt que le `http.get` de Node.js pour faire des requêtes HTTP). Avant d’aller plus loin, voici le très attendu exemple de serveur Web qui répond avec un _Hello World_ : ```ts import { serve } from "https://deno.land/std@0.50.0/http/server.ts"; for await (const req of serve({ port: 8000 })) { req.respond({ body: "Hello World\n" }); } ``` On peut tout de suite remarquer que Deno prend le même chemin que Go pour la gestion des dépendances, à savoir une approche décentralisée et qui ne nécessite pas d’outils tiers comme _npm_. On peut directement importer un fichier TypeScript venant d’Internet. Pour celles et ceux que ça ferait bondir sur leur chaise vis‑à‑vis de la sécurité, la réponse tient en deux parties : 1. Deno a une approche bac à sable par défaut : par défaut, un script ne peut pas accéder au système de fichiers ou à Internet (un peu comme dans un navigateur), et l’utilisateur doit explicitement passer une option comme `--allow-net` pour donner la permission ; 2. Deno a un système de cache qui fait que l’on peut faire fonctionner un script en téléchargeant une première fois les dépendances, en les vérifiant, et elles ne bougeront plus ensuite tant que les URL du script ne bougeront pa ; il est également possible de faire du _vendoring_ facilement (il suffit de republier les dépendances sur un serveur Web que l’on contrôle). Dans les différences avec Node.js, on peut également citer l’utilisation des `Promise` à la place des _callbacks_, souvent utilisées via _async/await_. Cela va notamment régler le problème de _back‑pressure_ qui avait conduit à rendre complexe les API de Node.js (`EventEmitter`, fonction `pause` à appeler manuellement, etc.). Ryan Dahl liste quelques limitations connues de Deno : - Deno est encore très jeune (2 ans) et va continuer à évoluer assez rapidement (là où Node.js est beaucoup plus stable) ; - Deno fournit un module TypeScript de comptabilité avec les API de Node.js pour aider au portage, mais ce module est encore loin d’être complet et n’est pas suffisant en l’état pour profiter des nombreux paquets npm qui dépendent souvent de ces API ; - les performances du serveur HTTP ne dépassent pas celles de Node.js (légèrement moins de requêtes par seconde mais une meilleure latence moyenne) ; - le typage statique de TypeScript est très lent (une piste évoquée est de réécrire `tsc` en Rust) ; - il n’y a pas encore d’interface stable pour permettre l’écriture de greffons ou d’extensions ; - enfin, les usages et bonnes pratiques autour de Deno restent à découvrir.