Két év fejlesztés után első jelentős kiadás , egy platform az alkalmazások elkülönített végrehajtásához JavaScript és TypeScript nyelveken, amely használható szerveroldali feldolgozók létrehozására. A platform fejlesztője Ryan Dahl (), a Node.js létrehozója. A Node.js-hez hasonlóan a Deno is JavaScript motorral működik, , amelyet szintén használnak a Chromium-alapú böngészőkben. A Deno azonban nem a Node.js ágazata, hanem egy teljesen új projekt, amelyet a semmiből hoztak létre. A projekt kódja MIT licenc alatt áll. A kiadások Linux, Windows és macOS számára.
A jelentős verziószám az API stabilizálásával kapcsolatos a Deno névtérben, amely az alkalmazások és az operációs rendszer közötti interakcióért felelős. Az API-k, amelyek még , alapértelmezés szerint rejtve vannak, és csak "—unstable" módban érhetők el. Az új verziók fokozatosan stabil állapotba kerülnek. A globális névtérben elérhető API, amely olyan általános funkciókat tartalmaz, mint a setTimeout() és fetch(), lehetőségei szerint közel áll a szokásos webböngészők API-jához, és a böngészők Web-szabványai szerint fejlődik. A Rust API-k, amelyeket közvetlenül a platform kódjában alkalmaznak, valamint a Deno runtime-hoz fejlesztett plugin interfész, jelenleg nem stabilizáltak és folyamatosan fejlődnek.
A új JavaScript platform létrehozásának kulcsfontosságú indokai közé tartozik a Node.js architektúrájában elkövetett koncepcionális hibák kiküszöbölése, előfordultak, és biztonságosabb környezet biztosítása a felhasználók számára. A biztonság növelése érdekében a V8 motor körüli kötés Rust nyelven készült, amely elkerüli a memória alacsony szintű kezelése miatt fellépő számos sebezhetőséget, mint például a memória felszabadítása utáni hivatkozás, a null pointer dereferálása és a pufferszámlálások túllépése. A nem blokkoló kérésfeldolgozásra a Rust nyelven írt , amely lehetővé teszi az eseményalapú architektúrára épülő, magas teljesítményű alkalmazások létrehozását, amelyek támogatják a több szálas feldolgozást és az aszinkron hálózati kéréskezelést.
Fő Deno:
- Az alapértelmezett konfiguráció biztonságorientált. A fájlokkal való kapcsolatok, a hálózati lehetőségek és az alapértelmezett környezeti változókhoz való hozzáférés blokkolva van, és kifejezett engedélyezést igényel. Az alapértelmezett alkalmazások izolált sandbox környezetben futnak, és nem férhetnek hozzá a rendszer funkcióihoz kifejezett jogosultságok biztosítása nélkül;
- A JavaScript mellett beépített TypeScript támogatás. A típusok ellenőrzésére és JavaScript generálására a TypeScript beépített fordítóját használja, ami teljesítménycsökkenést eredményez a JavaScript V8-as elemzésével szemben. A jövőben egy saját TypeScript típusellenőrző rendszer tervezése van, amely jelentősen javítja a TypeScript feldolgozási teljesítményét;
- A runtime egy önálló végrehajtható fájl formájában érkezik („deno”). Az alkalmazások Deno segítségével történő indításához elegendő a platformján egy végrehajtható fájlt, körülbelül 20 MB méretben, külső függőségek nélkül, és nem igényel különösebb telepítést a rendszerbe. Megjegyzendő, hogy a deno nem egy monolitikus alkalmazás, hanem Rust on crate-csomagok gyűjteménye (, ), amelyeket külön-külön is használhatunk;
- A program indításához, valamint a modulok betöltéséhez URL-alapú címzést lehet használni. Például a welcome.js program elindításához a következő parancsot használhatja: „deno https://deno.land/std/examples/welcome.js”. A külső forrásokból származó kódot letöltik és a helyi rendszeren gyorsítótárazva tárolják, de soha nem frissül automatikusan (frissítéshez kifejezetten el kell indítani az alkalmazást a „—reload” kapcsolóval);
- Hatékony HTTP hálózati kérések kezelése az alkalmazásokban, a platform a nagy teljesítményű hálózati alkalmazások készítésére lett tervezve;
- Lehetőség univerzális webalkalmazások létrehozására, amelyek Deno-ban és a hagyományos webböngészőben is futtathatók;
- A , amelyek felhasználása nem igényel kapcsolódást külső függőségekhez. A standard gyűjtemény moduljai további ellenőrzésen és kompatibilitásellenőrzésen estek át;
- A Deno runtime platform also acts as a package manager and allows referencing modules by URL within the code. For example, to load a module you can specify in the code 'import * as log from "https://deno.land/std/log/mod.ts"'. Files downloaded from external servers via URL are cached. Version binding of modules is determined by specifying version numbers within the URL, for instance, "https://unpkg.com/liltest@0.0.5/dist/liltest.js";
- The integrated system includes a dependency inspection tool (the 'deno info' command) and a code formatting utility (deno fmt);
- All application scripts can be combined into a single JavaScript file.
Differences from Node.js:
- Deno does not use the npm package manager
and does not rely on repositories; module addressing is done via URL or file paths, and modules can be hosted on any site; - Deno does not use 'package.json' to define modules;
- Different API: all asynchronous actions in Deno return a promise;
- Deno requires explicit definition of all necessary permissions for files, network, and environment variables;
- All unhandled errors lead to the termination of the application;
- Deno implements the ECMAScript module system and does not support require();
- The built-in HTTP server in Deno is written in TypeScript and operates over native TCP sockets, while the Node.js HTTP server is written in C and provides bindings for JavaScript. Deno developers focused on optimizing the entire layer of TCP sockets and providing a more general interface. The Deno HTTP server ensures lower throughput but guarantees predictable low latency. For example, in a test, a simple application based on the Deno HTTP server was able to handle 25,000 requests per second with a maximum latency of 1.3 milliseconds. In Node.js, a similar application handled 34,000 requests per second, but latencies ranged from 2 to 300 milliseconds.
- Deno is not compatible with packages for Node.js (NPM), but is developing separately for compatibility with the Node.js standard library, allowing more applications written for Node.js to run on Deno as it evolves.
Forrás: opennet.ru
