Po dveh letih razvoja prvi značajan izdanak , platforme za izolirano izvršavanje aplikacija napisane u JavaScript i TypeScript, koja se može koristiti za izradu server-side handlera. Platformu razvija Ryan Dahl (), stvoritelj Node.js. Kao i u Node.js, Deno koristi JavaScript motor , koji se također koristi u Chromium-baziranim preglednicima. Međutim, Deno nije ogranak Node.js-a, već predstavlja potpuno novi projekt stvoren od nule. Kod projekta pod MIT licencom. Izgradnje za Linux, Windows in macOS.
Značajan broj verzije odnosi se na stabilizaciju API-ja u imenskom prostoru Deno, koji odgovaraju za interakciju aplikacija s OS-om. Softverski interfejsi koji još uvijek , po defaultu su skriveni i dostupni samo kada se pokreću u režimu "—unstable". Kako se formiraju nove verzije, slični API-ji će postupno prelaziti u stabilnu klasifikaciju. API u globalnom imenskom prostoru, koji uključuje funkcije kao što su setTimeout() i fetch(), približava se API-ju običnih web preglednika i razvija se u skladu s web standardima za preglednike. Dostupni Rust API je direktno korišten u kodu platforme, kao i sučelje za razvoj dodataka za Deno runtime, i dalje nije stabilizirano i nastavlja 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. Radi povećanja sigurnosti, obavijest oko V8 motora napisana je na jeziku Rust, koja omogućava izbjegavanje mnogih ranjivosti koje proizlaze iz niskonivoa rada s memorijom, kao što su pristup memorijskom prostoru nakon njegovog oslobađanja, dereferenciranje null pokazivača i izlazak izvan granica bafera. Za obradu zahtjeva u neblokirajućem režimu koristi se platforma , koja je također napisana na jeziku Rust. Tokio omogućava izradu visoko performantnih aplikacija na temelju arhitekture orijentirane na događaje (Event-driven), koja podržava višenitnost i obradu mrežnih zahtjeva u asinkronom režimu.
Glavne Deno:
- Usmerjenost na varnost v privzeti konfiguraciji. Dostopi do datotek, mrežne možnosti in dostop do spremenljivk okolja so privzeto blokirani in zahtevajo izrecno omogočitev. Aplikacije se privzeto zaženejo v izoliranih sandbox okoljih in ne morejo dostopati do sistemskih možnosti brez izrecnega dovoljenja.
- Vgrajena podpora za jezik TypeScript poleg JavaScripta. Za preverjanje tipov in generiranje JavaScripta se uporablja standardni TypeScript prevajalnik, kar povzroča upad uspešnosti v primerjavi z razvojem JavaScripta v V8. V prihodnosti je načrtovana priprava lastne implementacije sistema za preverjanje tipov TypeScript, ki bo omogočila znatno povečanje uspešnosti obdelave TypeScript;
- Runtime se dobavlja v obliki enega samostojnega izvršilnega datoteka („deno“). Za zagon aplikacij s pomočjo Deno je dovolj, da imate za svojo platformo en izvršilni datotek, velikosti približno 20 MB, brez zunanjih odvisnosti in brez potrebe po posebni namestitvi v sistem. Deno ni monolitna aplikacija, temveč predstavlja zbirko crate-paketov v Rustu (, ), ki jih je mogoče uporabljati ločeno;
- Pri zagonu programa in za nalaganje modulov je mogoče uporabiti naslovitev prek URL. Na primer, za zagon programa welcome.js lahko uporabite ukaz 'deno https://deno.land/std/examples/welcome.js'. Koda iz zunanjih virov se naloži in predpomni na lokalnem sistemu, nikoli pa se samodejno ne posodablja (za posodobitev je treba izrecno zagnati aplikacijo z zastavico '--reload').
- Učinkovita obdelava omrežnih zahtevkov prek HTTP, platforma je zasnovana za ustvarjanje visoko zmogljivih omrežnih aplikacij.
- Možnost ustvarjanja univerzalnih spletnih aplikacij, ki lahko delujejo tako v Deno kot v običajnem spletnih brskalnikih.
- Postojanje , katerih uporaba ne zahteva vezave na zunanje odvisnosti. Moduli iz standardne zbirke so bili dodatno pregledani in preverjeni za združljivost;
- Poleg runtime-a Deno platforma opravlja tudi vlogo upravljalnika paketov in omogoča dostop do modulov v kodi preko URL. Na primer, za prenos modula lahko v kodi navedete „import * as log from „https://deno.land/std/log/mod.ts“. Datoteke, prenesene z zunanjih strežnikov po URL, so predpomnjene. Vezava na različice modulov se določa s številkami različic v URL, na primer „https://unpkg.com/liltest@0.0.5/dist/liltest.js“;
- Vključuje sistem za pregled odvisnosti (ukaz „deno info“) in orodje za oblikovanje kode (deno fmt);
- Vsi skripti aplikacije so lahko združeni v eno datoteko JavaScript.
Razlike v primerjavi z Node.js:
- Deno ne uporablja upravljalnika paketov npm
in se ne veže na repozitorije, naslovi modulov so določeni preko URL ali po datotečni poti, moduli pa so lahko gostovani na katerikoli spletni strani; - V Deno se ne uporablja „package.json“ za opredelitev modulov;
- Razlike v API-ju, vse asinhrone akcije v Deno vračajo promise;
- Deno zahteva jasno opredelitev vseh potrebnih pooblastil za datoteke, omrežje in okoljske spremenljivke;
- Vse napake brez obravnavalcev povzročijo prekinitev izvajanja aplikacije;
- V Deno se uporablja sistem modulov ECMAScript, podporo za require() pa ni.
- Vgrajeni HTTP strežnik Deno je napisan v TypeScriptu in deluje na vrhu nativnih TCP soketov, medtem ko je HTTP strežnik Node.js napisan v C-ju in ponuja vezave za JavaScript. Razvijalci Deno so se osredotočili na optimizacijo celotnega sloja TCP soketov in zagotavljanje bolj splošnega vmesnika. HTTP strežnik Deno zagotavlja manjšo propustnost, a zagotavlja predvidljive nizke zakasnitve. Na primer, v testu je enostavna aplikacija, ki temelji na Deno HTTP strežniku, uspela obdelati 25.000 zahtevkov na sekundo z maksimalno zakasnitvijo 1,3 milisekunde. V Node.js je podobna aplikacija obdelala 34.000 zahtevkov na sekundo, vendar so se zakasnitve gibale med 2 in 300 milisekundami.
- Deno ni združljiv s paketi za Node.js (NPM), temveč se razvija ločeno. za združljivost s standardno knjižnico Node.js, kar pomeni, da bodo z njenim razvojem v Deno lahko zagnali vedno več aplikacij, napisanih za Node.js.
Izvor: opennet.ru
