Efter tvÄ Ärs utveckling den första betydande utgÄvan , en plattform för isolerad körning av applikationer skrivna i JavaScript och TypeScript, som kan anvÀndas för att skapa servrar. Plattformen utvecklas av Ryan Dahl (), skaparen av Node.js. Precis som i Node.js anvÀnder Deno JavaScript-motorn , som ocksÄ anvÀnds i Chromium-baserade webblÀsare. Deno Àr dock inte en avknoppning av Node.js utan ett helt nytt projekt skapat frÄn grunden. Koden för projektet Àr licensierad under MIT. Byggen för Linux, Windows och macOS.
Det betydande versionsnumret Ă€r kopplat till stabiliseringen av API:er i namnomrĂ„det Deno, som ansvarar för interaktionen mellan applikationer och operativsystemet. ProgramgrĂ€nssnitt som för nĂ€rvarande , Ă€r som standard dolda och endast tillgĂ€ngliga nĂ€r de körs i "âunstable"-lĂ€ge. I takt med att nya versioner formas kommer sĂ„dana API:er gradvis att överföras till stabil status. API:erna i det globala namnomrĂ„det, som inkluderar allmĂ€nna funktioner som setTimeout() och fetch(), Ă€r sĂ„ nĂ€ra som möjligt relaterade till API:erna i vanliga webblĂ€sare och utvecklas i enlighet med webstandarder för webblĂ€sare. De Rust-baserade API:erna som anvĂ€nds direkt i plattformens kod, samt grĂ€nssnittet för att utveckla plugins till Deno-runtime, Ă€r Ă€nnu inte stabiliserade och fortsĂ€tter att utvecklas.
Huvudmotiven bakom skapandet av den nya JavaScript-plattformen var att ÄtgÀrda konceptuella fel i arkitekturen av Node.js, och att ge anvÀndarna en sÀkrare miljö. För att öka sÀkerheten Àr omslutningen runt V8-motorn skriven i Rust, vilket gör att mÄnga sÄrbarheter orsakade av lÄgnivÄminneshantering kan undvikas, sÄsom Ätkomst till minnesomrÄden efter frigörande, dereferering av nullpekare och övertrÀdelse av buffertgrÀnser. För att hantera förfrÄgningar i icke-blockerande lÀge anvÀnds en plattform , som ocksÄ Àr skriven i Rust. Tokio möjliggör skapandet av högpresterande applikationer baserade pÄ hÀndelsestyrd arkitektur, vilket stödjer flertrÄdigheter och hantering av nÀtverksförfrÄgningar i asynkron lÀge.
Huvud Deno:
- SÀkerhetsinriktning i standardkonfigurationen. à tkomst till filer, nÀtverksfunktioner och miljövariabler Àr som standard blockerad och krÀver explicit aktivering. Standardapplikationer körs i isolerade sandbox-miljöer och kan inte fÄ Ätkomst till systemfunktioner utan att ge explicita behörigheter;
- Inbyggt stöd för TypeScript utöver JavaScript. Den inbyggda TypeScript-kompilatorn anvÀnds för typkontroll och generering av JavaScript, vilket leder till prestandaförluster jÀmfört med Javascript-parsing i V8. I framtiden planeras en egen implementation av TypeScript-typkontrollsystemet som kommer att dramatiskt öka prestandan för TypeScript-hantering;
- Runtime levereras i form av en sjĂ€lvförsörjande körbar fil (âdenoâ). För att köra applikationer med Deno rĂ€cker det med för sin plattform en körbar fil, cirka 20 MB, utan externa beroenden och utan att krĂ€va nĂ„gon speciell installation i systemet. Den hĂ€r deno Ă€r dock ingen monolitisk applikation utan en samling crate-paket i Rust (, ), som kan anvĂ€ndas separat;
- Vid körning av programmet samt för inladdning av moduler kan adressering göras via URL. Till exempel, för att köra programmet welcome.js kan kommandot "deno https://deno.land/std/examples/welcome.js" anvĂ€ndas. Koden frĂ„n externa resurser laddas ner och cachelagras pĂ„ det lokala systemet, men uppdateras aldrig automatiskt (för att uppdatera krĂ€vs att applikationen körs med flaggan "âreload");
- Effektiv hantering av HTTP-nÀtringförfrÄgningar, plattformen Àr designad för att skapa högpresterande nÀtverksapplikationer;
- Möjlighet att skapa universella web-applikationer som kan köras bÄde i Deno och i en vanlig webblÀsare;
- NÀrvaron av , vars anvÀndning inte krÀver bindning till externa beroenden. Moduler frÄn standardkollektionen har genomgÄtt ytterligare granskning och testning för kompatibilitet;
- Förutom runtime fungerar Deno-plattformen Àven som en paketförvaltare och tillÄter att moduler kan anropas i koden via URL. Till exempel kan modulen laddas med koden «import * as log from «https://deno.land/std/log/mod.ts». Filer som laddas frÄn externa servrar via URL cachas. Bindningen till modulversioner definieras genom versionsnummer i URL:en, till exempel «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- Integrationen omfattar ett system för inspektion av beroenden (kommandot «deno info») och ett verktyg för kodformatering (deno fmt);
- Alla applikationsscript kan kombineras till en enda JavaScript-fil.
Skillnader frÄn Node.js:
- Deno anvÀnder ingen paketförvaltare npm
och kopplar inte till repository, moduler adresseras via URL eller filvÀg, och moduler kan placeras pÄ vilken webbplats som helst; - I Deno anvÀnds ingen «package.json» för att definiera moduler;
- API-differenser, alla asynkrona ÄtgÀrder i Deno returnerar ett promise;
- Deno krÀver en tydlig definiering av alla nödvÀndiga behörigheter för filer, nÀtverk och miljövariabler;
- Alla fel utan hanterare medför att applikationens exekvering avslutas;
- Deno anvÀnder ECMAScript-modulsystemet och stöder inte require();
- Den inbyggda HTTP-servern Deno Àr skriven i TypeScript och fungerar ovanpÄ nativa TCP-socklar, medan HTTP-servern i Node.js Àr skriven i C och erbjuder bindningar för JavaScript. Utvecklarna av Deno har fokuserat pÄ att optimera hela laget av TCP-socklar och erbjuda ett mer generellt grÀnssnitt. Den HTTP-servern Deno kan hantera fÀrre begÀrningar, men garanterar förutsÀgbart lÄga fördröjningar. Till exempel, i ett test kunde en enkel applikation baserad pÄ Deno HTTP-server hantera 25 000 begÀrningar per sekund med en maximal fördröjning pÄ 1,3 millisekunder. I Node.js hanterade en liknande applikation 34 000 begÀrningar per sekund, men fördröjningarna varierade mellan 2 och 300 millisekunder.
- Deno Àr inte kompatibel med paket för Node.js (NPM), men utvecklas separat för kompatibilitet med Node.js standardbibliotek, vilket gör att Deno kan köra fler och fler applikationer skrivna för Node.js allteftersom det utvecklas.
KĂ€lla: opennet.ru
