Po dvou letech vývoje první významné vydání , platformy pro izolované spouštění aplikací v jazycích JavaScript a TypeScript, kterou lze použít k vytváření serverových handlerů. Platformu vyvíjí Ryan Dahl (), tvůrce Node.js. Stejně jako v Node.js je v Deno použit JavaScriptový engine , který je také používán v prohlížečích na bázi Chromium. Deno však není větví Node.js, ale představuje nový projekt vytvořený od základu. Kód projektu je licencován pod MIT. Sestavení pro Linux, Windows a macOS.
Významné číslo verze je spojeno se stabilizací API v jmenném prostoru Deno, které má na starosti interakci aplikací s operačním systémem. Programové rozhraní, které zatím , je ve výchozím nastavení skryto a je dostupné pouze při spuštění v režimu "--unstable". Jak se budou objevovat nové verze, budou podobná API postupně převáděna do kategorie stabilních. API v globálním jmenném prostoru, včetně takových běžných funkcí jako setTimeout() a fetch(), je, pokud je to možné, přizpůsobeno API běžných webových prohlížečů a vyvíjí se v souladu s webovými standardy pro prohlížeče. Poskytovaná Rust API, která se přímo používají v kódu platformy, stejně jako rozhraní pro vývoj pluginů pro Deno runtime, zatím nejsou stabilizována a stále se vyvíjejí.
Klíčovými motivy pro vytvoření nové JavaScriptové platformy bylo odstranit konceptuální chyby, dopustěny Tokio
Hlavní , také napsaná v jazyce Rust. Tokio umožňuje vytváření vysoce výkonných aplikací založených na architektuře orientované na události (Event-driven), které podporují vícerozpracování a asynchronní zpracování síťových požadavků.
- Zaměření na bezpečnost v konfiguraci podle výchozího nastavení. Přístupy k souborům, síťové schopnosti a přístup k proměnným prostředí jsou ve výchozím nastavení blokovány a vyžadují explicitní povolení. Aplikace se ve výchozím nastavení spouštějí v izolovaných sandboxových prostředích a nemohou přistupovat k systémovým schopnostem bez udělení jasných oprávnění;
- Vestavěná podpora pro jazyk TypeScript kromě JavaScriptu. Pro kontrolu typů a generaci JavaScriptu je použit standardní kompilátor TypeScript, což vede k poklesu výkonu ve srovnání s analýzou JavaScriptu v V8. V budoucnu se plánuje příprava vlastní implementace systému kontroly typů TypeScript, která výrazně zvyší výkon zpracování TypeScript;
- Runtime je dodáván ve formě jednoho samostatného spustitelného souboru („deno“). Pro spuštění aplikací pomocí Deno stačí pro svou platformu jeden spustitelný soubor o velikosti přibližně 20 MB, který nemá žádné externí závislosti a nevyžaduje žádnou zvláštní instalaci do systému. Přitom deno není monolitní aplikace, ale představuje kolekci crate balíčků na Rust (, ), které mohou být používány samostatně;
- Při spuštění programu a také pro načítání modulů lze použít adresaci přes URL. Například pro spuštění programu welcome.js lze použít příkaz „deno https://deno.land/std/examples/welcome.js“. Kód z externích zdrojů se načítá a ukládá do mezipaměti na místní systém, ale nikdy se automaticky neaktualizuje (pro aktualizaci je nutné explicitně spustit aplikaci s přepínačem „—reload“);
- Efektivní zpracování síťových požadavků přes HTTP, platforma je navržena pro vytváření vysoce výkonných síťových aplikací;
- Možnost vytváření univerzálních webových aplikací, které mohou běžet jak v Deno, tak v běžném webovém prohlížeči;
- Přítomnost , jejichž použití nevyžaduje vazbu na externí závislosti. Moduly ze standardní sbírky prošly dodatečným auditem a kontrolou kompatibility;
- Kromě runtime platforma Deno také funguje jako správce balíčků a umožňuje v rámci kódu odkazovat na moduly pomocí URL. Například pro načtení modulu můžete v kódu uvést „import * as log from „https://deno.land/std/log/mod.ts“. Soubory načtené z externích serverů pomocí URL jsou ukládány do mezipaměti. Verze modulů jsou určovány uvedením čísel verzí v URL, například „https://unpkg.com/liltest@0.0.5/dist/liltest.js“;
- Součástí je také systém pro inspekci závislostí (příkaz „deno info“) a nástroj pro formátování kódu (deno fmt);
- Všechny skripty aplikace mohou být spojeny do jednoho JavaScriptového souboru.
Rozdíly oproti Node.js:
- Deno nepoužívá správce balíčků npm
a není vázáno na repozitáře, adresace modulů se provádí prostřednictvím URL nebo dle souborové cesty, přičemž moduly mohou být umístěny na jakémkoli webu; - V Deno se nepoužívá „package.json“ pro určení modulů;
- Rozdílné API, všechny asynchronní akce v Deno vracejí promise;
- Deno vyžaduje explicitní určení všech potřebných oprávnění pro soubory, síť a proměnné prostředí;
- Veškeré chyby, které nemají obsluhovače, vedou k ukončení běhu aplikace;
- V Deno se používá systém modulů ECMAScript a nepodporuje require();
- Vestavěný HTTP server Deno je napsán v TypeScriptu a funguje nad nativními TCP sockety, zatímco HTTP server Node.js je napsán v C a poskytuje vazby pro JavaScript. Vývojáři Deno se zaměřili na optimalizaci celého TCP socketového vrstvy a poskytování obecnějšího rozhraní. HTTP server Deno zajišťuje nižší propustnost, ale zaručuje předvídatelně nízké latence. Například v testu jednoduchá aplikace na bázi Deno HTTP serveru dokázala zpracovat 25 tisíc požadavků za sekundu s maximální latencí 1,3 milisekundy. V Node.js obdobná aplikace zpracovala 34 tisíc požadavků za sekundu, ale latence se pohybovaly od 2 do 300 milisekund.
- Deno není kompatibilní s balíčky pro Node.js (NPM), ale vyvíjí se odděleně pro zajištění kompatibility se standardní knihovnou Node.js, v průběhu jejího vývoje se v Deno budou moci spouštět stále více aplikací napsaných pro Node.js.
Zdroj: opennet.ru
