De release van Deno 2.0 is gepubliceerd, bedoeld voor het gescheiden uitvoeren van serverapplicaties in JavaScript en TypeScript met behulp van de V8-engine, die wordt gebruikt in Chromium-gebaseerde browsers. Het Deno-project wordt ontwikkeld door Ryan Dahl, de maker van Node.js, met als doel een veiliger omgeving te bieden en conceptuele fouten in de architectuur van Node.js te corrigeren. Om de veiligheid te verhogen, is de wrapper rond de V8-engine geschreven in Rust, en voor het verwerken van aanvragen in een niet-blokkerende modus wordt het Tokio-platform gebruikt. De code van het project wordt verspreid onder de MIT-licentie. Bouws zijn voorbereid voor Linux, Windows en macOS.
Bij het voorbereiden van de nieuwe tak was de hoofdfocus op de compatibiliteit met de oude JavaScript-infrastructuur en het uitbreiden van het bereik van ondersteunde JavaScript-projecten zonder concessies te doen aan de veiligheid. Onder de wijzigingen:
- Er is terugwaartse compatibiliteit met Node.js en npm geïmplementeerd, wat het mogelijk maakt om ongemodifyeerde applicaties die voor Node.js zijn gemaakt, uit te voeren. De ondersteuning van Node.js maakt het ook mogelijk om bestaande projecten geleidelijk van Node.js over te zetten naar Deno of afhankelijkheden van npm aan te sluiten bij Deno-projecten via de specificatie 'npm:' bij het importeren van pakketten in deno.json.
- Ingebouwde ondersteuning voor het bestand package.json en de map met modules node_modules, die in Node.js worden gebruikt, is toegevoegd.
- Ondersteuning voor privé NPM-repositories, gedefinieerd via '.npmrc'-bestanden, is gewaarborgd.
- Ondersteuning voor populaire JavaScript-frameworks zoals Next.js, Astro, Remix, Angular, SvelteKit en QwikCity is toegevoegd.
- Ondersteuning voor npm-werkruimten (workspace) en mono-repositories (monorepo) met afzonderlijke verwerking van afhankelijkheden is toegevoegd.
- Nieuwe pakketbeheercommando's zijn toegevoegd: 'deno install' voor het installeren van afhankelijkheden, 'deno add' voor het toevoegen van pakketten aan package.json of deno.json, 'deno remove' voor het verwijderen van pakketten. Het wordt opgemerkt dat 'deno install' ongeveer 15 keer sneller werkt dan npm bij een gebrek aan pakketten in de cache en 90% sneller wanneer een pakket in de cache beschikbaar is (zowel node_modules als de eigen globale cache worden ondersteund).
- De standaardbibliotheek is gestabiliseerd.
- Er is een lange ondersteuningcyclus (LTS) gewaarborgd.
- De JSR is geïntroduceerd — een repository met JavaScript- en TypeScript-bibliotheken die in verschillende JavaScript-runtime-omgevingen kunnen worden gebruikt.
- In het commando 'deno fmt' is de mogelijkheid toegevoegd om inhoud te formatteren in de formaten HTML, CSS en YAML.
- De opdracht «deno lint» heeft nu ondersteuning voor Node.js-specifieke regels en correcties gekregen.
- De opdracht «deno test» biedt nu de mogelijkheid om testen te draaien die zijn gemaakt met behulp van node:test.
- De opdracht «deno task» ondersteunt nu het uitvoeren van scripts via package.json.
- De opdracht «deno compile» heeft de mogelijkheid om code met een digitale handtekening te ondertekenen gekregen.
- De opdracht «deno serve» ondersteunt nu het parallel uitvoeren van HTTP-serveroperaties met gebruik van meerdere CPU-kernen.
- De opdracht «deno coverage» heeft ondersteuning gekregen voor het opslaan van rapporten in HTML-formaat.
- De prestatie is geoptimaliseerd.

Belangrijkste kenmerken van Deno:
- Focus op veiligheid in de standaardconfiguratie. Toegang tot bestanden, netwerkmogelijkheden en omgevingsvariabelen is standaard geblokkeerd en vereist expliciete inschakeling. Applicaties worden standaard uitgevoerd in geïsoleerde sandbox-omgevingen en kunnen geen systeemfunctionaliteiten benaderen zonder expliciete toestemming.
- Ingebouwde ondersteuning voor de programmeertaal TypeScript naast JavaScript. Voor typecontrole en het genereren van JavaScript wordt de standaard TypeScript-compiler gebruikt, waardoor de prestaties in vergelijking met de parsing van JavaScript in V8 kunnen afnemen.
- De runtime wordt geleverd als een enkele zelfstandige uitvoerbare bestand («deno»). Om applicaties met Deno uit te voeren, is het voldoende om één uitvoerbaar bestand voor uw platform te downloaden, met een grootte van ongeveer 40 MB, zonder externe afhankelijkheden en zonder dat er een speciale installatie in het systeem vereist is. Deno is geen monolithische applicatie, maar een verzameling crate-pakketten in Rust (deno_core, rusty_v8), die afzonderlijk kunnen worden gebruikt.
- Bij het uitvoeren van een programma en het laden van modules kan adressering via URL's worden gebruikt. Bijvoorbeeld, om het programma welcome.js uit te voeren, kan de opdracht «deno https://deno.land/std/examples/welcome.js» worden gebruikt. Code van externe bronnen wordt gedownload en in de lokale systeemcache opgeslagen, maar wordt nooit automatisch bijgewerkt (voor updates moet de applicatie expliciet worden gestart met de vlag «—reload»).
- Efficiënte verwerking van HTTP-netwerkverzoeken in applicaties, het platform is ontworpen voor het maken van hoogpresterende netwerkaanstellingen.
- De mogelijkheid om universele webapplicaties te maken die zowel in Deno als in standaard web-browsers kunnen worden uitgevoerd.
- De beschikbaarheid van een standaardset modules die niet afhankelijk zijn van externe afhankelijkheden. Modules uit de standaardcollectie zijn onderworpen aan aanvullende audits en compatibiliteitscontroles;
- Naast runtime fungeert het Deno-platform ook als een pakketbeheerder en maakt het mogelijk om binnen de code modules via URL aan te roepen. Bijvoorbeeld, om een module te laden, kun je in de code «import * as log from «https://deno.land/std/log/mod.ts». Bestanden die van externe servers URL's worden gecached. Versiebeheer van modules wordt bepaald door versienummers in de URL op te nemen, bijvoorbeeld «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- Focus op het gebruik van webstandaarden, ondersteuning voor Promise, fetch en ECMAScript-modules.
- Compatibiliteit met pakketten die zijn gehost in het NPM-repository en bedoeld voor het Node.js-platform.
- Het pakket bevat een systeem voor het inspecteren van afhankelijkheden (commando «deno info») en een tool voor het opmaken van code (deno fmt);
- Alle applicatiescripts kunnen worden samengevoegd in één JavaScript-bestand.
Bron: opennet.ru

