AprĂšs deux ans de dĂ©veloppement le premier lancement significatif , une plateforme pour l'exĂ©cution isolĂ©e d'applications Ă©crites en JavaScript et TypeScript, qui peut ĂȘtre utilisĂ©e pour crĂ©er des gestionnaires fonctionnant sur le serveur. La plateforme est dĂ©veloppĂ©e par Ryan Dahl (), le crĂ©ateur de Node.js. Tout comme dans Node.js, Deno utilise le moteur JavaScript , Ă©galement utilisĂ© dans les navigateurs basĂ©s sur Chromium. Cependant, Deno n'est pas un fork de Node.js, mais constitue un projet entiĂšrement nouveau créé de toutes piĂšces. Le code du projet est sous licence MIT. Les versions sont disponibles pour Linux, Windows et macOS.
Le numĂ©ro de version significatif est liĂ© Ă la stabilisation de l'API dans l'espace de noms Deno, qui est responsable de l'interaction des applications avec le systĂšme d'exploitation. Les interfaces qui ne sont pas encore , sont par dĂ©faut cachĂ©es et accessibles uniquement en exĂ©cutant en mode « âunstable ». Au fur et Ă mesure de la sortie de nouvelles versions, ces API seront progressivement rendues stables. L'API dans l'espace de noms global, qui inclut des fonctions standard telles que setTimeout() et fetch(), est autant que possible proche de l'API des navigateurs web standards et Ă©volue en accord avec les normes web pour les navigateurs. Les API fournies par Rust, qui sont utilisĂ©es directement dans le code de la plateforme, ainsi que l'interface pour le dĂ©veloppement de plugins pour l'exĂ©cution Deno, ne sont pas encore stabilisĂ©es et continuent d'Ă©voluer.
Les motivations clĂ©s de la crĂ©ation de cette nouvelle plateforme JavaScript sont le dĂ©sir d'Ă©liminer les erreurs conceptuelles dans l'architecture de Node.js, et de fournir aux utilisateurs un environnement plus sĂ©curisĂ©. Pour amĂ©liorer la sĂ©curitĂ©, l'encapsulation autour du moteur V8 est Ă©crite en Rust, ce qui permet d'Ă©viter de nombreuses vulnĂ©rabilitĂ©s provenant d'un travail de bas niveau sur la mĂ©moire, telles que l'accĂšs Ă la mĂ©moire aprĂšs sa libĂ©ration, la dĂ©rĂ©fĂ©rencement de pointeurs nuls, et le dĂ©passement de tampon. Pour le traitement des requĂȘtes en mode non-bloquant, la plateforme , Ă©galement Ă©crite en Rust. Tokio permet de crĂ©er des applications hautes performances basĂ©es sur une architecture orientĂ©e Ă©vĂ©nements, prenant en charge la multithreading et le traitement des requĂȘtes rĂ©seau de maniĂšre asynchrone.
Principales Deno :
- Orientation vers la sécurité dans la configuration par défaut. Les accÚs aux fichiers, les fonctionnalités réseau et l'accÚs aux variables d'environnement par défaut sont bloqués et nécessitent une activation explicite. Les applications par défaut s'exécutent dans des environnements sandbox isolés et ne peuvent pas accéder aux fonctionnalités systÚme sans autorisations explicites.
- Prise en charge intĂ©grĂ©e de TypeScript en plus de JavaScript. Pour la vĂ©rification des types et la gĂ©nĂ©ration de JavaScript, le compilateur TypeScript standard est utilisĂ©, ce qui entraĂźne une baisse de performance par rapport Ă l'analyse JavaScript dans V8. Ă l'avenir, il est prĂ©vu de prĂ©parer une mise en Ćuvre propre du systĂšme de vĂ©rification des types TypeScript, qui permettra d'augmenter de maniĂšre significative les performances du traitement TypeScript.
- Le runtime est fourni sous la forme d'un seul fichier exĂ©cutable autonome (« deno »). Pour exĂ©cuter des applications avec Deno, il suffit d'avoir un fichier exĂ©cutable pour sa plateforme, mesurant environ 20 Mo, sans dĂ©pendances externes et sans nĂ©cessiter une installation spĂ©ciale sur le systĂšme. Deno n'est pas une application monolithique, mais une collection de paquets crate en Rust (, ), qui peuvent ĂȘtre utilisĂ©s sĂ©parĂ©ment.
- Lors de l'exĂ©cution d'un programme, ainsi que pour le chargement de modules, l'adressage via URL peut ĂȘtre utilisĂ©. Par exemple, pour exĂ©cuter le programme welcome.js, la commande « deno https://deno.land/std/examples/welcome.js » peut ĂȘtre utilisĂ©e. Le code provenant de ressources externes est tĂ©lĂ©chargĂ© et mis en cache sur le systĂšme local, mais n'est jamais mis Ă jour automatiquement (pour une mise Ă jour, il est nĂ©cessaire de lancer explicitement l'application avec le drapeau « --reload »).
- Traitement efficace des requĂȘtes rĂ©seau HTTP dans les applications, la plateforme est conçue pour crĂ©er des applications rĂ©seau trĂšs performantes.
- Possibilité de créer des applications web universelles pouvant s'exécuter à la fois dans Deno et dans un navigateur web classique.
- Présence , dont l'utilisation ne nécessite pas d'attacher des dépendances externes. Les modules de la collection standard ont subi un audit supplémentaire et ont été vérifiés pour leur compatibilité.
- En plus de son environnement d'exécution, la plateforme Deno joue également le rÎle de gestionnaire de paquets et permet d'accéder aux modules via URL dans le code. Par exemple, pour charger un module, on peut spécifier dans le code « import * as log from "https://deno.land/std/log/mod.ts". Les fichiers chargés depuis des serveurs externes via une URL sont mis en cache. Les versions des modules sont déterminées par des numéros de version intégrés à l'URL, par exemple « https://unpkg.com/liltest@0.0.5/dist/liltest.js » ;
- Le systÚme d'inspection des dépendances (commande « deno info ») et un utilitaire de formatage de code (deno fmt) sont intégrés.
- Tous les scripts d'application peuvent ĂȘtre combinĂ©s en un seul fichier JavaScript.
Différences avec Node.js :
- Deno n'utilise pas le gestionnaire de paquets npm
et ne s'attache pas aux dĂ©pĂŽts, l'adressage des modules se fait via URL ou chemin de fichier, et les modules eux-mĂȘmes peuvent ĂȘtre hĂ©bergĂ©s sur n'importe quel site ; - Dans Deno, « package.json » n'est pas utilisĂ© pour dĂ©finir les modules ;
- Différence d'API, toutes les actions asynchrones dans Deno retournent une promesse ;
- Deno exige une déclaration explicite de tous les pouvoirs nécessaires pour les fichiers, le réseau et les variables d'environnement ;
- Toutes les erreurs non gĂ©rĂ©es entraĂźnent l'arrĂȘt de l'application ;
- Deno utilise le systĂšme de modules ECMAScript et ne supporte pas require();
- Le serveur HTTP intĂ©grĂ© de Deno est Ă©crit en TypeScript et fonctionne sur des sockets TCP natifs, tandis que le serveur HTTP de Node.js est Ă©crit en C et fournit des liaisons pour JavaScript. Les dĂ©veloppeurs de Deno se sont concentrĂ©s sur l'optimisation de toute la couche des sockets TCP et sur la fourniture d'une interface plus gĂ©nĂ©rale. Le serveur HTTP de Deno assure une bande passante plus faible mais garantit des latences prĂ©visibles et faibles. Par exemple, dans un test, une simple application basĂ©e sur le serveur HTTP de Deno a pu traiter 25 000 requĂȘtes par seconde avec une latence maximale de 1,3 millisecondes. Dans Node.js, une application similaire a traitĂ© 34 000 requĂȘtes par seconde, mais les latences variaient de 2 Ă 300 millisecondes.
- Deno n'est pas compatible avec les paquets pour Node.js (NPM), mais se développe séparément pour la compatibilité avec la bibliothÚque standard de Node.js, permettant à mesure de son développement de faire fonctionner de plus en plus d'applications écrites pour Node.js dans Deno.
Source : opennet.ru
