L'autore di Node.js ha presentato la piattaforma JavaScript sicura Deno 1.0

Dopo due anni di sviluppo presentata prima versione importante Dammi 1.0, una piattaforma per l'esecuzione autonoma di applicazioni in JavaScript e TypeScript, che può essere utilizzata per creare gestori eseguiti sul server. La piattaforma è sviluppata da Ryan Dahl (Ryan Dal), creatore di Node.js. Come Node.js, Deno utilizza un motore JavaScript V8, utilizzato anche nei browser basati su Chromium. Allo stesso tempo, Deno non è un fork di Node.js, ma è un nuovo progetto creato da zero. Codice del progetto distribuito da sotto licenza MIT. Assemblee preparato per Linux, Windows e macOS.

Il significativo numero di versione è associato alla stabilizzazione delle API nel namespace Deno, che sono responsabili dell'interazione delle applicazioni con il sistema operativo. Interfacce software che hanno finora non stabilizzato, sono nascosti per impostazione predefinita e disponibili solo durante l'esecuzione in modalità "--unstable". Man mano che verranno create nuove versioni, tali API diventeranno gradualmente stabili. L'API nello spazio dei nomi globale, che comprende funzioni comuni come setTimeout() e fetch(), è il più vicino possibile all'API dei browser Web convenzionali ed è sviluppata secondo gli standard Web per i browser. Le API fornite da Rust, che vengono utilizzate direttamente nel codice della piattaforma, così come l'interfaccia per lo sviluppo di plugin per il runtime Deno, non sono ancora state stabilizzate e continuano a svilupparsi.

I motivi principali per la creazione di una nuova piattaforma JavaScript erano il desiderio di eliminare errori concettuali, ammesso nell'architettura Node.js e fornire agli utenti un ambiente più sicuro. Per migliorare la sicurezza, il motore V8 è scritto in Rust, che evita molte delle vulnerabilità che derivano dalla manipolazione della memoria di basso livello, come l'accesso after-free, i dereferenziamenti dei puntatori null e i sovraccarichi del buffer. La piattaforma viene utilizzata per elaborare le richieste in modalità non bloccante Tokyo, scritto anche in Rust. Tokio consente di creare applicazioni ad alte prestazioni basate su un'architettura basata sugli eventi, supportando il multi-threading ed elaborando le richieste di rete in modalità asincrona.

Il principale caratteristiche Dicono:

  • Configurazione predefinita orientata alla sicurezza. L'accesso ai file, la rete e l'accesso alle variabili di ambiente sono disabilitati per impostazione predefinita e devono essere abilitati esplicitamente. Per impostazione predefinita, le applicazioni vengono eseguite in ambienti sandbox isolati e non possono accedere alle funzionalità del sistema senza concedere autorizzazioni esplicite;
  • Supporto integrato per TypeScript oltre JavaScript. Il compilatore TypeScript standard viene utilizzato per controllare i tipi e generare JavaScript, il che porta a un calo delle prestazioni rispetto all'analisi JavaScript nella V8. In futuro, prevediamo di preparare la nostra implementazione del sistema di controllo del tipo TypeScript, che migliorerà le prestazioni di elaborazione TypeScript di un ordine di grandezza;
  • Il runtime si presenta sotto forma di un singolo file eseguibile autonomo ("deno"). Per eseguire applicazioni utilizzando Deno è sufficiente scaricare per la sua piattaforma esiste un unico file eseguibile, di circa 20 MB, che non ha dipendenze esterne e non richiede alcuna installazione particolare sul sistema. Inoltre, deno non è un'applicazione monolitica, ma è una raccolta di pacchetti crate in Rust (deno_core, arrugginito_v8), che possono essere utilizzati separatamente;
  • Quando si avvia il programma, così come per caricare i moduli, è possibile utilizzare l'indirizzamento URL. Ad esempio, per eseguire il programma Welcome.js è possibile utilizzare il comando “deno https://deno.land/std/examples/welcome.js”. Il codice proveniente da risorse esterne viene scaricato e memorizzato nella cache del sistema locale, ma non viene mai aggiornato automaticamente (l'aggiornamento richiede l'esecuzione esplicita dell'applicazione con il flag "--reload");
  • Elaborazione efficiente delle richieste di rete tramite HTTP nelle applicazioni; la piattaforma è progettata per creare applicazioni di rete ad alte prestazioni;
  • La capacità di creare applicazioni web universali che possono essere eseguite sia in Deno che in un normale browser web;
  • disponibilità set standard di moduli, il cui utilizzo non richiede il vincolo a dipendenze esterne. I moduli della collezione standard sono stati sottoposti a ulteriori controlli e test di compatibilità;
  • Oltre al runtime, la piattaforma Deno funge anche da gestore di pacchetti e consente di accedere ai moduli tramite URL all'interno del codice. Ad esempio, per caricare un modulo, è possibile specificare nel codice “import * as log from “https://deno.land/std/log/mod.ts”. I file scaricati da server esterni tramite URL vengono memorizzati nella cache. Il collegamento alle versioni del modulo viene determinato specificando i numeri di versione all'interno dell'URL, ad esempio "https://unpkg.com/[email protected]/dist/liltest.js";
  • La struttura include un sistema integrato di ispezione delle dipendenze (il comando “deno info”) e un'utilità per la formattazione del codice (deno fmt);
  • Tutti gli script dell'applicazione possono essere combinati in un unico file JavaScript.

Differenze da Node.js:

  • Deno non utilizza il gestore pacchetti npm
    e non è legato a repository, i moduli sono indirizzati tramite un URL o un percorso di file e i moduli stessi possono essere posizionati su qualsiasi sito web;
  • Deno non utilizza "package.json" per definire i moduli;
  • Differenza API, tutte le azioni asincrone in Deno restituiscono una promessa;
  • Deno richiede la definizione esplicita di tutti i permessi necessari per file, variabili di rete e di ambiente;
  • Tutti gli errori che non vengono forniti con i gestori portano alla chiusura dell'applicazione;
  • Deno utilizza il sistema di moduli ECMAScript e non supporta require();
  • Il server HTTP integrato di Deno è scritto in TypeScript e viene eseguito su socket TCP nativi, mentre il server HTTP Node.js è scritto in C e fornisce collegamenti per JavaScript. Gli sviluppatori di Deno si sono concentrati sull'ottimizzazione dell'intero livello del socket TCP e sulla fornitura di un'interfaccia più generale. Deno HTTP Server fornisce un throughput inferiore ma garantisce una bassa latenza prevedibile. Ad esempio, nel test, una semplice applicazione basata sul server HTTP Deno è stata in grado di elaborare 25mila richieste al secondo con una latenza massima di 1.3 millisecondi. In Node.js, un'applicazione simile elaborava 34mila richieste al secondo, ma le latenze variavano tra 2 e 300 millisecondi.
  • Deno non è compatibile con i pacchetti per Node.js (NPM), ma viene sviluppato separatamente interstrato per compatibilità con la libreria standard Node.js, man mano che si sviluppa, sempre più applicazioni scritte per Node.js potranno essere eseguite in Deno.
  • Fonte: opennet.ru

Aggiungi un commento