Deno
Шаблон:Notability
| |
Тип | Run-time environment |
---|---|
Автор(и) | Ryan Dahl |
Розробник | різні |
Перший випуск | 13 травня 2018[1] |
Версії | 1.18.0 (20 січня 2022)[2] |
Репозиторій | https://github.com/denoland/deno |
Нестабільний випуск | 0.32.0 (3 лютого 2020[3]) |
Операційна система | Linux, macOS, Microsoft Windows |
Мова програмування | TypeScript, JavaScript, Rust, C++ |
Ліцензія | MIT license[4][5] |
Онлайн-документація | deno.land/manual(англ.) |
Вебсайт | deno.land |
Deno у Вікісховищі |
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 досить завантажити для своєї платформи один виконуваний файл, розміром близько 10 Мб, що не мають зовнішніх залежностей і не вимагає якогось особливого установки в систему;
- При запуску програми, а також для завантаження модулів можна використовувати адресацію через 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/liltest@0.0.5/dist/liltest.js";
- До складу інтегрована система інспектування залежностей (команда "deno info") і утиліта для форматування коду (deno fmt).
- Для розробників застосунків запропонований набір стандартних модулів, які пройшли додатковий аудит і перевірку на сумісність;
- Всі скрипти застосунку можуть бути об'єднані в один JavaScript файл.
Відмінності від Node.js:
- Deno не використовує пакетний менеджер npm і не прив'язується до репозиторіїв, адресація модулів здійснюється через URL або по файловому путі, а самі модулі можуть розміщуватися на будь-якому сайті;
- У Deno не використовується package.json для визначення модулів;
- Різниця API, все асинхронні дії в Deno повертають promise;
- Deno вимагає явного визначення всіх необхідних повноважень для файлів, мережі та змінних оточення;
- Всі помилки, які не забезпечені обробниками, призводять до завершення виконання програми;
- У Deno застосовується система модулів ECMAScript і не підтримується require().
Виноски
- Contributors, denoland/deno, Github. Процитовано 5 July 2019.
- https://github.com/denoland/deno/releases/tag/v1.18.0
- Deno 0.32.0. Процитовано 3 лютого 2020 — через GitHub.
- deno/LICENSE at master. GitHub. Процитовано 5 липня 2019.
- The MIT License. Open Source Initiative. 17 вересня 2018. Процитовано 17 вересня 2018.