il rilascio del progetto , che offre una piattaforma simile a Node.js per l'esecuzione isolata di applicazioni in JavaScript e TypeScript, utilizzabile per l'esecuzione di app senza legame con il browser, ad esempio per creare handler che funzionano sul server. Deno utilizza il motore JavaScript , che viene utilizzato anche in Node.js e nei browser basati sul progetto Chromium. Il codice del progetto è sotto licenza MIT. Il progetto è sviluppato da Ryan Dahl (), creatore della piattaforma JavaScript Node.js.
Uno dei principali obiettivi della creazione di un nuovo runtime per JavaScript è fornire un ambiente più sicuro. Per migliorare la sicurezza, l'interfaccia attorno al motore V8 è scritta in Rust, permettendo di evitare molte vulnerabilità derivanti dalla gestione a basso livello della memoria, come l'accesso all'area di memoria dopo il rilascio, la dereferenziazione di puntatori nulli e l'overflow del buffer. Per gestire le richieste in modo non bloccante, viene utilizzata la piattaforma , scritto anche in linguaggio Rust. Tokio consente di creare applicazioni ad alte prestazioni basate su architettura orientata agli eventi, supportando il multithreading e la gestione delle richieste di rete in modo asincrono.
Principali Deno:
- Orientamento alla sicurezza nella configurazione predefinita. Gli accessi a file, capacità di rete e accesso a variabili di ambiente sono bloccati di default e richiedono un'esplicita attivazione;
- Supporto integrato per il linguaggio TypeScript oltre a JavaScript;
- Il runtime è fornito come un singolo file eseguibile autonomo («deno»). Per eseguire applicazioni utilizzando Deno è sufficiente per la propria piattaforma un file eseguibile di circa 10 MB, privo di dipendenze esterne e che non richiede alcuna installazione particolare nel sistema;
- All'avvio del programma e per il caricamento dei moduli è possibile utilizzare l'indirizzamento tramite URL. Ad esempio, per avviare il programma welcome.js, si può 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 avviare esplicitamente l'applicazione con il flag «—reload»).
- Gestione efficace delle richieste di rete HTTP nelle applicazioni; 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 in un normale browser web.
- Oltre al runtime, la piattaforma Deno funge anche da gestore di pacchetti e consente di accedere ai moduli tramite URL nel 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 server esterni tramite URL sono memorizzati nella cache. I vincoli alle versioni dei moduli sono definiti attraverso l'indicazione 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 il formato del codice (deno fmt).
- Per gli sviluppatori di applicazioni un insieme di moduli standard che hanno subito un audit aggiuntivo e verifiche 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 collega ai repository; gli indirizzi dei moduli sono gestiti tramite URL o percorsi di file, con i moduli che possono essere ospitati su qualsiasi sito; - In Deno non si utilizza il «package.json» per definire i moduli;
- Differenze nell'API: tutte le operazioni asincrone in Deno restituiscono un promise;
- Deno richiede una dichiarazione esplicita di tutti i permessi necessari per file, rete e variabili d'ambiente;
- Tutti gli errori non gestiti portano alla terminazione dell'applicazione;
- In Deno si applica il sistema di moduli ECMAScript e non viene supportato require().
Fonte: opennet.ru
