rilascio del progetto , che offre una piattaforma simile a Node.js per l'esecuzione isolata di applicazioni in JavaScript e TypeScript, utilizzabile per eseguire applicazioni senza dipendenza dal browser, ad esempio per creare gestori che funzionano sul server. Deno utilizza il motore JavaScript , che viene anche utilizzato in Node.js e nei browser basati sul progetto Chromium. Il codice del progetto è sotto licenza MIT. Il progetto è sviluppato da Ryan Dahl (), il creatore della piattaforma JavaScript Node.js.
Uno degli obiettivi principali della creazione di un nuovo runtime per JavaScript è fornire un ambiente più sicuro. Per migliorare la sicurezza, l'involucro attorno al motore V8 è scritto in Rust, che consente di evitare molte vulnerabilità legate alla gestione a basso livello della memoria, come l'accesso alla memoria dopo che è stata liberata, la dereferenziazione di puntatori nulli e il buffer overflow. Per gestire le richieste in modo non bloccante, viene utilizzata la piattaforma , anch'essa scritta in Rust. Tokio consente di creare applicazioni ad alte prestazioni basate su un'architettura orientata agli eventi (Event-driven), che supportano il multithreading e la gestione delle richieste di rete in modo asincrono.
Principali Deno:
- Orientamento alla sicurezza nella configurazione predefinita. Gli accessi ai file, le funzionalità di rete e l'accesso alle variabili d'ambiente sono per impostazione predefinita bloccati e richiedono un'esplicita attivazione;
- Supporto integrato per TypeScript oltre a JavaScript;
- Il runtime è fornito come un singolo file eseguibile autonomo ("deno"). Per eseguire applicazioni utilizzando Deno basta per la sua piattaforma un unico file eseguibile, di circa 10 MB, senza dipendenze esterne e che non richiede alcuna installazione speciale nel sistema;
- 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;
- Oltre al runtime, la piattaforma Deno funge anche da gestore di pacchetti e permette di accedere ai moduli all'interno del codice tramite URL. 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 server esterni tramite URL vengono memorizzati nella cache. Il legame alle versioni dei moduli è determinato dalle specifiche dei numeri di versione all'interno dell'URL, ad esempio "https://unpkg.com/liltest@0.0.5/dist/liltest.js";
- È integrato un sistema di ispezione delle dipendenze (comando «deno info») e uno strumento per la formattazione del codice (deno fmt).
- Per gli sviluppatori di applicazioni un insieme di moduli standard, sottoposti a audit aggiuntivo e verifica di compatibilità;
- Tutti gli script dell'applicazione possono essere uniti in un unico file JavaScript.
Differenze rispetto a Node.js:
- Deno non utilizza il gestore di pacchetti npm
e non si lega ai repository, l'indirizzamento dei moduli avviene tramite URL o percorso file, e i moduli stessi possono essere ospitati su qualsiasi sito; - In Deno non viene utilizzato "package.json" per definire i moduli;
- Esiste una differenza nell'API, tutte le azioni asincrone in Deno restituiscono un promise;
- Deno richiede una definizione esplicita di tutte le autorizzazioni necessarie per file, rete e variabili d'ambiente;
- Tutti gli errori non gestiti portano alla chiusura dell'applicazione;
- Deno utilizza il sistema di moduli ECMAScript e non supporta require().
Fonte: opennet.ru
