Nakon dvije godine razvoja prvo značajno izdanje , platforme za odvojeno izvršavanje aplikacija na jezicima JavaScript i TypeScript, koja se može koristiti za izradu poslužiteljskih rukovalaca. Platformu razvija Ryan Dahl (), tvorac Node.js. Kao i u Node.js, Deno koristi JavaScript engine , koji se također primjenjuje u preglednicima temeljenim na Chromiumu. Međutim, Deno nije odvojak od Node.js, već predstavlja potpuno novi projekt stvoren od nule. Kod projekta pod MIT licencom. Izgradnje za Linux, Windows i macOS.
Značajan broj verzije povezan je sa stabilizacijom API-ja u imenskom prostoru Deno, koji odgovaraju za interakciju aplikacija s OS-om. Programski interfejsi koji još , po defaultu su skrivene i dostupne samo kada se pokreću u režimu "—unstable". Kako se nove verzije formiraju, slični API-ja postupno će se prebacivati u kategoriju stabilnih. API u globalnom imenskom prostoru, koji uključuje funkcije poput setTimeout() i fetch(), koliko je to moguće, približava se API-ju običnih web pregledača i razvija se u skladu s web standardima za preglednike. Pruženi Rust API, koji se izravno koristi u kodu platforme, kao i interfejs za razvoj dodataka za Deno runtime, još nisu stabilizirani i nastavljaju se razvijati.
Ključni motivi za stvaranje nove JavaScript platforme bili su želja da se isprave konceptualne greške, u arhitekturi Node.js i pružiti korisnicima sigurnije okruženje. Za povećanje sigurnosti omotač oko V8 enginea napisan je na jeziku Rust, što omogućava izbjegavanje mnogih ranjivosti koje nastaju iz niskonivovnog rada s memorijom, kao što su pristupanje memorijskom prostoru nakon što je oslobođen, dereferenciranje null pokazivača i odlasci izvan granica bafera. Za obradu zahtjeva u neblokirajućem režimu koristi se platforma , također napisana na jeziku Rust. Tokio omogućava izradu visoko performansnih aplikacija temeljenih na arhitekturi orijentiranoj na događaje (Event-driven), koje podržavaju višedretvenost i obradu mrežnih zahtjeva u asinkronom režimu.
Glavne Deno:
- Usmjerenost na sigurnost u zadanoj konfiguraciji. Pristupi datotekama, mrežne mogućnosti i pristup varijablama okruženja po zadanom su blokirani i zahtijevaju izričito uključivanje. Aplikacije po zadanoj postavci pokreću se u izoliranim sandbox okruženjima i ne mogu pristupiti sistemskim mogućnostima bez odobrenja;
- Ugrađena podrška za TypeScript uz JavaScript. Za provjeru tipova i generiranje JavaScripta koristi se ugrađeni TypeScript kompajler, što rezultira smanjenjem performansi u usporedbi s analizom JavaScripta u V8. U budućnosti planira se razviti vlastita implementacija sustava provjere tipova za TypeScript, koja će značajno povećati učinkovitost obrade TypeScripta;
- Runtime dolazi u obliku jedne samodostatne izvršne datoteke ('deno'). Za pokretanje aplikacija koristeći Deno dovoljno je za svoju platformu jedan izvršni datoteka, veličine oko 20 MB, bez vanjskih ovisnosti i koja ne zahtijeva posebnu instalaciju u sustavu. Deno, međutim, nije monolitna aplikacija, već predstavlja kolekciju crate paketa na Rustu (, ), koje se mogu koristiti pojedinačno;
- Prilikom pokretanja programa, kao i za učitavanje modula, mogu se koristiti adrese putem URL-a. Na primjer, za pokretanje programa welcome.js može se koristiti naredba 'deno https://deno.land/std/examples/welcome.js'. Kod s vanjskih resursa učitava se i kešira na lokalnom sustavu, ali se nikada automatski ne ažurira (za ažuriranje je potrebno izričito pokrenuti aplikaciju s zastavicom '--reload');
- Učinkovita obrada mrešnih zahtjeva putem HTTP-a, platforma je osmišljena za stvaranje visoko performantnih mrežnih aplikacija;
- Mogućnost izrade univerzalnih web aplikacija koje se mogu izvesti kako u Denu, tako i u običnom web pregledniku;
- Prisutnost , čija upotreba ne zahtijeva vezivanje za vanjske ovisnosti. Moduli iz standardne kolekcije prošli su dodatnu reviziju i provjeru kompatibilnosti;
- Osim runtime, Deno također djeluje kao upravitelj paketa i omogućava korištenje modula putem URL-a unutar koda. Na primjer, za učitavanje modula možete u kodu navesti „import * as log from «https://deno.land/std/log/mod.ts». Datoteke učitane s vanjskih poslužitelja putem URL-a se keširaju. Verzioniranje modula određuje se navođenjem brojeva verzija unutar URL-a, na primjer, «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- U sustav je integriran alat za inspekciju ovisnosti (komanda „deno info”) i alat za formatiranje koda (deno fmt);
- Sve skripte aplikacije mogu se spojiti u jednu JavaScript datoteku.
Razlike u odnosu na Node.js:
- Deno ne koristi upravitelj paketa npm
i ne oslanja se na repozitorije, adrese modula određuju se putem URL-a ili preko datotečnih putanja, a moduli se mogu nalaziti na bilo kojoj stranici; - U Denu se ne koristi „package.json” za definiranje modula;
- Razlika u API-ju, sve asinkrone radnje u Denu vraćaju promise;
- Deno zahtijeva eksplicitno definiranje svih potrebnih ovlasti za datoteke, mrežu i varijable okruženja;
- Sve pogreške bez handlera dovode do prekida izvršavanja aplikacije;
- U Denu se koristi ECMAScript sustav modula i ne podržava require();
- Ugrađeni HTTP poslužitelj Deno napisan je u TypeScript-u i radi iznad nativnih TCP soketa, dok je HTTP poslužitelj Node.js napisan u C-u i pruža veze za JavaScript. Razvijači Deno-a usredotočili su se na optimizaciju cijelog sloja TCP soketa i pružanje općenitog sučelja. HTTP poslužitelj Deno osigurava manju propusnost, ali jamči predvidljive niske kašnjenja. Na primjer, u testu, jednostavna aplikacija temeljena na Deno HTTP poslužitelju uspjela je obraditi 25 tisuća zahtjeva u sekundi s maksimalnim kašnjenjem od 1.3 milisekunde. U Node.js, slična aplikacija obradila je 34 tisuće zahtjeva u sekundi, ali su kašnjenja varirala od 2 do 300 milisekundi.
- Deno nije kompatibilan s paketima za Node.js (NPM), ali se posebno razvija za kompatibilnost sa standardnom bibliotekom Node.js, kako bi s vremenom Deno mogao pokretati sve više aplikacija napisanih za Node.js.
Izvor: opennet.ru
