Po dvoch rokoch vývoja prvý významný vydanie , platforma pre izolované spúšťanie aplikácií napísaných v JavaScripte a TypeScripte, ktorá môže byť využitá na vytváranie serverových spracovateľov. Platformu vyvíja Ryan Dahl (), tvorca Node.js. Tak ako v Node.js, Deno používa JavaScriptový engine , ktorý sa taktiež používa v prehliadačoch založených na Chromiu. Deno však nie je odnožou Node.js, ale predstavuje úplne nový projekt vytvorený od základov. Kód projektu je pod licenciou MIT. Sestavy pre Linux, Windows a macOS.
Dôležité číslo verzie súvisí so stabilizáciou API v mennom priestore Deno, ktorý zodpovedá za interakciu aplikácií s OS. Programové rozhrania, ktoré zatiaľ , sú predvolene skryté a sú dostupné iba pri spustení v režime „—unstable“. Postupne, s tvorbou nových verzií, budú takéto API presúvané do stabilného stavu. API v globálnom mennom priestore, ktoré zahŕňa také bežné funkcie ako setTimeout() a fetch(), je čo najviac priblížené k API bežných webových prehliadačov a vyvíja sa v súlade so štandardmi prehlížačov. Poskytované Rust API, ktoré sa priamo používa v kóde platformy, ako aj rozhranie pre vývoj pluginov pre Deno runtime, zatiaľ nie sú stabilizované a pokračujú vo vývoji.
Kľúčovými motívmi vytvorenia novej JavaScriptovej platformy bolo odstránenie konceptuálnych chýb, dovolené Tokio
Hlavné vlastnosti
- Orientácia na bezpečnosť v predvolenej konfigurácii. Prístup k súborom, sieťovým funkciám a k premenným prostredia je predvolene zablokovaný a vyžaduje explicitné povolenie. Aplikácie sa predvolene spúšťajú v izolovaných sandboxových prostrediach a nemôžu získať prístup k systémovým funkciám bez poskytnutia explicitných oprávnení;
- Integrovaná podpora jazyka TypeScript vedľa JavaScriptu. Na kontrolu typov a generáciu JavaScriptu sa využíva štandardný kompilátor TypeScript, čo spôsobuje pokles výkonu v porovnaní s analýzou JavaScriptu v V8. V budúcnosti sa plánuje pripraviť vlastná implementácia systému kontroly typov TypeScript, ktorá výrazne zvýši výkon spracovania TypeScript;
- Runtime je dodávaný vo forme jedného samostatného spustiteľného súboru („deno“). Na spustenie aplikácií pomocou Deno stačí pre svoju platformu jeden spustiteľný súbor s veľkosťou okolo 20 MB, ktorý nemá vonkajšie závislosti a nevyžaduje žiadnu špeciálnu inštaláciu do systému. Pri tom deno nie je monolitná aplikácia, ale predstavuje kolekciu crate balíkov na Rust (, ), ktoré môžu byť používané samostatne;
- Pri spúšťaní programu, ako aj na sťahovanie modulov je možné použiť adresovanie cez URL. Napríklad pre spustenie programu welcome.js môžete použiť príkaz „deno https://deno.land/std/examples/welcome.js“. Kód z externých zdrojov sa sťahuje a uklada na lokálnom systéme, ale nikdy sa automaticky neaktualizuje (na aktualizáciu je potrebné explicitne spustiť aplikáciu s prepínačom „—reload“);
- Efektívne spracovanie sieťových požiadaviek cez HTTP, platforma je určená na vytváranie vysokovýkonných sieťových aplikácií;
- Možnosť vytvárania univerzálnych webových aplikácií, ktoré môžu fungovať ako v Deno, tak aj v bežnom webovom prehliadači;
- Prítomnosť , ktorých použitie nevyžaduje viazanie na vonkajšie závislosti. Moduly zo štandardnej zbierky prešli dodatočným auditom a kontrolou kompatibility;
- Okrem runtime platforma Deno tiež plní úlohu správcu balíkov a umožňuje v kóde odkazovať na moduly cez URL. Napríklad, na stiahnutie modulu môže byť v kóde uvedené „import * as log from "https://deno.land/std/log/mod.ts". Súbory stiahnuté z externých serverov cez URL sa cachujú. Pripúšťanie k verziám modulov je určené prostredníctvom uvedenia čísel verzií v URL, napríklad „https://unpkg.com/liltest@0.0.5/dist/liltest.js“;
- Do systému je integrovaný systém inšpekcie závislostí (príkaz 'deno info') a nástroj na formátovanie kódu (deno fmt);
- Všetky skripty aplikácie môžu byť združené do jedného súboru JavaScript.
Rozdiely od Node.js:
- Deno nepoužíva správcu balíkov npm
a nezviazuje sa na repozitáre, adresovanie modulov sa realizuje cez URL alebo podľa súborového umiestnenia a samotné moduly môžu byť umiestnené na akejkoľvek webovej stránke; - V Deno sa nepoužíva „package.json“ na definovanie modulov;
- Rozdiel API, všetky asynchrónne akcie v Deno vracajú promise;
- Deno vyžaduje explicitné definovanie všetkých potrebných oprávnení pre súbory, sieť a premenné prostredia;
- Všetky chyby, ktoré nie sú vybavené spracovateľmi, vedú k ukončeniu vykonávania aplikácie;
- V Deno sa používa systém modulov ECMAScript a nepodporuje sa require();
- Vstavaný HTTP server Deno je napísaný v TypeScript a funguje na natívnych TCP soketoch, zatiaľ čo HTTP server Node.js je napísaný v C a poskytuje väzby pre JavaScript. Vývojári Deno sa zamerali na optimalizáciu celého TCP soketového vrstvy a poskytovanie všeobecnejšieho rozhrania. HTTP server Deno zabezpečuje nižšiu priepustnosť, ale garantuje predvídateľne nízke oneskorenia. Napríklad v teste jednoduchá aplikácia založená na Deno HTTP serveri dokázala spracovať 25 tisíc požiadaviek za sekundu s maximálnym oneskorením 1,3 milisekundy. V Node.js podobná aplikácia spracovala 34 tisíc požiadaviek za sekundu, ale oneskorenia sa pohybovali od 2 do 300 milisekúnd.
- Deno nie je kompatibilný s balíkmi pre Node.js (NPM), ale vyvíja sa samostatne. pre kompatibilitu so štandardnou knižnicou Node.js, pričom s rozvojom Deno sa v ňom bude môcť spúšťať čoraz viac aplikácií napísaných pre Node.js.
Zdroj: opennet.ru
