Pēc divu gadu izstrādes pirmais nozīmīgais izlaidums , platforma izolētu lietojumprogrammu izpildei JavaScript un TypeScript valodās, kas var tikt izmantota servera darbību rīku izstrādē. Platformu attīsta Raians Dāl (), Node.js radītājs. Tāpat kā Node.js, Deno izmanto JavaScript dzinēju , kas tiek izmantots arī Chromium bāzes pārlūkprogrammās. Tomēr Deno nav Node.js atzarojums, bet ir izveidots no jauna, pilnīgi jauns projekts. Projekta kods ir MIT licenci. Izstrādājumi Linux, Windows un macOS.
Nozīmīgais versijas numurs ir saistīts ar API stabilizēšanu Deno nosaukumu telpā, kas atbild par lietojumprogrammu mijiedarbību ar operētājsistēmu. Programmatūras saskarnes, kas pagaidām , pēc noklusējuma ir slēpti un pieejami tikai palaižot režīmā «—unstable». Pašreizējā versiju izstrāde pakāpeniski pārvērš šādas API stabilās. API globālajā nosaukumu telpā, kurā iekļautas tādas kopīgas funkcijas kā setTimeout() un fetch(), pēc iespējas tiek tuvās pie parasto web pārlūkprogrammu API un tiek attīstītas saskaņā ar web standarta prasībām pārlūkiem. Nodrošinātie Rust API, kas tiek izmantoti tieši platformas kodā, kā arī interfeiss spraudņu izstrādei Deno runtime, vēl nav stabilizēti un turpina attīstīties.
Galvenie motīvi jaunās JavaScript platformas izveidei bija vēlme novērst konceptuālās kļūdas, Node.js arhitektūrā un nodrošināt lietotājiem drošāku vidi. Lai palielinātu drošību, aploksne ap V8 dzinēju ir rakstīta Rust valodā, kas ļauj izvairīties no daudzām ievainojamībām, kas rodas, strādājot ar zemu līmeni atmiņā, piemēram, piekļuve atmiņas apgabaliem pēc to atbrīvošanas, nulles norāžu dereferencēšana un pārsniegšana buferī. Nebloķējošo pieprasījumu apstrādei tiek izmantota platforma , kas arī rakstīta Rust valodā. Tokio ļauj izveidot augstas veiktspējas lietojumprogrammas, kas balstītas uz notikumu virzītu arhitektūru (Event-driven), nodrošinot daudzu pavedienu atbalstu un asinkronu tīkla pieprasījumu apstrādi.
īpašības Deno:
- Piemērošana drošībai pēc noklusējuma konfigurācijā. Piekļuve failiem, tīkla iespējām un vides mainīgajiem pēc noklusējuma ir bloķēta un prasa izteiktu apstiprinājumu. Pieteikumi pēc noklusējuma tiek palaisti izolētos sandbox vidēs un nevar piekļūt sistēmas iespējām bez izteikta pilnvarojuma;
- Iebūvēta TypeScript valodas atbalsts papildus JavaScript. Tipa pārbaudei un JavaScript ģenerēšanai tiek izmantots TypeScript kompilators, kas samazina veiktspēju salīdzinājumā ar JavaScript analīzi V8. Nākotnē plānots izstrādāt savu TypeScript tipu pārbaudes sistēmu, kas ļaus ievērojami uzlabot TypeScript apstrādes veiktspēju;
- Runtime tiek piegādāts vienā pašpietiekamā izpildfailā («deno»). Lai palaistu lietojumprogrammas, izmantojot Deno, pietiek ar to, lai savai platformai kā vienu izpildes failu, kura izmērs ir apmēram 20 MB, bez ārējām atkarībām un neprasa kādu īpašu instalāciju sistēmā. Tādējādi deno nav monolīts lietojums, bet gan kolekcija crate paketēm Rust (, ), kuras var izmantot atsevišķi;
- Programmas palaišanai, kā arī moduļu lejupielādei var izmantot adresēšanu caur URL. Piemēram, lai palaistu programmu welcome.js, var izmantot komandu «deno https://deno.land/std/examples/welcome.js». Kods no ārējiem avotiem tiek lejupielādēts un kešots vietējā sistēmā, taču nekad automātiski netiek atjaunināts (lai atjauninātu, ir skaidri jāpalaid aplikācija ar frāzi «—reload»);
- Efektīva HTTP tīkla pieprasījumu apstrāde, platforma ir paredzēta, lai izveidotu augstas veiktspējas tīkla lietojumprogrammas;
- Iespēja izveidot vispārīgas tīmekļa lietojumprogrammas, kas var darboties gan Deno, gan parastajā tīmekļa pārlūkprogrammā;
- Nodrošina , kuru izmantošana neprasa saistību ar ārējām atkarībām. Standarta kolekcijas moduļi ir izgājuši papildu auditu un saderības pārbaudi;
- Papildus runtime Deno platforma arī pilda pakotņu pārvaldnieka lomu un ļauj iekšējā kodā piekļūt moduļiem pēc URL. Piemēram, moduli var iekļaut kodā, norādot «import * as log from «https://deno.land/std/log/mod.ts». Faili, kas tiek lejupielādēti no ārējiem serveriem pēc URL, tiek kešoti. Versiju sasaistes tiek noteikta, norādot versijas numurus URL iekšienē, piemēram, «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- Iekļauta atkarību inspekcijas sistēma (komanda «deno info») un kodu formatēšanas utilīta (deno fmt);
- Visus aplikācijas skriptus var apvienot vienā JavaScript failā.
Atšķirības no Node.js:
- Deno neizmanto npm pakotņu pārvaldnieku
un nepiesaistās repozitorijiem, moduļu adresācija tiek veikta caur URL vai faila ceļu, un paši moduļi var atrasties jebkurā vietnē; - Deno neizmanto «package.json» moduļu noteikšanai;
- API atšķirības, visas asinhronās darbības Deno atgriež promise;
- Deno prasa skaidri definēt visas nepieciešamās atļaujas failiem, tīklam un vides mainīgajiem;
- Visas kļūdas, kuru dēļ nav apstrādātāju, noved pie lietojumprogrammas izpildes pārtraukšanas;
- Deno izmanto ECMAScript moduļu sistēmu un neatbalsta require();
- Iebūvētais HTTP serveris Deno ir rakstīts TypeScript un darbojas uz nativiem TCP ligzdām, bet HTTP serveris Node.js ir rakstīts C un nodrošina sasaistes ar JavaScript. Deno izstrādātāji ir koncentrējušies uz visa TCP ligzdu slāņa optimizāciju un nodrošināšanu vispārējam saskarnes izmantojumam. Deno HTTP serveris nodrošina zemāku caurlaidspēju, bet garantē prognozējami zemas kavēšanās. Piemēram, testā vienkārša lietotne, kas balstīta uz Deno HTTP servera, spēja apstrādāt 25 tūkstošus pieprasījumu sekundē ar maksimālo kavēšanos 1.3 milisekundes. Node.js līdzīga lietotne apstrādāja 34 tūkstošus pieprasījumu sekundē, taču kavēšanās svārstījās no 2 līdz 300 milisekundēm.
- Deno nav saderīgs ar Node.js (NPM) pakotnēm, bet attīstās atsevišķi. lai būtu saderīgs ar Node.js standarta bibliotēku, un, līdz ar to Deno varēs palaist aizvien vairāk lietotņu, kas rakstītas Node.js.
Avots: opennet.lv
