Deno (программное обеспечение)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Deno
Логотип программы Deno
Тип Среда выполнения
Автор Райан Даль
Разработчик The Deno Company[1] and contributors
Написана на TypeScript, JavaScript, Rust, C++
Операционные системы Linux[4], macOS[4], Windows[4] и FreeBSD[5]
Первый выпуск 13 мая 2018[2]
Последняя версия
Репозиторий github.com/denoland/deno
Лицензия лицензия MIT[6]
Сайт deno.com (англ.)
Логотип Викисклада Медиафайлы на Викискладе

Deno — программная платформа, среда выполнения для JavaScript и TypeScript, основанная на движке JavaScript V8 и написанная на языке программирования Rust. Проект Deno был создан Райаном Далем, создателем Node.js[7]. Deno совмещает функциональность среды выполнения и пакетного менеджера[8][9].

История[править | править код]

Проект Deno был анонсирован Райаном Далем в выступлении «10 вещей, о которых я сожалею в Node.js», которое прозвучало на JSConf EU 2018[10]. В этом выступлении Даль выразил сожаление по поводу ряда архитектурных решений, принятых им самим в Node.js[11]. В конце доклада он представил прототип Deno.

Первоначально Deno был написан на Go и использовал Protocol Buffers для обмена сообщениями между привилегированной частью движка (написанной на Go и имеющей доступ к вызову системных функций) и непривилегированной (средой выполнения JavaScript, основанной на V8)[12]. Однако вскоре Go был заменен на Rust из-за проблем, вызванных наличием двух сред выполнения в рамках одного процесса, каждая из которых использовала собственный сборщик мусора[13]. Библиотека libuv, реализующая асинхронную обработку событий, была заменена на Tokio[14], а также был проведен эксперимент с заменой технологии Protocol Buffers на Flat Buffers, который был признан неудачным из-за проблем с производительностью[15][16][17].

Стандартная библиотека по образцу стандартной библиотеки языка программирования Go, была представлена в ноябре 2018. Этот шаг был предпринят в попытке избежать проблемы, существовавшей в среде выполнения Node.js — из-за скудности стандартной библиотеки, использующим Node.js разработчикам приходится подключать к своим проектам внешние зависимости для решения базовых задач[18].

Официальная версия Deno 1.0 была выпущена 13 мая 2020 г[19].

29 марта 2021 года было объявлено о создании компании Deno. Проект получил финансовую поддержку от Shasta Ventures, Mozilla Corporation и некоторых других компаний. Компания была создана для обеспечения дальнейшего развития Deno, а также для разработки коммерческих решений на основе технологии.

Обзор[править | править код]

Целью Deno является создание эргономичной среды выполнения для современного программиста[8]. Подобно Node.js, Deno реализует событийно-ориентированную архитектуру, предоставляя набор неблокирующих методов управления вводом-выводом. Deno можно использовать для создания веб-серверов, выполнения научных вычислений и т. д.[20]

Сравнение с Node.js[править | править код]

Deno и Node.js — это среды выполнения, основанные на движке JavaScript V8, который используется в Google Chrome. Обе среды выполнения основаны на обработке цикла событий и предоставляют интерфейсы командной строки для запуска скриптов.

Основные отличия Deno от Node.js заключаются в следующем:[8]

  1. Deno использует стандарт ES Module вместо CommonJS.
  2. Deno использует URL-адреса для подключения локальных или удаленных внешних зависимостей.
  3. Deno имеет встроенный пакетный менеджер, то есть внешние решения подобные npm не требуются.
  4. Deno поддерживает TypeScript, используя встроенный компилятор TypeScript с механизмами кэширования.
  5. Deno уделяет особое внимание совместимости с браузерами на уровне исходного кода.
  6. Deno по умолчанию ограничивает доступ JavaScript-кода к файловой системе, сети и прочим системам.
  7. Deno реализует новое API Promises и других функций ES6 и TypeScript.
  8. Основное API Deno имеет небольшой размер, при этом рантайм предоставляет обширную стандартную библиотеку без внешних зависимостей.
  9. Deno использует каналы передачи сообщений для вызова привилегированных системных API.

Примечания[править | править код]

  1. Ryan Dahl, Bert Belder. Announcing the Deno Company (29 марта 2021).
  2. https://github.com/denoland/deno/graphs/contributors (англ.) // (unknown type) — 2007.
  3. Release 1.42.4 — 2024.
  4. 1 2 3 https://deno.land/manual@v1.30.0/getting_started/installation
  5. https://www.freshports.org/www/deno
  6. https://github.com/denoland/deno/blob/master/LICENSE
  7. Deno: Secure V8 TypeScript Runtime from Original Node.js Creator. InfoQ. Дата обращения: 17 мая 2019. Архивировано 8 января 2020 года.
  8. 1 2 3 Deno Manual. deno.land. Дата обращения: 17 мая 2019. Архивировано 8 января 2020 года.
  9. Paul Krill. Ryan Dahl’s Node.js regrets lead to Deno. InfoWorld (21 июня 2018). Дата обращения: 26 апреля 2021. Архивировано 25 апреля 2020 года.
  10. JSConf (2018-06-06), 10 Things I Regret About Node.js - Ryan Dahl - JSConf EU 2018, Архивировано 17 мая 2019, Дата обращения: 26 апреля 2021 Источник. Дата обращения: 26 апреля 2021. Архивировано 25 апреля 2020 года.
  11. Dahl. Design mistakes in Node. Github (6 июня 2018).
  12. denoland/deno, branch "golang". Github.
  13. Suggestion: Look into porting to Rust and using Tokio. GitHub. Дата обращения: 26 апреля 2021. Архивировано 29 августа 2018 года.
  14. Tokio - The asynchronous run-time for the Rust programming language. Tokio.rs. Дата обращения: 26 апреля 2021. Архивировано 20 мая 2020 года.
  15. Remove flatbuffers. GitHub. Дата обращения: 26 апреля 2021. Архивировано 26 ноября 2020 года.
  16. Protobuf seems like a lot of overhead for this use case? Github. Дата обращения: 26 апреля 2021. Архивировано 8 декабря 2020 года.
  17. Replace flatbuffers. GitHub. Дата обращения: 26 апреля 2021. Архивировано 26 ноября 2020 года.
  18. denoland/deno_std: deno standard modules. Github. Дата обращения: 26 апреля 2021. Архивировано 15 июня 2020 года.
  19. Deno 1.0. deno.land. Дата обращения: 14 мая 2020. Архивировано 14 мая 2020 года.
  20. Deno Is Ready for Production (англ.). InfoQ. Дата обращения: 1 июля 2020. Архивировано 1 июля 2020 года.

Ссылки[править | править код]