Node.js-ի հեղինակը ներկայացրել է Deno 1.0 անվտանգ JavaScript հարթակը

Երկու տարվա զարգացումից հետո ներկայացված առաջին խոշոր թողարկումը Դենո 1.0, JavaScript-ում և TypeScript-ում հավելվածների ինքնուրույն կատարման հարթակ, որը կարող է օգտագործվել սերվերի վրա աշխատող մշակիչներ ստեղծելու համար: Պլատֆորմը մշակվել է Ռայան Դալի կողմից (Ռայան Դալ), Node.js-ի ստեղծող։ Node.js-ի նման, Deno-ն օգտագործում է JavaScript շարժիչ V8, որն օգտագործվում է նաև Chromium-ի վրա հիմնված բրաուզերներում: Միևնույն ժամանակ, Deno-ն Node.js-ի պատառաքաղ չէ, այլ զրոյից ստեղծված նոր նախագիծ է։ Ծրագրի կոդը տարածվում է MIT լիցենզիայի ներքո: Ժողովներ պատրաստված Linux-ի, Windows-ի և macOS-ի համար:

Տարբերակների զգալի թիվը կապված է Deno անվանատարածքում API-ների կայունացման հետ, որոնք պատասխանատու են ՕՀ-ի հետ հավելվածների փոխազդեցության համար: Ծրագրային ինտերֆեյսներ, որոնք մինչ այժմ ունեն կայունացված չէ, թաքնված են լռելյայնորեն և հասանելի են միայն «--անկայուն» ռեժիմով աշխատելիս: Քանի որ նոր տարբերակներ են ձևավորվում, նման API-ները աստիճանաբար կայուն կդառնան: Համաշխարհային անվանատարածքի API-ն, որը ներառում է սովորական գործառույթներ, ինչպիսիք են setTimeout() և fetch(), հնարավորինս մոտ է սովորական վեբ բրաուզերների API-ին և մշակված է բրաուզերների համար վեբ ստանդարտներին համապատասխան: Rust-ի կողմից տրամադրված API-ները, որոնք ուղղակիորեն օգտագործվում են հարթակի կոդում, ինչպես նաև Deno runtime-ի համար պլագինների մշակման ինտերֆեյսը դեռ չեն կայունացել և շարունակում են զարգանալ։

Նոր JavaScript հարթակի ստեղծման հիմնական շարժառիթներն էին հայեցակարգային սխալները վերացնելու ցանկությունը, խոստովանել է Node.js ճարտարապետության մեջ և օգտվողներին տրամադրել ավելի ապահով միջավայր: Անվտանգությունը բարելավելու համար V8 շարժիչը գրված է Rust-ով, որը խուսափում է շատ խոցելիություններից, որոնք առաջանում են ցածր մակարդակի հիշողության մանիպուլյացիայից, ինչպիսիք են՝ ազատ մուտքը, զրոյական ցուցիչի մատնանշումները և բուֆերի գերակատարումները: Հարթակն օգտագործվում է հարցումները չարգելափակման ռեժիմում մշակելու համար Տոկիո, գրված է նաև Ռուստ. Tokio-ն թույլ է տալիս ստեղծել բարձր արդյունավետությամբ հավելվածներ՝ հիմնված իրադարձությունների վրա հիմնված ճարտարապետության վրա՝ աջակցելով բազմաշերտ ցանցի հարցումները և մշակելով ասինխրոն ռեժիմում:

Հիմնական առանձնահատկությունները Դենո:

  • Անվտանգության վրա հիմնված լռելյայն կազմաձևում: Ֆայլերի մուտքը, ցանցային կապը և շրջակա միջավայրի փոփոխականների հասանելիությունը լռելյայն անջատված են և պետք է հստակորեն միացված լինեն: Հավելվածները լռելյայն աշխատում են մեկուսացված sandbox միջավայրերում և չեն կարող մուտք գործել համակարգի հնարավորություններ՝ առանց հստակ թույլտվությունների տրամադրման.
  • Ներկառուցված աջակցություն TypeScript-ին JavaScript-ից դուրս: Ստանդարտ TypeScript կոմպիլյատորն օգտագործվում է տեսակները ստուգելու և JavaScript-ի ստեղծման համար, ինչը հանգեցնում է կատարողականի բարձրացման՝ համեմատած JavaScript-ի վերլուծության V8-ում: Ապագայում մենք նախատեսում ենք պատրաստել TypeScript տեսակի ստուգման համակարգի մեր սեփական ներդրումը, որը մեծության կարգով կբարելավի TypeScript-ի մշակման կատարումը.
  • Runtime-ը գալիս է մեկ ինքնուրույն գործարկվող ֆայլի տեսքով («deno»): Deno-ի միջոցով հավելվածներ գործարկելու համար բավական է վերբեռնել իր պլատֆորմի համար կա մեկ գործարկվող ֆայլ՝ մոտ 20 ՄԲ չափով, որը չունի արտաքին կախվածություն և չի պահանջում որևէ հատուկ տեղադրում համակարգում։ Ավելին, deno-ն մոնոլիտ հավելված չէ, այլ Rust-ում crate փաթեթների հավաքածու է (deno_core, Rusty_v8), որը կարող է օգտագործվել առանձին;
  • Ծրագիրը սկսելիս, ինչպես նաև մոդուլներ բեռնելիս կարող եք օգտագործել URL հասցեավորումը։ Օրինակ՝ welcome.js ծրագիրը գործարկելու համար կարող եք օգտագործել «deno https://deno.land/std/examples/welcome.js» հրամանը։ Արտաքին ռեսուրսներից ծածկագիրը ներբեռնվում և պահվում է տեղական համակարգում, բայց երբեք ինքնաբերաբար չի թարմացվում (թարմացման համար պահանջվում է հստակորեն գործարկել հավելվածը «--վերբեռնել» դրոշակով);
  • Ծրագրերում HTTP-ի միջոցով ցանցային հարցումների արդյունավետ մշակում, հարթակը նախատեսված է բարձր արդյունավետությամբ ցանցային հավելվածներ ստեղծելու համար.
  • Ունիվերսալ վեբ հավելվածներ ստեղծելու ունակություն, որոնք կարող են իրականացվել ինչպես Deno-ում, այնպես էլ սովորական վեբ բրաուզերում;
  • առկայություն ստանդարտ մոդուլների հավաքածու, որի օգտագործումը չի պահանջում պարտադիր արտաքին կախվածություն: Ստանդարտ հավաքածուի մոդուլները ենթարկվել են լրացուցիչ աուդիտի և համատեղելիության թեստավորման.
  • Բացի գործարկման ժամանակից, Deno պլատֆորմը նաև գործում է որպես փաթեթի կառավարիչ և թույլ է տալիս մուտք գործել մոդուլներ URL-ի միջոցով կոդի ներսում: Օրինակ՝ մոդուլը բեռնելու համար կոդում կարող եք նշել «ներմուծել * որպես տեղեկամատյան «https://deno.land/std/log/mod.ts»–ից։ Արտաքին սերվերներից URL-ի միջոցով ներբեռնված ֆայլերը պահվում են քեշում: Մոդուլի տարբերակներին կապելը որոշվում է URL-ի ներսում տարբերակի համարները նշելով, օրինակ՝ «https://unpkg.com/[էլեկտրոնային փոստով պաշտպանված]/dist/liltest.js";
  • Կառուցվածքը ներառում է կախվածության ստուգման ինտեգրված համակարգ («deno info» հրաման) և կոդի ձևաչափման օգտակար ծրագիր (deno fmt);
  • Ծրագրի բոլոր սցենարները կարող են համակցվել մեկ JavaScript ֆայլի մեջ:

Տարբերությունները Node.js-ից.

  • Deno-ն չի օգտագործում npm փաթեթների կառավարիչ
    և կապված չէ պահեստների հետ, մոդուլները հասցեագրվում են URL-ի կամ ֆայլի ուղու միջոցով, և մոդուլներն իրենք կարող են տեղադրվել ցանկացած կայքում.
  • Deno-ն չի օգտագործում «package.json» մոդուլները սահմանելու համար.
  • API-ի տարբերություն, Deno-ում բոլոր ասինխրոն գործողությունները խոստում են տալիս.
  • Deno-ն պահանջում է ֆայլերի, ցանցի և շրջակա միջավայրի փոփոխականների համար անհրաժեշտ բոլոր թույլտվությունների հստակ սահմանում;
  • Բոլոր սխալները, որոնք ապահովված չեն մշակողների հետ, հանգեցնում են դիմումի դադարեցմանը.
  • Deno-ն օգտագործում է ECMAScript մոդուլային համակարգը և չի աջակցում require();
  • Deno-ի ներկառուցված HTTP սերվերը գրված է TypeScript-ով և աշխատում է բնիկ TCP վարդակների վրա, մինչդեռ Node.js HTTP սերվերը գրված է C-ով և ապահովում է JavaScript-ի կապեր: Deno-ի մշակողները կենտրոնացել են ամբողջ TCP վարդակից շերտի օպտիմալացման և ավելի ընդհանուր ինտերֆեյսի տրամադրման վրա: Deno HTTP սերվերն ապահովում է ավելի ցածր թողունակություն, բայց երաշխավորում է կանխատեսելի ցածր հետաձգում: Օրինակ՝ թեստում Deno HTTP սերվերի վրա հիմնված պարզ հավելվածը կարողացել է վայրկյանում մշակել 25 հազար հարցում՝ 1.3 միլիվայրկյան առավելագույն ուշացումով։ Node.js-ում նմանատիպ հավելվածը մշակել է վայրկյանում 34 հազար հարցում, սակայն ուշացումները տատանվել են 2-ից 300 միլիվայրկյանից:
  • Deno-ն համատեղելի չէ Node.js-ի (NPM) փաթեթների հետ, սակայն մշակվում է առանձին միջաշերտ Node.js ստանդարտ գրադարանի հետ համատեղելիության համար, քանի որ այն զարգանում է, Node.js-ի համար գրված ավելի ու ավելի շատ հավելվածներ կկարողանան աշխատել Deno-ում:
  • Source: opennet.ru

Добавить комментарий