Iniharap ng may-akda ng Node.js ang secure na JavaScript platform na Deno 1.0

Pagkatapos ng dalawang taon ng pag-unlad ipinakita unang major release Bigyan mo ako ng 1.0, isang platform para sa stand-alone na pagpapatupad ng mga application sa JavaScript at TypeScript, na maaaring magamit upang lumikha ng mga humahawak na tumatakbo sa server. Ang platform ay binuo ni Ryan Dahl (Ryan Dahl), tagalikha ng Node.js. Tulad ng Node.js, gumagamit si Deno ng JavaScript engine V8, na ginagamit din sa mga browser na nakabatay sa Chromium. Kasabay nito, ang Deno ay hindi isang tinidor ng Node.js, ngunit isang bagong proyekto na nilikha mula sa simula. Code ng proyekto ipinamahagi ni sa ilalim ng lisensya ng MIT. Mga pagtitipon nakahanda para sa Linux, Windows at macOS.

Ang makabuluhang numero ng bersyon ay nauugnay sa pag-stabilize ng mga API sa Deno namespace, na responsable para sa pakikipag-ugnayan ng mga application sa OS. Mga interface ng software na hanggang ngayon hindi nagpapatatag, ay nakatago bilang default at magagamit lamang kapag tumatakbo sa "--unstable" na mode. Habang nabuo ang mga bagong bersyon, unti-unting magiging stable ang mga naturang API. Ang API sa pandaigdigang namespace, na kinabibilangan ng mga karaniwang function gaya ng setTimeout() at fetch(), ay mas malapit hangga't maaari sa API ng mga kumbensyonal na web browser at binuo alinsunod sa mga pamantayan ng Web para sa mga browser. Ang mga API na ibinigay ng Rust, na direktang ginagamit sa platform code, pati na rin ang interface para sa pagbuo ng mga plugin para sa Deno runtime, ay hindi pa napapatatag at patuloy na umuunlad.

Ang mga pangunahing motibo para sa paglikha ng isang bagong platform ng JavaScript ay ang pagnanais na alisin ang mga error sa konsepto, inamin sa arkitektura ng Node.js, at bigyan ang mga user ng mas secure na kapaligiran. Upang mapabuti ang seguridad, ang V8 engine ay nakasulat sa Rust, na nag-iwas sa marami sa mga kahinaan na nagmumula sa mababang antas ng pagmamanipula ng memorya, tulad ng after-free na pag-access, null pointer dereferences, at buffer overruns. Ang platform ay ginagamit upang iproseso ang mga kahilingan sa non-blocking mode Tokio, nakasulat din sa Rust. Binibigyang-daan ka ng Tokio na lumikha ng mga application na may mataas na pagganap batay sa arkitektura na hinimok ng kaganapan, na sumusuporta sa mga kahilingan sa multi-threading at pagproseso ng network sa asynchronous mode.

Ang pangunahing mga tampok Deno:

  • Default na configuration na nakatuon sa seguridad. Ang pag-access sa file, networking, at pag-access sa mga variable ng kapaligiran ay hindi pinagana bilang default at dapat na tahasang pinagana. Ang mga application bilang default ay tumatakbo sa mga nakahiwalay na kapaligiran ng sandbox at hindi ma-access ang mga kakayahan ng system nang hindi nagbibigay ng mga tahasang pahintulot;
  • Built-in na suporta para sa TypeScript na lampas sa JavaScript. Ang karaniwang TypeScript compiler ay ginagamit upang suriin ang mga uri at bumuo ng JavaScript, na humahantong sa isang hit sa pagganap kumpara sa pag-parse ng JavaScript sa V8. Sa hinaharap, plano naming ihanda ang aming sariling pagpapatupad ng TypeScript type checking system, na magpapahusay sa pagganap ng pagpoproseso ng TypeScript ayon sa pagkakasunud-sunod ng magnitude;
  • Ang runtime ay dumating sa anyo ng isang solong self-contained na maipapatupad na file ("deno"). Upang magpatakbo ng mga application gamit ang Deno ito ay sapat na mag-upload para sa platform nito mayroong isang maipapatupad na file, mga 20 MB ang laki, na walang mga panlabas na dependency at hindi nangangailangan ng anumang espesyal na pag-install sa system. Bukod dito, ang deno ay hindi isang monolitik na aplikasyon, ngunit isang koleksyon ng mga pakete ng crate sa Rust (deno_core, kalawangin_v8), na maaaring gamitin nang hiwalay;
  • Kapag sinimulan ang programa, pati na rin ang pag-load ng mga module, maaari mong gamitin ang URL addressing. Halimbawa, upang patakbuhin ang welcome.js program, maaari mong gamitin ang command na “deno https://deno.land/std/examples/welcome.js”. Ang code mula sa mga panlabas na mapagkukunan ay dina-download at naka-cache sa lokal na system, ngunit hindi kailanman awtomatikong na-update (ang pag-update ay nangangailangan ng tahasang pagpapatakbo ng application gamit ang flag na "--reload");
  • Mahusay na pagproseso ng mga kahilingan sa network sa pamamagitan ng HTTP sa mga aplikasyon, ang platform ay idinisenyo para sa paglikha ng mga aplikasyon ng network na may mataas na pagganap;
  • Ang kakayahang lumikha ng mga unibersal na web application na maaaring isagawa pareho sa Deno at sa isang regular na web browser;
  • availability karaniwang hanay ng mga module, ang paggamit nito ay hindi nangangailangan ng pagbubuklod sa mga panlabas na dependency. Ang mga module mula sa karaniwang koleksyon ay sumailalim sa karagdagang pag-audit at pagsubok sa pagiging tugma;
  • Bilang karagdagan sa runtime, gumaganap din ang Deno platform bilang manager ng package at nagbibigay-daan sa iyo na ma-access ang mga module sa pamamagitan ng URL sa loob ng code. Halimbawa, para mag-load ng module, maaari mong tukuyin sa code na “import * bilang log mula sa “https://deno.land/std/log/mod.ts”. Ang mga file na na-download mula sa mga panlabas na server sa pamamagitan ng URL ay naka-cache. Ang pagbubuklod sa mga bersyon ng module ay tinutukoy sa pamamagitan ng pagtukoy ng mga numero ng bersyon sa loob ng URL, halimbawa, “https://unpkg.com/[protektado ng email]/dist/liltest.js";
  • Kasama sa istruktura ang isang pinagsama-samang sistema ng inspeksyon ng dependency (ang utos na "deno info") at isang utility para sa pag-format ng code (deno fmt);
  • Ang lahat ng mga script ng application ay maaaring pagsamahin sa isang JavaScript file.

Mga pagkakaiba mula sa Node.js:

  • Hindi gumagamit si Deno ng npm package manager
    at hindi nakatali sa mga repositoryo, ang mga module ay tinutugunan sa pamamagitan ng isang URL o ng isang file path, at ang mga module mismo ay maaaring ilagay sa anumang website;
  • Hindi gumagamit si Deno ng "package.json" upang tukuyin ang mga module;
  • Ang pagkakaiba ng API, lahat ng asynchronous na pagkilos sa Deno ay nagbabalik ng pangako;
  • Nangangailangan ang Deno ng tahasang kahulugan ng lahat ng kinakailangang pahintulot para sa mga file, network at mga variable ng kapaligiran;
  • Ang lahat ng mga error na hindi ibinigay sa mga humahawak ay humahantong sa pagwawakas ng aplikasyon;
  • Ginagamit ni Deno ang ECMAScript module system at hindi sumusuporta sa require();
  • Ang built-in na HTTP server ng Deno ay nakasulat sa TypeScript at tumatakbo sa ibabaw ng mga native na TCP socket, habang ang Node.js HTTP server ay nakasulat sa C at nagbibigay ng mga binding para sa JavaScript. Nakatuon ang mga developer ni Deno sa pag-optimize sa buong TCP socket layer at pagbibigay ng mas pangkalahatang interface. Nagbibigay ang Deno HTTP Server ng mas mababang throughput ngunit ginagarantiyahan ang predictable na mababang latency. Halimbawa, sa pagsubok, ang isang simpleng application batay sa Deno HTTP server ay nakapagproseso ng 25 libong mga kahilingan bawat segundo na may maximum na latency na 1.3 millisecond. Sa Node.js, ang isang katulad na application ay nagproseso ng 34 na libong kahilingan bawat segundo, ngunit ang mga latency ay mula 2 at 300 millisecond.
  • Ang Deno ay hindi tugma sa mga pakete para sa Node.js (NPM), ngunit hiwalay na binuo interlayer para sa pagiging tugma sa karaniwang library ng Node.js, habang umuunlad ito, parami nang parami ang mga application na isinulat para sa Node.js ang magagawang tumakbo sa Deno.
  • Pinagmulan: opennet.ru

Magdagdag ng komento