Kaks aastat arendustööd on nüüd lõppenud esimene märkimisväärne väljalase , platvorm eraldiseisvate rakenduste käitamiseks JavaScripti ja TypeScripti keeltes, mida saab kasutada serveripoolsete töötlejate loomiseks. Platvormi arendab Ryan Dahl (), Node.js looja. Nagu Node.js, kasutab ka Deno JavaScripti mootorit , mida kasutatakse ka Chromiumi põhistel brauseritel. Samas ei ole Deno Node.js haru, vaid täiesti nullist loodud uus projekt. Projekti kood on MIT litsentsi all. Kogumikud Linuxi, Windowsi ja macOS-i jaoks.
Märkimisväärne versiooninumber on seotud Deno nimede ruumis API stabiliseerimisega, mis vastutavad rakenduste suhtlemise eest operatsioonisüsteemiga. Programmi liidesed, mis veel , vaikimisi on need peidetud ja saadaval ainult "—unstable" režiimis. Uute versioonide loomise käigus liigitatakse sellised API-d järk-järgult stabiilseks. Globaalne nimiruum API, mis sisaldab selliseid tavalisi funktsioone nagu setTimeout() ja fetch(), on võimalusel võimalikult lähedane tavaliste veebibrauserite API-dele ning areneb vastavalt veebistandarditele. Rust API-d, mida kasutatakse otse platvormi koodis, samuti Deno runtime'i pluginakujundusliides, pole veel stabiliseeritud ja jätkavad arenemist.
Uue JavaScript-platvormi loomise peamised motiivid olid soov kõrvaldada kontseptuaalsed vead, Node.js arhitektuuris, ja pakkuda kasutajatele turvalisemat keskkonda. Turvalisuse suurendamiseks on V8 mootori ümber kirjutatud Rusti keeles, mis aitab vältida paljusid haavatavusi, mis tulenevad madala taseme mäluhaldusega, näiteks mälu vabastamisest pärast juurdepääsu, nullviidete de-referentseerimisest ja puhverduspiiride ületamisest. Taotluste töötlemiseks kasutatakse blokeerimata režiimi platvormi , samuti kirjutatud Rusti keeles. Tokio võimaldab luua kõrgtehnoloogilisi sündmuspõhiseid (Event-driven) rakendusi, mis toetavad mitme lõime ja asünkroonse võrgu päringute töötlemist.
Peamised Deno:
- 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;
- Tüüpilise JavaScript'i kõrval on Deno-l juurdehitatud TypeScript'i tugi. Tüüpide kontrollimiseks ja JavaScript'i genereerimise jaoks kasutatakse sisseehitatud TypeScript'i kompilaatorit, mis võib põhjustada jõudluse langust võrreldes JavaScript'i analüüsiga V8-s. Tulevikus plaanitakse arendada oma TypeScript'i tüübikontrolli süsteemi, mis tõstab jõudluse oluliselt kõrgemale.
- Käivituskeskkond tarnitakse ühes iseseisvas käivitatavas failis („deno“). Deno abil rakenduste käivitamiseks on vajalik oma platvormile ühte käivitatavat faili, mille suurus on umbes 20 MB, mis ei oma väliseid sõltuvusi ja ei nõua mingisugust erilist süsteemi installeerimist. Samas ei ole Deno monoliitne rakendus, vaid see koosneb Rustis kirjutatud crate-pakettide kogumist (, ), 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;
- Olemasolu , mille kasutamine ei vaja välistele sõltuvustele sidumist. Standardkollektsiooni moodulid on läbinud täiendava auditi ja kooskõlastamise kontrolli.
- Peale runtime'i täidab Deno platvorm ka pakihalduri rolli ning võimaldab koodis viidata moodulitele URL-ide kaudu. Näiteks, et laadida moodulit, võib koodis näidata «import * as log from 'https://deno.land/std/log/mod.ts'». Väliselt serverilt URL-ide kaudu laaditud failid vahemälestatakse. Moodulite versiooni sidumine määratakse URL-ides versiooninumbrite kaudu, näiteks «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- Integreeritud süsteem sõltuvuste inspektsiooniks (käsk 'deno info') ja koodi vormindamise utiliit (deno fmt);
- Kõik rakenduse skriptid saavad olla ühendatud üheks JavaScripti failiks.
Erinevused Node.js-st:
- Deno ei kasuta pakihaldurit npm
ja ei seondu hoidlate külge; moodulite aadressimine toimub URL-i või failitee kaudu, ja mooduleid saab paigutada igale veebisaidile; - Deno-s ei kasutata «package.json» moodulite määratlemiseks;
- API erinevused, kõik asünkroonsed toimingud Deno-s tagastavad promise.
- Deno nõuab, et kõik vajalikud õigused failide, võrgu ja keskkonnamuutujite jaoks oleksid selgelt määratletud;
- Kõik vead, mis ei ole käsitletud, viivad rakenduse täitmise lõpetamiseni;
- Deno kasutab ECMAScript'i moodulisüsteemi ja ei toeta require();
- Deno sisseehitatud HTTP-server on kirjutatud TypeScriptis ja töötab kohalike TCP-sokkide peal, samas kui Node.js HTTP-server on kirjutatud C-s ja pakub JavaScriptile seotud funktsioone. Deno arendajad keskenduvad TCP-sokete kihi optimeerimisele ja üldisema liidese pakkumisele. Deno HTTP-server tagab madalama läbilaskevõime, kuid garanteerib ettearvatavad madalad viivitused. Näiteks suutis Deno HTTP-serveri põhjal loodud lihtne rakendus töödelda 25 tuhat päringut sekundis maksimaalse viivitusega 1,3 millisekundit. Node.js samaväärne rakendus töötles 34 tuhat päringut sekundis, kuid viivitused kõikusid vahemikus 2 kuni 300 millisekundit.
- Deno ei ole ühilduv Node.js (NPM) pakettidega, vaid areneb iseseisvalt Node.js standardraamatukogu ühilduvuse nimel, mille edasiarenedes saavad Deno-s käivituda üha rohkem Node.js jaoks kirjutatud rakendusi.
Allikas: opennet.ru
