Deno — програмний проєкт, що пропонує схожу на Node.js платформу для відокремленого виконання застосунків на мовах JavaScript і TypeScript, яка може бути використана для виконання застосунків без прив'язки до браузера, наприклад, для створення обробників, що працюють на сервері. У Deno використовується JavaScript-рушій V8, який також застосовується в Node.js і браузерах на основі проєкту Chromium.

Код проєкту поширюється під ліцензією MIT. Проєкт розвиває Раян Дал (Ryan Dahl), творець JavaScript-платформи Node.js.

Особливості Однією з головних цілей створення нового runtime для JavaScript є надання більш захищеного оточення. Для підвищення безпеки обв'язка навколо рушія V8 написана на мові Rust, що дозволяє уникнути багатьох вразливостей, що виникають через низькорівневу роботу з пам'яттю, таких як звернення до області пам'яті після її звільнення, розіменування нульових вказівників і вихід за межі буфера. Для обробки запитів в неблокуючому режимі застосовується платформа Tokio, яка також написана на мові Rust. Tokio дозволяє створювати високопродуктивні застосунки на основі подієво-орієнтованої архітектури (Event-driven), що підтримують багатонитевість і обробку мережевих запитів в асинхронному режимі.

Основні особливості Deno: Орієнтація на безпеку в конфігурації за замовчуванням. Звернення до файлів, мережеві можливості і доступ до змінних оточення за замовчуванням блоковані і вимагають явного увімкнення; Вбудована підтримка мови TypeScript, окрім JavaScript; Runtime поставляється в формі одного самодостатнього виконуваного файлу («deno»). Для запуску застосунків за допомогою Deno досить завантажити для своєї платформи один виконуваний файл, розміром близько 100 Мб, що не має зовнішніх залежностей і не вимагає якоїсь особливої установки в систему; При запуску програми, а також для завантаження модулів можна використовувати адресацію через URL. Наприклад, для запуску програми welcome.js можна використовувати команду deno https://deno.land/std/examples/welcome.js Код з зовнішніх ресурсів завантажується і кешується на локальній системі, але ніколи автоматично не оновлюється (для поновлення потрібно явно запустити застосунок з ключем «--reload»); Ефективна обробка в застосунках мережевих запитів по HTTP. Платформа розрахована на створення високопродуктивних мережевих застосунків; Можливість створення універсальних вебзастосунків, які можуть виконатися як в Deno, так і в звичайному веббраузері; Крім runtime платформа Deno також виконує роль пакетного менеджера і дозволяє всередині коду звертатися до модулів по URL. Наприклад, для завантаження модуля можна вказати в коді: import * as log from "https://deno.land/std/log/mod.ts" Файли, завантажені з зовнішніх серверів по URL, кешуються. Прив'язка до версій модулів здійснюється через зазначення номерів версій всередині URL, наприклад, «https://unpkg.com/[email protected]/dist/liltest.js»; До складу входить інтегрована система інспектування залежностей (команда «deno info») і утиліта для форматування коду (deno fmt). Для розробників застосунків запропонований набір стандартних модулів, які пройшли додатковий аудит і перевірку на сумісність; Всі скрипти застосунку можуть бути об'єднані в один JavaScript файл.

Відмінності від Node.js: Deno не використовує пакетний менеджер npm і не прив'язується до репозиторіїв, адресація модулів здійснюється через URL або за файловим шляхом, а самі модулі можуть розміщуватися на будь-якому сайті; Різниця в API: всі асинхронні дії в Deno повертають promise; Deno вимагає явного зазначення всіх необхідних повноважень для файлів, мережі та змінних оточення; Всі помилки, які не забезпечені обробниками, призводять до завершення виконання програми; У Deno застосовується система модулів ECMAScript і не підтримується require().

Виноски

Посилання