Avalikustati Deno 2.0 versioon, mis on mõeldud serveri rakenduste eraldiseisvaks käivitamiseks JavaScripti ja TypeScripti keeltes, kasutades V8 mootori, mida rakendavad Chromiumi põhised brauserid. Deno projekti arendab Ryan Dahl, Node.js looja, eesmärgiga pakkuda turvalisemat keskkonda ja kõrvaldada Node.js arhitektuuris tehtud kontseptuaalsed vead. Turvalisuse tõstmiseks on V8 mootori ümber kirjutatud Rust keeles, ning päringute töötlemiseks mittesünkroonsetes režiimides kasutatakse Tokio platvormi. Projekti kood on litsentseeritud MIT litsentsi alla. Koostatud versioonid on saadaval Linuxile, Windowsile ja macOS-ile.
Uue haru ettevalmistamisel pöörati peamist tähelepanu ühilduvusele vana JavaScripti infrastruktuuriga ning toetatud JavaScripti projektide spektri laiendamisele, tagades samal ajal turvalisuse. Muudatused hõlmavad:
- Tagatud on tagurpidi ühilduvus Node.js ja npm-iga, võimaldades käivitada muudetud rakendusi, mis on loodud Node.js-ile. Node.js-i tugi võimaldab samuti olemasolevate projektide järk-järgulist üleviimist Deno kasutusele või sõltuvuste sidumist Deno projektidesse NPM-i kaudu, kasutades pakettide importimisel spetsifikaatorit „npm:” failis deno.json.
- Lisatud on sisseehitatud tugi failile package.json ja node_modules kataloogile, mida kasutatakse Node.js-is.
- Tagatud on privaatsete NPM-repositorite tugi, mis on määratletud failide „.npmrc” kaudu.
- Lisatud on tugi populaarsetele JavaScripti raamistikele, nagu Next.js, Astro, Remix, Angular, SvelteKit ja QwikCity.
- Lisatud on npm-i töötamise ruumide (workspace) ja monorepositoryde (monorepo) tugi, mille puhul sõltuvusi töödeldakse eraldi.
- Lisatud on uut tüüpi paketihalduskomandid: „deno install” sõltuvuste installimiseks, „deno add” paketide lisamiseks package.json või deno.json, „deno remove” paketide eemaldamiseks. Täheldatakse, et „deno install” töötab umbes 15% kiiremini kui npm, kui pakk on puudu vahemälust, ja 90% kiiremini, kui pakk on vahemälus (toetatakse nii node_modules'e kui ka kohalikku globaalset vahemälu).
- Stabiilne standardteek.
- Pikendatud tugitsükkel (LTS) on tagatud.
- Esitletud on JSR — JavaScripti ja TypeScripti raamatukogude hoidla, mida saab kasutada erinevates JavaScripti käitustehnoloogiates.
- Käsus «deno fmt» on lisandunud sisu vormindamine HTML, CSS ja YAML formaatides.
- Käsus «deno lint» on lisatud Node.js spetsiifilised reeglid ja parandusettepanekud.
- Käsus «deno test» on realiseeritud testide käitamise võimalus, mida on loodud kasutades node:test.
- Käsus «deno task» on rakendatud skriptide käitamise tugi package.json kaudu.
- Käsus «deno compile» on lisandunud koodi allkirjastamise võimalus.
- Käsus «deno serve» on realiseeritud HTTP-serveri toimingute paralleelne käitamine, kasutades mitut CPU tuuma.
- Käsus «deno coverage» on lisandunud aruannete salvestamise tugi HTML formaadis.
- Tõhususe optimeerimine on läbi viidud.

Deno peamised omadused:
- Turvalisuse orientatsioon vaikeseadetes. Failide juurde pääs, võrguvõimalused ja keskkonnamuutujate ale on vaikimisi blokeeritud ning vajavad selgelt lubamist. Vaikesed rakendused käivituvad isoleeritud liivakasti keskkondades ega pääse süsteemi funktsioonidele ligi ilma selgete volituste andmiseta;
- Sisseehitatud TypeScripti keele tugi JavaScripti kõrval. Tüüpide kontrollimiseks ja JavaScripti genereerimiseks kasutatakse standardset TypeScripti kompilaatorit, mis põhjustab jõudluse languse võrreldes JavaScripti käsitsi analüüsimisega V8-s;
- Runtime on saadaval ühes iseseisvas täideviimise failis („deno“). Deno abil rakenduste käivitamiseks piisab, kui laadida alla oma platvormile üks täideviimise fail, mille suurus on umbes 40 MB ja mis ei sisalda väliseid sõltuvusi ning ei vaja mingit erilist installimist süsteemi. Samuti ei ole deno monoliitne rakendus, vaid see koosneb Rustis (deno_core, rusty_v8) arendatud crate-paketid, mida saab kasutada eraldi.
- Programmi käivitamisel ning moodulite laadimisel saab kasutada URL-ide kaudu aadresse. Näiteks, et käivitada programmi welcome.js, võib kasutada käsku «deno https://deno.land/std/examples/welcome.js». Välisest allikast saadud kood laaditakse ja vahemälustatakse kohalikus süsteemis, kuid ei uuendata automaatselt (uuendamiseks on vajalik rakendus selgelt käivitada lipuga «—reload»);
- Tõhus HTTP-päringute töötlemine rakendustes, platvorm on suunatud kõrge jõudlusega võrgu rakenduste loomisele;
- Võimalus luua universaalseid veebi rakendusi, mis saavad töötada nii Deno-s kui ka tavapärases veebi brauseris;
- Standardsete moodulite olemasolu, mille kasutamine ei nõua väliste sõltuvuste sidumist. Standardkollektsiooni moodulid on läbinud täiendava auditi ja ühilduvuse kontrolli;
- Lisaks runtime'ile täidab Deno platvorm ka paketihalduri rolli ja võimaldab koodis moodulite juurde pääseda URL-ide kaudu. Näiteks saab mooduli laadimiseks koodis märkida "import * as log from 'https://deno.land/std/log/mod.ts'". Väliste URL-ide kaudu laaditud failid serverite vahemälustatakse. Moodulite versioonide sidumine toimub URL-is versiooninumbrite näidete kaudu, näiteks 'https://unpkg.com/liltest@0.0.5/dist/liltest.js';
- Orientatsioon veebistandardite kasutuselevõtuks, Promise, fetch ja ECMAScript moodulite tugi.
- Ühilduvus paketidega, mis on salvestatud NPM-repositooriumis ja loodud Node.js platvormile.
- Integreeritud süsteem sõltuvuste inspektsiooniks (käsk 'deno info') ja koodi vormindamise utiliit (deno fmt);
- Kõik rakenduse skriptid saavad olla ühendatud ühte JavaScripti faili.
Allikas: opennet.ru

