A fost publicată versiunea 2.0 a platformei Deno, destinată executării izolate a aplicațiilor server pe limbajele JavaScript și TypeScript, folosind motorul V8, utilizat în browserele bazate pe Chromium. Proiectul Deno este dezvoltat de Ryan Dahl, creatorul Node.js, cu scopul de a oferi un mediu mai sigur și de a elimina erorile conceptuale prezente în arhitectura Node.js. Pentru a spori securitatea, înfășurarea în jurul motorului V8 a fost scrisă în limbajul Rust, iar pentru procesarea cererilor în mod neblocat este utilizată platforma Tokio. Codul proiectului este distribuit sub licența MIT. Versiunile sunt disponibile pentru Linux, Windows și macOS.
În pregătirea unei noi versiuni, s-a pus accent pe compatibilitatea cu vechea infrastructură JavaScript și extinderea spectrului proiectelor JavaScript acceptate fără a compromite securitatea. Printre modificări se numără:
- A fost implementată compatibilitatea înapoi cu Node.js și npm, permițând rularea aplicațiilor nemodificate, create pentru Node.js. Suportul pentru Node.js permite, de asemenea, migrarea treptată a proiectelor existente de la Node.js la Deno sau integrarea dependențelor din NPM în proiectele Deno prin specificarea prefixului „npm:” la importul pachetelor în deno.json.
- A fost adăugat suport încorporat pentru fișierul package.json și directorul cu module node_modules, folosite în Node.js.
- S-a asigurat suport pentru repozitorii NPM private, definite prin fișierele „.npmrc”.
- A fost adăugat suport pentru cadre populare JavaScript, cum ar fi Next.js, Astro, Remix, Angular, SvelteKit și QwikCity.
- A fost adăugat suport pentru spațiile de lucru npm (workspace) și mono-repozitorii (monorepo) cu gestionarea separată a dependențelor.
- Au fost adăugate noi comenzi pentru gestionarea pachetelor: „deno install” pentru instalarea dependențelor, „deno add” pentru adăugarea pachetelor în package.json sau deno.json, „deno remove” pentru eliminarea pachetelor. Se observă că „deno install” funcționează cu aproximativ 15% mai repede decât npm în absența pachetelor în cache și cu 90% mai repede când pachetul este în cache (suportă atât node_modules, cât și propriul cache global).
- Biblioteca standard a fost stabilizată.
- S-a asigurat un ciclu de sprijin pe termen lung (LTS).
- A fost introdus JSR - un repozitoriu cu biblioteci JavaScript și TypeScript care pot fi utilizate în diverse Runtime-uri JavaScript.
- În echipa „deno fmt” a fost adăugată posibilitatea de formatare a conținutului în formate HTML, CSS și YAML.
- Comanda „deno lint” a primit suport pentru reguli și corecții specifice Node.js.
- În comanda „deno test” a fost implementată posibilitatea de a rula teste create folosind node:test.
- În comanda „deno task” a fost implementat suportul pentru rularea scripturilor prin package.json.
- În comanda „deno compile” a fost adăugată posibilitatea de a semna codul cu semnătură digitală.
- În comanda „deno serve” s-a realizat paralelizarea operațiunilor serverelor HTTP folosind mai multe nuclee CPU.
- În comanda „deno coverage” a apărut suport pentru salvarea rapoartelor în format HTML.
- A fost efectuată optimizarea performanței.

Caracteristicile principale ale Deno:
- Orientare asupra securității în configurația implicită. Accesările la fișiere, capacitățile de rețea și accesul la variabilele de mediu sunt blocate în mod implicit și necesită activare explicită. Aplicațiile sunt lansate în mod implicit în medii de izolare (sandbox) și nu pot accesa capacitățile sistemului fără a se oferi permisiuni explicite;
- Suport încorporat pentru limbajul TypeScript pe lângă JavaScript. Verificarea tipurilor și generarea JavaScript se face cu ajutorul compilatorului TypeScript nativ, ceea ce duce la o scădere a performanței în comparație cu analiza JavaScript în V8;
- Runtime-ul este livrat sub forma unui singur fișier executabil autonom („deno”). Pentru a rula aplicații folosind Deno, este suficient să descărcați un fișier executabil pentru platforma dvs., cu dimensiunea de aproximativ 40 MB, fără dependențe externe și fără a necesita vreo instalare specială în sistem. Deno nu este o aplicație monolitică, ci o colecție de pachete crate pe Rust (deno_core, rusty_v8) care pot fi folosite separat;
- Pentru a lansa programe, precum și pentru a încărca module, se poate utiliza adresarea prin URL. De exemplu, pentru a lansa programul welcome.js, se poate folosi comanda „deno https://deno.land/std/examples/welcome.js”. Codul de pe resurse externe este descărcat și stocat în sistemul local, dar nu este niciodată actualizat automat (pentru actualizare este necesară rularea explicită a aplicației cu flagul „—reload”);
- Procesarea eficientă a cererilor de rețea HTTP, platforma fiind concepută pentru construirea de aplicații de rețea de înaltă performanță;
- Posibilitatea de a crea aplicații web universale care pot rula atât în Deno, cât și în browsere web obișnuite;
- Există un set standard de module, a căror utilizare nu necesită legătura cu dependențe externe. Modulele din colecția standard au fost supuse unui audit suplimentar și verificării compatibilității;
- Pe lângă runtime, platforma Deno joacă și rolul de manager de pachete și permite accesarea modulelor prin URL în interiorul codului. De exemplu, pentru a încărca un modul, se poate specifica în cod „import * as log from "https://deno.land/std/log/mod.ts". Fișierele descărcate de la URL-uri externe servere sunt stocate în cache. Legătura cu versiunile modulelor este stabilită prin specificarea numerelor de versiune în URL, de exemplu, „https://unpkg.com/liltest@0.0.5/dist/liltest.js”;
- Orientare spre utilizarea standardelor Web, suport pentru Promise, fetch și module ECMAScript.
- Compatibilitate cu pachetele găzduite în repository-ul NPM și create pentru platforma Node.js.
- În compunere este integrat un sistem de inspectare a dependențelor (comanda „deno info”) și o unealtă pentru formatat cod (deno fmt);
- Toate scripturile aplicației pot fi unite într-un singur fișier JavaScript.
Sursa: opennet.ro

