# Deno: il runtime per JavaScript e TypeScript

Deno è un [runtime (un sistema di tempo di esecuzione)](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/ambiente-di-runtime/ "Ambiente di runtime") radicalmente semplice per JavaScript e TypeScript il quale offre ai suoi utenti un modo nuovo e semplice **di scrivere JavaScript e TypeScript sul lato server**. La piattaforma è ancora all’inizio del suo sviluppo, ma si dimostra promettente già in una fase iniziale tanto da lasciar intuire di poter **sostituire il testato e collaudato runtime Node.js** nel lungo termine. Tuttavia, anche la comunità di sviluppatori JavaScript deve eseguire questo passaggio.

Ci sono prodotti che sono amati dalla comunità anche se non sono perfetti. Il [linguaggio di scripting](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/cosa-sono-i-linguaggi-di-scripting/ "Cosa sono i linguaggi di scripting?") JavaScript è un buon esempio al riguardo. Nonostante chiari deficit, quello di JavaScript è uno dei linguaggi più utilizzati al mondo con innumerevoli [framework e librerie](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/le-librerie-e-i-framework-javascript-piu-conosciuti/ "Le librerie e i framework JavaScript più conosciuti"). Anche [Node.js](https://nodejs.org/ "Node.js"), il predecessore di Deno, è molto popolare. Lo **sviluppatore** responsabile, **Ryan Dahl,** con il suo nuovo progetto Deno, vuole trarre vantaggio dalle esperienze acquisite con Node.js e offrire una piattaforma nuova, più sicura e migliore. Nel nostro articolo vi spieghiamo se e come funziona.

## Cos’è Deno?

Deno si trova ancora nella sua fase iniziale. **L’interfaccia, le decisioni di architettura e il design non sono ancora stati impostati** e cambieranno sicuramente nel corso dello sviluppo della piattaforma. In alcuni punti è quindi difficile fare un confronto diretto con il Node.js sopra menzionato. Lo sviluppatore di entrambe le piattaforme ha proposto un **confronto** approssimativo nel seguente video di YouTube:

[YouTube video](https://www.youtube.com/watch?v=mzfw9TwBiQc)Deno e Node non sono solo simili nel nome. Anche la loro idea di base è la stessa: offrono **una piattaforma per** [eseguire JavaScript dal browser](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/attivare-javascript-sul-browser/ "Attivare Javascript sul browser") e la possibilità di scrivere JavaScript o TypeScript lato server. A questo scopo usano vari progetti già esistenti, ciò stando a significare che non si tratta pertanto di un’auto-implementazione completa. Ad esempio, il **motore Google V8**, già integrato nei browser Chrome ed Edge, viene utilizzato come standard per l’esecuzione di JavaScript in diversi ambienti. Lato server, Deno si basa quindi su V8 come Node.js.

Tra i due programmi vi sono vari elementi comuni, ma a differenza di Node, scritto con C++, Deno utilizza l’innovativo e molto **più sicuro linguaggio di programmazione** [Rust](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/rust-presentazione-del-linguaggio-di-programmazione/ "Rust: presentazione del linguaggio di programmazione") di Mozilla Research. Deno consente quindi la scrittura diretta di un **codice tipizzato staticamente**, un punto di forza ed un elemento di vendita vincente.

## Le caratteristiche di Deno: pronto all’uso

Deno ha due funzioni che portano a un’estrema semplificazione del flusso di lavoro: da un lato, l’ambiente di runtime si basa su un **semplice sistema di moduli**, in cui gli [URL](https://www.ionos.it/digitalguide/server/know-how/url-che-cose-uno-uniform-resource-locator/ "URL: che cos’è uno Uniform Resource Locator? ") e i moduli sono in corrispondenza uno a uno. Dall’altro lato, Deno consente **ai codici TypeScript di essere eseguiti liberamente**.

Una maggiore libertà per gli sviluppatori di solito comporta un maggior rischio per la sicurezza durante l’utilizzo. Tuttavia Deno è molto evoluto in termini di sicurezza. Gli script vengono generalmente eseguiti in una [sandbox](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/cose-una-sandbox/ "Cos’è una sandbox?") separata dal sistema operativo. La possibilità di aggiungere ulteriori funzionalità per gli sviluppatori è limitata.

Deno è molto più vicino **all’esperienza dell’utente sul web**: l’accesso al sistema è bloccato di default e l’utente deve prima consentire a un’applicazione di accedere al sistema, altrimenti i due sono perfettamente isolati l’uno dall’altro. Tale procedimento è simile al comportamento di un browser quando, ad esempio, in una videoconferenza richiede l’accesso alla webcam e al microfono. **Le risorse sono accessibili solo con il consenso dell’utente**. In parole povere, Deno si comporta come un browser per gli script da riga di comando.

In più, Deno non manca di rispondere alla tendenza più importante nello sviluppo di JavaScript: il **supporto nativo di TypeScript**.

N.B. TypeScript differisce dal linguaggio di programmazione JavaScript soprattutto nell’area della **tipizzazione**. JavaScript concede molta (troppa) libertà nella tipizzazione di variabili e funzioni. Qui non sono previste specifiche su quale tipo debba essere una variabile o generare una funzione. Ciò rende più difficile la lettura e la comprensione del codice. In **TypeScript** è consuetudine **assegnare un tipo** a ciascuna **variabile**. La funzione e l’output sono quindi tipizzati in anticipo. Anche un’assegnazione errata viene immediatamente segnalata.

Non è necessario alcun passaggio aggiuntivo del [compilatore](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/compilatore-vs-interprete/ "Compilatore vs interprete") per convertire ed eseguire il codice TypeScript generato con Deno in JavaScript. **I dati vengono sempre scambiati in pacchetti**. Di conseguenza, Deno non ha bisogno di un pacchetto esterno come ts-node, che si occupa, ad esempio, del processo di compilazione in Node.js.

Deno riserva delle sorprese anche nella gestione dei pacchetti: uno dei fattori di successo di Node è il gestore dei pacchetti [npm](https://www.npmjs.com/ "npm"). Npm fa parte della community GitHub e non è quindi parte integrante di Node, ma la combinazione dei due è considerata uno standard non ufficiale. **Deno**, d’altra parte, non ha bisogno di un **gestore di pacchetti esterno** o **è fondamentalmente il proprio gestore di pacchetti**. Il sistema modulare può risolvere i pacchetti tramite percorsi o URL del file system e scaricare direttamente le risorse necessarie.

## Come funziona Deno?

Come già accennato, Deno è ancora agli inizi. L’attenzione è dunque rivolta alla sicurezza e alle questioni architettoniche di base. Si inizia con l’installazione, che non viene eseguita comodamente tramite un pacchetto di installazione, ma può essere eseguita solo tramite [GitHub](https://github.com/denoland/deno/releases "denoland: deno-Repository su GitHub") o script di shell o il gestore pacchetti del sistema operativo. Per verificare se l’installazione sia andata a buon fine, nella riga di comando va inserito il comando *deno – version*, il quale offre anche una panoramica della versione Deno installata e delle versioni di V8 e TypeScript. Se non si desidera installare Deno su un sistema, è possibile configurarlo ed eseguirlo in un [contenitore Docker](https://www.ionos.it/digitalguide/server/configurazione/tutorial-di-docker/ "Tutorial di Docker").

Una volta installato Deno ci sono due tipi di esecuzione. L’ambiente di runtime può essere utilizzato **in modo interattivo come shell** o **con un file come input**. Il primo è utile per applicazioni più piccole e per sperimentare l’alternativa Node.js. Il secondo è l’utilizzo più comune che si fa di Deno. Il **nome di un file** viene quindi **trasferito sulla piattaforma** e il lavoro con Deno può iniziare.

Le **famose parole chiave di JavaScript** come *import, export, promise* ecc. sono direttamente disponibili in Deno e non devono essere importate. Oltre agli standard, la piattaforma offre **un oggetto globale**, per il quale gli sviluppatori non hanno dato un proprio nome, motivo per cui si chiama semplicemente Deno. L’oggetto Deno costituisce la **base per ogni applicazione**. Funziona come un’interfaccia per il sistema, ad esempio gli sviluppatori possono accedere al file system e **uscire dalla sandbox**. Come già accennato in precedenza, queste eccezioni devono essere confermate attivamente in modo da poter escludere attacchi inosservati da un’applicazione al sistema.

Deno offre tutti i moduli standard; la community dispone già di moduli aggiuntivi, sperimentali o utili che espandono la gamma di funzioni.

## Deno: vantaggi e svantaggi in sintesi

**Deno** è o sarà **migliore di Node**? Lo sviluppatore Ryan Dahl ne è convinto. Problemi ed errori del passato e compromessi devono essere risolti, al fine di creare una piattaforma moderna, stabile e sicura per JavaScript e TypeScript lato server. Il potenziale esiste in ogni caso, in particolare grazie alla fase di **affidamento al linguaggio di programmazione Rust di Mozilla** e alla creazione di un **sistema di autorizzazione centrale**. Questo non solo può essere utilizzato in modo intuitivo, ma impedisce anche il breakout indesiderato di un’applicazione dalla sandbox.

Tuttavia il flusso di lavoro, sebbene notevolmente semplificato, presenta i suoi svantaggi: Deno non è sempre compatibile con gli ecosistemi esistenti. Un modulo di Node non funziona semplicemente su Deno o viceversa. In tutti i modi, se la piattaforma dovesse continuare ad affermarsi, si prevede che non ci siano seri problemi di compatibilità a lungo termine. Ad esempio, Deno ha già una funzione *require* compatibile con Node.

In sintesi Deno è ancora un **progetto in via di sviluppo**. Tuttavia, le prime soluzioni ad alcune delle maggiori debolezze di Node.js sono già notevoli al giorno d’oggi.


This is a markdown version of: [https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/deno/](https://www.ionos.it/digitalguide/siti-web/programmazione-del-sito-web/deno/) for AI/LLM consumption.