Deno / d iː n oʊ / [5] — это среда выполнения для JavaScript , TypeScript и WebAssembly , основанная на движке JavaScript V8 и языке программирования Rust . Соавтором Deno был Райан Дал , который также создал Node.js. [6]
Deno явно берет на себя роль среды выполнения и менеджера пакетов в одном исполняемом файле , вместо того, чтобы требовать отдельной программы управления пакетами . [5] [7]
Deno был анонсирован на JSConf EU 2018 Райаном Далем в его выступлении «10 вещей, о которых я сожалею о Node.js». [8] В своем выступлении Даль упомянул о своих сожалениях по поводу первоначальных проектных решений с использованием Node.js, сосредоточив внимание на своем решении не использовать обещания при проектировании API , использовании устаревшей системы сборки GYP , node_modules и package.json, оставив без файла файл . расширения, волшебное разрешение модулей с помощью index.js и выход из изолированной среды V8. [9] В конце концов он представил прототип Deno, стремясь добиться привязки системных вызовов посредством передачи сообщений с помощью инструментов сериализации, таких как протокольные буферы , и предоставить флаги командной строки для контроля доступа .
Изначально Deno был написан на Go и использовал буферы протоколов для сериализации между привилегированной (Go, с доступом к системным вызовам) и непривилегированной (V8) сторонами. [10] Однако вскоре Go был заменен на Rust из-за опасений, связанных с двойным временем выполнения и необходимостью сборки мусора . [11] Tokio была представлена вместо libuv как асинхронная платформа, управляемая событиями, [12] и FlatBuffers был принят для более быстрой сериализации и десериализации с «нулевым копированием» [13] , но позже, в августе 2019 года, FlatBuffers был удален [14] ] после публикации тестов, которые измеряли значительные накладные расходы на сериализацию в апреле 2019 года. [15]
Стандартная библиотека, созданная по образцу стандартной библиотеки Go, была создана в ноябре 2018 года и предоставляет обширные инструменты и утилиты, частично решая проблему взрыва дерева зависимостей Node.js. [16]
Официальный Deno 1.0 был выпущен 13 мая 2020 года. [17]
Deno Deploy, вдохновленный Cloudflare Workers, [18] был выпущен 23 июня 2021 года . [19] Анонсировано 4 мая 2022 года. В бета-версии 4 улучшена панель мониторинга и добавлены функции выставления счетов. Публичная доступность Deno Deploy ожидается в третьем квартале 2022 года. [20]
Deno Fresh 1.0 был анонсирован 28 июня 2022 года. [21] Он включает в себя новую полнофункциональную веб-инфраструктуру для Deno, которая не отправляет клиенту нулевой JavaScript. В инфраструктуре нет этапа сборки, что позволяет на порядок сократить время развертывания. Версия 1.1 вышла 8 сентября 2022 года. [22]
Бета-версия Deno SaaSKit была анонсирована 4 апреля 2023 года. [23] Это современный SaaS-шаблон с открытым исходным кодом, созданный с помощью Fresh и Deno.
Deno стремится стать продуктивной и безопасной средой сценариев для современного программиста. [5] Подобно Node.js, Deno делает упор на архитектуру, управляемую событиями , предоставляя набор неблокирующих основных утилит ввода-вывода, а также их блокирующие версии. Deno можно использовать для создания веб-серверов , выполнения научных вычислений и т. д. Deno — это программное обеспечение с открытым исходным кодом под лицензией MIT . [24]
Deno и Node.js — это среды выполнения, построенные на движке JavaScript V8 , разработанном проектом Chromium Project, движке, используемом для веб-браузеров Chromium и Google Chrome . Оба они имеют внутренние циклы событий и предоставляют интерфейсы командной строки для запуска сценариев и широкого спектра системных утилит.
Deno в основном отличается от Node.js в следующих аспектах: [5]
npm:
и, node:
для импорта модулей NPM или Polyfill Node.JS. Node.js поддерживает как URL-адреса [27], так и модули.29 марта 2021 года было объявлено о создании Deno Land Inc при поддержке в миллионы долларов со стороны Shasta Ventures , Mozilla Corporation и некоторых других. Он был создан для дальнейшего развития Deno и предоставления коммерческих предложений пользователям. [1]
Год спустя Deno объявила о дополнительном финансировании серии А на сумму 21 миллион долларов под руководством Sequoia Capital . [31]
Таблицы ниже были созданы с использованием официальной страницы релизов. [32]
Базовый Привет, Мир! программа в Дено:
консоль . log ( "Привет, Мир!" );
Глобальные Deno
пространства имен предоставляют API, недоступные в браузере. Реализация программы Unix cat : [1]
/** * cat.ts */ for ( const имя файла Deno . args ) { const file = await Deno . открыть ( имя файла ); жду файл . удобочитаемый . PipeTo ( Deno . stdout . writable , { preventClose : true }); }
Простой веб-сервер : [2]
Дено . служить (( req ) => новый ответ ( «привет, мир» ));
Deno автоматически загружает и кэширует файлы удаленной стандартной библиотеки при запуске сценария, а затем компилирует код.
Аналогично, он может запускать стандартный библиотечный сценарий (например, файловый сервер ) напрямую, без явной загрузки, указав URL-адрес в качестве имени входного файла ( -A
включает все разрешения):
$ deno run -A https://deno.land/std/http/file_server.ts Скачать https://deno.land/std/http/file_server.ts Компилировать https://deno.land/std/http/file_server .ts ... HTTP-сервер прослушивает http://0.0.0.0:4500/