Автор Node.js представив захищену JavaScript-платформу Deno 1.0

Після двох років розробки представлений перший значний випуск Дено 1.0, платформи для окремого виконання програм на мовах JavaScript і TypeScript, яка може бути використана для створення обробників, що працюють на сервері. Платформу розвиває Райан Даль (Райан Даль), творець 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, так і у звичайному веб-браузері;
  • Наявність стандартного набору модуліввикористання яких не вимагає прив'язки до зовнішніх залежностей. Модулі зі стандартної колекції пройшли додатковий аудит та перевірку на сумісність;
  • Крім 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

Додати коментар або відгук