Аўтар Node.js прадставіў абароненую JavaScript-платформу Deno 1.0

Пасля двух гадоў распрацоўкі прадстаўлены першы значны выпуск Дэно 1.0, платформы для адасобленага выканання прыкладанняў на мовах JavaScript і TypeScript, якая можа быць выкарыстана для стварэння апрацоўшчыкаў, якія працуюць на серверы. Платформу развівае Раян Даль (Ryan Dahl), стваральнік Node.js. Як і ў Node.js у Deno выкарыстоўваецца JavaScript-рухавічок. V8, які таксама прымяняецца ў браўзэрах на аснове Chromium. Пры гэтым Deno не з'яўляецца адгалінаваннем ад Node.js, а ўяўляе сабой створаны з нуля новы праект. Код праекту распаўсюджваецца пад ліцэнзіяй MIT. Зборкі падрыхтаваны для Linux, Windows і macOS.

Значны нумар версіі звязаны са стабілізацыяй API у прасторы імёнаў Deno, якія адказваюць за ўзаемадзеянне прыкладанняў з АС. Праграмныя інтэрфейсы, якія пакуль не стабілізаваны, па змаўчанні ўтоеныя і даступныя толькі пры запуску ў рэжыме «—unstable». Па меры фармавання новых версій падобныя API паступова будуць пераводзіцца ў разрад стабільных. API у глабальнай прасторы імёнаў, улучальны такія агульныя функцыі як setTimeout() і fetch(), па магчымасці набліжаны да API звычайных web-браўзэраў і развіваецца ў адпаведнасці з Web-стандартамі для браўзэраў. Якія прадстаўляюцца Rust API, якія ўжываецца непасрэдна ў кодзе платформы, а таксама інтэрфейс для распрацоўкі плагінаў да Deno runtime, пакуль не стабілізаваныя і працягваюць развівацца.

Ключавымі матывамі стварэння новай JavaScript-платформы стала жаданне ўхіліць канцэптуальныя памылкі, дапушчаныя у архітэктуры Node.js, і падаць карыстачам больш абароненае асяроддзе. Для падвышэння бяспекі абвязка вакол рухавічка V8 напісана на мове Rust, які дазваляе пазбегнуць шматлікіх уразлівасцяў, якія ўзнікаюць з-за нізкаўзроўневай працы з памяццю, такіх як зварот да вобласці памяці пасля яе вызвалення, разнайменаванне нулявых паказальнікаў і выйсце за межы буфера. Для апрацоўкі запытаў у неблакіруючым рэжыме прымяняецца платформа Токіо, таксама напісаная на мове Rust. Tokio дазваляе ствараць высокапрадукцыйныя прыкладанні на аснове падзейна-арыентаванай архітэктуры (Event-driven), якія падтрымліваюць шматструменнасць і апрацоўку сеткавых запытаў у асінхронным рэжыме.

Асноўныя асаблівасці Deno:

  • Арыентацыя на бяспеку ў канфігурацыі па змаўчанні. Звароты да файлаў, сеткавыя магчымасці і доступ да зменных асяроддзі па змаўчанні блакіраваны і патрабуюць відавочнага ўключэння. Прыкладанні па змаўчанні запускаюцца ў ізаляваных sandbox-акружэннях і не могуць атрымаць доступ да сістэмных магчымасцяў без прадастаўлення відавочных паўнамоцтваў;
  • Убудаваная падтрымка мовы TypeScript апроч JavaScript. Для праверкі тыпаў і генерацыі JavaScript задзейнічаны штатны кампілятар TypeScript, што прыводзіць да прасядання прадукцыйнасці ў параўнанні з разборам JavaScript у V8. У будучыні плануецца падрыхтаваць уласную рэалізацыю сістэмы праверкі тыпаў TypeScript, якая дазволіць на парадак падняць прадукцыйнасць апрацоўкі TypeScript;
  • Runtime пастаўляецца ў форме аднаго самадастатковага выкананага файла ("deno"). Для запуску прыкладанняў пры дапамозе Deno дастаткова загрузіць для сваёй платформы адзін выкананы файл, памерам каля 20 Мб, не мелых вонкавых залежнасцяў і не патрабавальны нейкай адмысловай усталёўкі ў сістэму. Пры гэтым deno не з'яўляецца маналітным дадаткам, а ўяўляе сабой калекцыю crate-пакетаў на Rust (deno_core, rusty_v8), якія могуць выкарыстоўвацца па асобнасці;
  • Пры запуску праграмы, а таксама для загрузкі модуляў можна выкарыстоўваць адрасаванне праз URL. Напрыклад, для запуску праграмы welcome.js можна выкарыстоўваць каманду "deno https://deno.land/std/examples/welcome.js". Код з вонкавых рэсурсаў загружаецца і кэшуецца на лакальнай сістэме, але ніколі аўтаматычна не абнаўляецца (для абнаўлення патрабуецца відавочна запусціць прыкладанне са сцягам «—reload»);
  • Эфектыўная апрацоўка ў дадатках сеткавых запытаў па HTTP, платформа разлічана на стварэнне высокапрадукцыйных сеткавых прыкладанняў;
  • Магчымасць стварэння ўніверсальных web-прыкладанняў, якія могуць выканацца як у Deno, так і ў звычайным web-браўзэры;
  • наяўнасць стандартнага набору модуляў, Выкарыстанне якіх не патрабуе прывязкі да знешніх залежнасцяў. Модулі са стандартнай калекцыі прайшлі дадатковы аўдыт і праверку на сумяшчальнасць;
  • Акрамя runtime платформа Deno таксама выконвае ролю пакетнага мэнэджара і дазваляе ўсярэдзіне кода звяртацца да модуляў па URL. Напрыклад, для загрузкі модуля можна пазначыць у кодзе "import * as log from "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 вяртаюць promise;
  • Deno патрабуе відавочнага вызначэння ўсіх неабходных паўнамоцтваў для файлаў, сеткі і зменных асяроддзі;
  • Усе памылкі, не забяспечаныя апрацоўшчыкамі, прыводзяць да завяршэння выканання прыкладання;
  • У Deno прымяняецца сістэма модуляў ECMAScript і не падтрымліваецца require();
  • Убудаваны HTTP-сервер Deno напісаны на TypeScript і працуе па-над натыўнымі TCP-сокетамі, а HTTP-сервер Node.js напісаны на Сі і падае прывязкі для JavaScript. Распрацоўнікі Deno засяродзілі высілкі на аптымізацыі ўсяго пласта TCP-сокетаў і падаванне больш агульнага інтэрфейсу. HTTP-сервер Deno забяспечвае меншую прапускную здольнасць, але гарантуе прадказальныя нізкія затрымкі. Напрыклад, у цесцю простае прыкладанне на базе Deno HTTP server змагло апрацаваць 25 тысяч запытаў у секунду з максімальнай затрымкай у 1.3 мілісекунд. У Node.js аналагічнае прыкладанне апрацавала 34 тысячы запытаў у секунду, але затрымкі вагаліся ад 2 і 300 мілісекунд.
  • Deno не сумяшчальны з пакетамі для Node.js (NPM), але асобна развіваецца праслойка для сумяшчальнасці са стандартнай бібліятэкай Node.js, па меры развіцця якой у Deno змогуць запускацца ўсё больш прыкладанняў, напісаных для Node.js.
  • Крыніца: opennet.ru

Дадаць каментар