Mwandishi wa Node.js aliwasilisha jukwaa salama la JavaScript Deno 1.0

Baada ya miaka miwili ya maendeleo imewasilishwa toleo kuu la kwanza Nipe 1.0, jukwaa la utekelezaji wa pekee wa programu katika JavaScript na TypeScript, ambayo inaweza kutumika kuunda vidhibiti vinavyoendeshwa kwenye seva. Jukwaa limetengenezwa na Ryan Dahl (Ryan Dahl), muundaji wa Node.js. Kama vile Node.js, Deno hutumia injini ya JavaScript V8, ambayo pia hutumiwa katika vivinjari vinavyotegemea Chromium. Wakati huo huo, Deno sio uma wa Node.js, lakini ni mradi mpya iliyoundwa kutoka mwanzo. Msimbo wa mradi kusambazwa na chini ya leseni ya MIT. Mikusanyiko tayari kwa Linux, Windows na macOS.

Nambari muhimu ya toleo inahusishwa na uimarishaji wa API katika nafasi ya majina ya Deno, ambayo inawajibika kwa mwingiliano wa programu na OS. Miingiliano ya programu ambayo ina hadi sasa haijatulia, zimefichwa kwa chaguo-msingi na zinapatikana tu wakati wa kuendesha katika hali ya "--unstable". Matoleo mapya yanapoundwa, API kama hizo zitakuwa thabiti polepole. API katika nafasi ya majina ya kimataifa, inayojumuisha vitendaji vya kawaida kama vile setTimeout() na fetch(), iko karibu iwezekanavyo na API ya vivinjari vya kawaida vya wavuti na imeundwa kwa mujibu wa viwango vya Wavuti kwa vivinjari. API zinazotolewa na Rust, ambazo hutumiwa moja kwa moja kwenye msimbo wa jukwaa, pamoja na kiolesura cha kutengeneza programu-jalizi za Deno, bado hazijaimarishwa na zinaendelea kuendelezwa.

Nia kuu za kuunda jukwaa mpya la JavaScript zilikuwa hamu ya kuondoa makosa ya dhana, alikubali katika usanifu wa Node.js, na kuwapa watumiaji mazingira salama zaidi. Ili kuboresha usalama, injini ya V8 imeandikwa kwa Rust, ambayo huepuka udhaifu mwingi unaotokana na upotoshaji wa kumbukumbu wa kiwango cha chini, kama vile ufikiaji baada ya bila malipo, vielekezi visivyofaa vya vielekezi, na ziada ya bafa. Jukwaa linatumika kushughulikia maombi katika hali ya kutozuia Tokyo, pia imeandikwa katika Rust. Tokio hukuruhusu kuunda programu zenye utendakazi wa hali ya juu kulingana na usanifu unaoendeshwa na hafla, kusaidia utiririshaji na usindikaji maombi ya mtandao katika hali ya asynchronous.

kuu makala Deno:

  • Usanidi chaguo-msingi unaolenga usalama. Ufikiaji wa faili, uunganisho wa mtandao na ufikiaji wa anuwai za mazingira huzimwa kwa chaguo-msingi na lazima kuwezeshwa kwa uwazi. Programu kwa chaguo-msingi huendeshwa katika mazingira ya pekee ya kisanduku cha mchanga na haziwezi kufikia uwezo wa mfumo bila kutoa ruhusa zilizo wazi;
  • Usaidizi uliojengewa ndani wa TypeScript zaidi ya JavaScript. Kikusanyaji cha kawaida cha TypeScript kinatumika kuangalia aina na kutoa JavaScript, ambayo husababisha utendaji mzuri ikilinganishwa na uchanganuzi wa JavaScript katika V8. Katika siku zijazo, tunapanga kuandaa utekelezaji wetu wenyewe wa mfumo wa kukagua aina ya TypeScript, ambao utaboresha utendakazi wa kuchakata TypeScript kwa mpangilio wa ukubwa;
  • Runtime huja katika mfumo wa faili moja inayoweza kutekelezwa inayojitosheleza ("deno"). Kuendesha programu kwa kutumia Deno inatosha kupakua kwa jukwaa lake kuna faili moja inayoweza kutekelezwa, kuhusu ukubwa wa MB 20, ambayo haina utegemezi wa nje na hauhitaji ufungaji maalum kwenye mfumo. Kwa kuongezea, deno sio matumizi ya monolithic, lakini ni mkusanyiko wa vifurushi vya crate huko Rust (deno_core, kutu_v8), ambayo inaweza kutumika tofauti;
  • Wakati wa kuanza programu, na pia kwa kupakia moduli, unaweza kutumia anwani ya URL. Kwa mfano, ili kuendesha programu ya welcome.js, unaweza kutumia amri "deno https://deno.land/std/examples/welcome.js". Msimbo kutoka kwa rasilimali za nje hupakuliwa na kuakibishwa kwenye mfumo wa ndani, lakini hausasishwi kiotomatiki (kusasisha kunahitaji kuendesha programu kwa uwazi na bendera ya "--reload");
  • Usindikaji bora wa maombi ya mtandao kupitia HTTP katika programu, jukwaa limeundwa kwa ajili ya kuunda programu za mtandao zenye utendaji wa juu;
  • Uwezo wa kuunda programu za wavuti za ulimwengu wote ambazo zinaweza kutekelezwa katika Deno na katika kivinjari cha kawaida cha wavuti;
  • upatikanaji seti ya kawaida ya moduli, matumizi ambayo hauhitaji kumfunga kwa utegemezi wa nje. Moduli kutoka kwa mkusanyiko wa kawaida zimepitia ukaguzi wa ziada na upimaji wa ulinganifu;
  • Kando na wakati wa utekelezaji, jukwaa la Deno pia hufanya kazi kama kidhibiti kifurushi na hukuruhusu kufikia moduli kwa kutumia URL ndani ya msimbo. Kwa mfano, ili kupakia moduli, unaweza kubainisha katika msimbo "leta * kama kumbukumbu kutoka "https://deno.land/std/log/mod.ts". Faili zilizopakuliwa kutoka kwa seva za nje kupitia URL zimehifadhiwa. Kushurutishwa kwa matoleo ya sehemu hubainishwa kwa kubainisha nambari za matoleo ndani ya URL, kwa mfano, β€œhttps://unpkg.com/[barua pepe inalindwa]/dist/liltest.js";
  • Muundo unajumuisha mfumo wa ukaguzi wa utegemezi uliojumuishwa (amri ya "deno info") na matumizi ya umbizo la msimbo (deno fmt);
  • Hati zote za programu zinaweza kuunganishwa kuwa faili moja ya JavaScript.

Tofauti kutoka Node.js:

  • Deno haitumii msimamizi wa kifurushi cha npm
    na si amefungwa kwa hazina, modules ni kushughulikiwa kupitia URL au kwa njia ya faili, na modules wenyewe inaweza kuwekwa kwenye tovuti yoyote;
  • Deno haitumii "package.json" kufafanua moduli;
  • Tofauti ya API, vitendo vyote vya asynchronous katika Deno vinarudisha ahadi;
  • Deno inahitaji ufafanuzi wa wazi wa ruhusa zote muhimu kwa faili, mtandao na vigezo vya mazingira;
  • Makosa yote ambayo hayajatolewa na washughulikiaji husababisha kusitishwa kwa maombi;
  • Deno hutumia mfumo wa moduli ya ECMAScript na haiungi mkono mahitaji ();
  • Seva ya HTTP iliyojengewa ndani ya Deno imeandikwa katika TypeScript na huendesha juu ya soketi asili za TCP, huku seva ya Node.js HTTP imeandikwa kwa C na hutoa vifungo vya JavaScript. Watengenezaji wa Deno wamejikita katika kuboresha safu nzima ya soketi ya TCP na kutoa kiolesura cha jumla zaidi. Seva ya Deno HTTP hutoa uboreshaji wa chini lakini huhakikisha muda wa kusubiri wa chini unaotabirika. Kwa mfano, katika jaribio, programu rahisi kulingana na seva ya Deno HTTP iliweza kushughulikia maombi elfu 25 kwa sekunde kwa muda wa juu wa kusubiri wa milisekunde 1.3. Katika Node.js, maombi sawa yalichakata maombi elfu 34 kwa sekunde, lakini muda wa kusubiri ulianzia 2 na 300 milisekunde.
  • Deno haioani na vifurushi vya Node.js (NPM), lakini inatengenezwa tofauti interlayer kwa upatanifu na maktaba ya kawaida ya Node.js, inapoendelea, programu zaidi na zaidi zilizoandikwa kwa Node.js zitaweza kufanya kazi katika Deno.
  • Chanzo: opennet.ru

Kuongeza maoni