È stata pubblicata la versione 2.0 della piattaforma Deno, progettata per l'esecuzione isolata di applicazioni server scritte in JavaScript e TypeScript utilizzando il motore V8, impiegato nei browser basati su Chromium. Il progetto Deno è sviluppato da Ryan Dahl, creatore di Node.js, con l'obiettivo di fornire un ambiente più sicuro ed eliminare errori concettuali commessi nell'architettura di Node.js. Per aumentare la sicurezza, il wrapper attorno al motore V8 è scritto in Rust, mentre per l'elaborazione delle richieste in modalità non bloccante si utilizza la piattaforma Tokio. Il codice del progetto è distribuito con licenza MIT. Sono disponibili build per Linux, Windows e macOS.
Nella preparazione del nuovo ramo, è stata posta particolare attenzione alla compatibilità con la vecchia infrastruttura JavaScript e all'ampliamento dello spettro dei progetti JavaScript supportati senza compromettere la sicurezza. Tra le modifiche:
- È stata implementata la compatibilità retroattiva con Node.js e npm, consentendo l'esecuzione di applicazioni non modificate create per Node.js. Il supporto per Node.js offre anche la possibilità di migrare gradualmente progetti esistenti da Node.js a Deno o di collegare a progetti Deno dipendenze da NPM specificando il prefisso «npm:» durante l'importazione dei pacchetti in deno.json.
- È stato aggiunto il supporto nativo per il file package.json e la cartella con i moduli node_modules, utilizzati in Node.js.
- È stato garantito il supporto per i repository NPM privati, definiti tramite i file «.npmrc».
- È stato aggiunto il supporto per framework JavaScript popolari, come Next.js, Astro, Remix, Angular, SvelteKit e QwikCity.
- È stato introdotto il supporto per gli spazi di lavoro npm (workspace) e i mono-repository (monorepo) con elaborazione separata delle dipendenze.
- Sono stati aggiunti nuovi comandi per la gestione dei pacchetti: «deno install» per installare dipendenze, «deno add» per aggiungere pacchetti a package.json o deno.json, «deno remove» per rimuovere pacchetti. Si nota che «deno install» è circa 15 volte più veloce di npm in assenza di pacchetti nella cache e il 90% più veloce in presenza di un pacchetto nella cache (supporta sia node_modules che la propria cache globale).
- È stata stabilizzata la libreria standard.
- È garantito un lungo ciclo di supporto (LTS).
- È stato presentato JSR — un repository con librerie JavaScript e TypeScript, utilizzabili in vari Runtime JavaScript.
- Nel comando «deno fmt» è stata aggiunta la possibilità di formattare contenuti nei formati HTML, CSS e YAML.
- Il comando «deno lint» ha aggiunto il supporto per regole e correzioni specifiche di Node.js.
- Nel comando «deno test» è stata implementata la possibilità di eseguire test creati utilizzando node:test.
- Nel comando «deno task» è stato implementato il supporto per l'esecuzione di script tramite package.json.
- Nel comando «deno compile» è ora possibile firmare digitalmente il codice.
- Nel comando «deno serve» è stata implementata la parallelizzazione delle operazioni dei server HTTP utilizzando più core CPU.
- Nel comando «deno coverage» è stato aggiunto il supporto per il salvataggio dei report nel formato HTML.
- È stata effettuata un'ottimizzazione delle prestazioni.

Caratteristiche principali di Deno:
- Orientamento alla sicurezza nella configurazione predefinita. L'accesso a file, funzionalità di rete e variabili d'ambiente è bloccato per impostazione predefinita e richiede attivazione esplicita. Le applicazioni vengono eseguite in ambienti sandbox isolati di default e non possono accedere alle funzionalità di sistema senza esplicite autorizzazioni;
- Supporto integrato per il linguaggio TypeScript oltre a JavaScript. Per il controllo dei tipi e la generazione di JavaScript viene utilizzato il compilatore TypeScript incorporato, il che comporta un calo delle prestazioni rispetto all'analisi di JavaScript in V8;
- Il runtime è fornito come un unico file eseguibile autonomo («deno»). Per eseguire applicazioni utilizzando Deno è sufficiente scaricare un file eseguibile per la propria piattaforma, della dimensione di circa 40 MB, che non ha dipendenze esterne e non richiede un'installazione particolare nel sistema. Deno non è un'applicazione monolitica, ma è una raccolta di pacchetti crate in Rust (deno_core, rusty_v8) che possono essere utilizzati separatamente;
- Quando avvii un programma, puoi anche utilizzare indirizzamenti tramite URL per caricare moduli. Ad esempio, per eseguire il programma welcome.js puoi utilizzare il comando «deno https://deno.land/std/examples/welcome.js». Il codice da risorse esterne viene scaricato e memorizzato nella cache sul sistema locale, ma non viene mai aggiornato automaticamente (per aggiornare, è necessario eseguire esplicitamente l'applicazione con il flag «—reload»);
- Gestione efficace delle richieste di rete in applicazioni HTTP, la piattaforma è progettata per creare applicazioni di rete ad alte prestazioni;
- Possibilità di creare applicazioni web universali, che possono essere eseguite sia in Deno che nei normali browser web;
- Disponibilità di un insieme standard di moduli, il cui utilizzo non richiede vincoli a dipendenze esterne. I moduli della collezione standard hanno superato un audit aggiuntivo e un controllo di compatibilità;
- Oltre al runtime, la piattaforma Deno funge anche da gestore di pacchetti e consente di riferirsi ai moduli tramite URL all'interno del codice. Ad esempio, per caricare un modulo si può specificare nel codice «import * as log from «https://deno.land/std/log/mod.ts». I file caricati da esterni server via URL sono memorizzati nella cache. I vincoli sulle versioni dei moduli sono stabiliti tramite specifiche dei numeri di versione all'interno dell'URL, ad esempio, «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- Orientamento all'uso degli standard web, supporto per Promise, fetch e moduli ECMAScript.
- Compatibilità con pacchetti archiviati nel repository NPM e creati per la piattaforma Node.js.
- Il sistema è integrato con un sistema di ispezione delle dipendenze (comando «deno info») e un'utility per la formattazione del codice (deno fmt);
- Tutti gli script dell'applicazione possono essere combinati in un unico file JavaScript.
Fonte: opennet.ru

