de release van het project , biedt een platform vergelijkbaar met Node.js voor het afzonderlijk uitvoeren van applicaties in JavaScript en TypeScript, wat kan worden gebruikt voor het uitvoeren van applicaties zonder afhankelijkheid van een browser, bijvoorbeeld voor het creëren van serverwerkers. Deno maakt gebruik van de JavaScript-engine , die ook wordt gebruikt in Node.js en browsers gebaseerd op het Chromium-project. De code van het project is gelicenseerd onder MIT. Het project wordt ontwikkeld door Ryan Dahl (), de maker van het JavaScript-platform Node.js.
Een van de belangrijkste doelen bij het creëren van een nieuwe runtime voor JavaScript is het bieden van een veiliger omgeving. Om de veiligheid te verhogen, is de omhulling rond de V8-engine geschreven in Rust, wat helpt om veel kwetsbaarheden te vermijden die ontstaan door laag-niveau geheugenbeheer, zoals het toegang krijgen tot geheugen na vrijgave, het de-referencen van null pointers en buffer overflows. Voor het verwerken van verzoeken in een niet-blokkerende modus wordt het platform , ook geschreven in Rust, gebruikt. Tokio maakt het mogelijk om hoogpresterende applicaties op basis van een evenementen-georiënteerde architectuur (Event-driven) te creëren, die multithreading en asynchrone netwerkaanvragen ondersteunt.
Belangrijkste Deno:
- Veiligheid is de standaardconfiguratie. Toegang tot bestanden, netwerkfunctionaliteit en toegang tot omgevingsvariabelen zijn standaard geblokkeerd en vereisen expliciete inschakeling;
- Ingebouwde ondersteuning voor TypeScript naast JavaScript;
- De runtime wordt geleverd in de vorm van één zelfvoorzienend uitvoerbaar bestand (‘deno’). Om applicaties met Deno uit te voeren, is het voldoende voor zijn platform, één uitvoerbaar bestand van ongeveer 10 MB, zonder externe afhankelijkheden en zonder dat een speciale installatie in het systeem nodig is;
- Bij het uitvoeren van een programma en het laden van modules kan adressering via URL's worden gebruikt. Bijvoorbeeld, om het programma welcome.js uit te voeren, kan de opdracht «deno https://deno.land/std/examples/welcome.js» worden gebruikt. Code van externe bronnen wordt gedownload en in de lokale systeemcache opgeslagen, maar wordt nooit automatisch bijgewerkt (voor updates moet de applicatie expliciet worden gestart met de vlag «—reload»).
- Efficiënte verwerking van HTTP-netwerkverzoeken in applicaties, het platform is ontworpen voor het maken van hoogpresterende netwerkaanstellingen.
- De mogelijkheid om universele webapplicaties te maken die zowel in Deno als in standaard web-browsers kunnen worden uitgevoerd.
- Naast de runtime fungeert het Deno-platform ook als een pakketbeheerder en stelt het in staat om binnen de code modules via URL aan te spreken. Bijvoorbeeld, om een module te laden, kan in de code worden aangegeven “import * as log from ‘https://deno.land/std/log/mod.ts’. Bestanden die van externe servers via URL worden geladen, worden gecached. De versiebindingen van modules worden bepaald door versienummers binnen de URL aan te geven, bijvoorbeeld “https://unpkg.com/liltest@0.0.5/dist/liltest.js”;
- In het systeem is een afhankelijkheidsinspectietool geïntegreerd (commando ‘deno info’) en een utiliteit voor het formatteren van code (deno fmt).
- Voor ontwikkelaars van applicaties een set standaardmodules die aanvullende audit en compatibiliteitscontroles hebben doorstaan;
- Alle applicatiescripts kunnen worden samengevoegd tot één JavaScript-bestand.
Verschillen met Node.js:
- Deno maakt geen gebruik van het npm-pakketbeheer
en is niet gebonden aan repository's; modules worden geadresseerd via URL of bestandslocatie, en de modules kunnen op elke site worden gehost; - In Deno wordt geen 'package.json' gebruikt om modules te definiëren;
- Verschil in API; alle asynchrone acties in Deno retourneren een promise;
- Deno vereist expliciete definitie van alle benodigde machtigingen voor bestanden, netwerken en omgevingsvariabelen;
- Alle fouten zonder handlers leiden tot een beëindiging van de applicatie-uitvoering;
- Deno maakt gebruik van het ECMAScript-modulesysteem en ondersteunt geen require().
Bron: opennet.ru
