URL: https://linuxfr.org/news/sortie-de-deno-1-0 Title: Sortie de Deno 1.0 Authors: Bruno Michel Davy Defaud, ted et Ysabeau đŸ§¶ Date: 2020ćčŽ05月14æ—„T22:47:53+02:00 License: CC By-SA Tags: deno, nodejs et rust Score: 32 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 pas ; 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.

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /