Deno (программное обеспечение) - Deno (software)
Эта статья слишком полагается на Рекомендации к основные источники.Август 2019 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Оригинальный автор (ы) | Райан Даль |
---|---|
Разработчики) | Разные |
изначальный выпуск | 13 мая 2018[1] |
Стабильный выпуск | 1.5.4 / 23 ноября 2020 г.[2] |
Репозиторий | github |
Написано в | Машинопись, JavaScript, Ржавчина, C ++ |
Операционная система | Linux, macOS, Майкрософт Виндоус |
Тип | Среда выполнения |
Лицензия | Лицензия MIT[3][4] |
Интернет сайт | обозначать |
Дено это время выполнения за JavaScript и Машинопись это основано на V8 Движок JavaScript и Ржавчина язык программирования. Он был создан Райан Даль, оригинальный создатель Node.js, и ориентирован на продуктивность.[5] Об этом заявил Даль в 2018 году во время выступления «10 вещей, о которых я сожалею о Node.js».[6] Deno явно берет на себя роль как среды выполнения, так и менеджер пакетов в пределах одного исполняемый файл, вместо того, чтобы требовать отдельной программы управления пакетами.[7][8]
История
Deno был объявлен на JSConf EU 2018 Райаном Далем в своем выступлении «10 вещей, о которых я сожалею о Node.js».[6] В своем выступлении Райан выразил сожаление по поводу первоначальных дизайнерских решений с Node.js, сосредоточив внимание на своем выборе не использовать Обещания в API дизайн, использование устаревшей системы сборки GYP, node_modules и package.json, исключение расширений файлов, волшебное разрешение модуля с помощью index.js и нарушение изолированной среды V8.[9] В конце концов он представил прототип Deno, стремясь достичь привязки системных вызовов через передачу сообщений с помощью инструментов сериализации, таких как Буферы протокола и предоставить флаги командной строки для контроль доступа.
Deno изначально был написан на Идти и использовал Буферы протокола для сериализации между привилегированной (Go, с доступом к системному вызову) и непривилегированной (V8) сторонами.[10] Однако вскоре Go был заменен на Ржавчина из-за опасений двойного времени выполнения и вывоз мусора давление.[11] Токио вводится вместо libuv как асинхронная платформа, управляемая событиями,[12] и Плоские буферы адаптирован для более быстрой сериализации и десериализации с нулевым копированием.[13] но позже в августе 2019 года FlatBuffers были окончательно удалены[14] после публикации тестов, которые измерили значительные накладные расходы на сериализацию в апреле 2019 года.[15]
Стандартная библиотека, созданная по образцу стандартной библиотеки Go, была создана в ноябре 2018 года для предоставления обширных инструментов и утилит, частично решающих проблему взрыва дерева зависимостей Node.js.[16]
Официальная версия Deno 1.0 была выпущена 13 мая 2020 года.[17]
Обзор
Deno стремится быть продуктивным сценарии среда для современного программиста.[7] Как и в случае с Node.js, Deno подчеркивает событийная архитектура, предоставляя набор неблокирующий основные утилиты ввода-вывода вместе с их блокирующими версиями. Deno можно использовать для создания веб-серверы, выполнять научные вычисления и т. д. Deno - это программное обеспечение с открытым исходным кодом под Лицензия MIT.[18]
Сравнение с Node.js
Deno и Node.js - это среды выполнения, созданные на базе Google Двигатель JavaScript V8, тот же двигатель, используемый в Гугл Хром. У них обоих есть внутренние петли событий и предоставить интерфейсы командной строки для запуска скриптов и широкого набора системных утилит.
Deno в основном отличается от Node.js в следующих аспектах:[7]
- Использует модуль ES в качестве модульной системы по умолчанию вместо CommonJS.
- Использует URL для загрузки локальных или удаленных зависимостей, аналогично браузеры.
- Включает в себя встроенный менеджер пакетов для выборки ресурсов, поэтому нет необходимости в НПМ.
- Поддерживает Машинопись прямо из коробки, используя снэпшот TypeScript компилятор с механизмами кеширования.
- Стремится к лучшей совместимости с браузерами с широким спектром веб-API.
- Обеспечивает доступ к файловой системе и сети для запуска изолированного кода.
- Изменяет API для использования Обещания, ES6 и функции TypeScript.
- Минимизирует размер основного API, обеспечивая большую стандартную библиотеку без внешних зависимостей.
- Использование каналов передачи сообщений для вызова привилегированных системных API и привязок.
Пример
Это запускает базовый сценарий Deno без какой-либо файловой системы или сетевых разрешений (песочница Режим):
обозначаем запуск main.ts
Для включения разрешений требуются явные флаги:
обозначает запуск --allow-read --allow-net main.ts
Чтобы проверить дерево зависимостей скрипта, используйте Информация
подкоманда:
Обозначение info main.ts
Базовый привет-мир программа в Deno выглядит так же, как в Node.js:
консоль.бревно("Привет, мир");
Глобальный Дено
пространство имен предоставляет API, которые недоступны в браузере. А Unix кошачья программа может быть реализовано следующим образом:
/ * cat.ts * // * API-интерфейсы Deno доступны через пространство имен `Deno`. * /const { стандартный вывод, открыто, копировать, аргументы } = Дено;// Поддерживается ожидание верхнего уровняза (позволять я = 0; я < аргументы.длина; я++) { const имя файла = аргументы[я]; // Получает аргументы командной строки. const файл = Ждите открыто(имя файла); // Открывает соответствующий файл для чтения. Ждите копировать(файл, стандартный вывод); // Выполняет асинхронное копирование с нулевым копированием из `file` в` stdout`.}
В Deno.copy
использованная выше функция работает так же, как в Go io.Copy
, куда стандартный вывод
(стандартный вывод ) это пункт назначения Писатель
, и файл
это источник Читатель
. Чтобы запустить эту программу, нам нужно включить разрешение на чтение для файловая система:
обозначение run --allow-read cat.ts myfile
Следующий сценарий Deno реализует базовый HTTP сервер:
// Импортирует `serve` из удаленной стандартной библиотеки Deno, используя URL.импорт { обслуживать } из "https://deno.land/[email protected]/http/server.ts";// Функция `serve` возвращает асинхронный итератор, выдавая поток запросовза Ждите (const req из обслуживать({ порт: 8000 })) { req.отвечать({ тело: "Привет, мир n" });}
При запуске этой программы Deno автоматически загрузит и кэширует файлы удаленной стандартной библиотеки и скомпилирует код. Точно так же мы можем запустить сценарий стандартной библиотеки (например, файловый сервер ) напрямую без явной загрузки, указав URL-адрес в качестве входного имени файла (-А
включает все разрешения):
$ обозначаем запуск -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/
Рекомендации
- ^ "Авторы, denoland / означает, Github". Получено 5 июля 2019.
- ^ "Релизы · denoland / означать". Получено 2020-11-23.
- ^ «означает / ЛИЦЕНЗИЯ на мастера». GitHub. Получено 5 июля 2019.
- ^ "Лицензия MIT". Инициатива открытого исходного кода. 17 сентября 2018 г.. Получено 17 сентября 2018.
- ^ «Deno: безопасная среда выполнения TypeScript V8 от оригинального создателя Node.js». InfoQ. Получено 2019-05-17.
- ^ а б АОонф (2018-06-06), 10 вещей, о которых я сожалею о Node.js - Райан Даль - JSConf EU 2018, получено 2019-05-17
- ^ а б c "Руководство Deno". обозначение земли. Получено 2019-05-17.
- ^ Пол Крилл (21.06.2018). "Сожаления Райана Даля о Node.js привели к Deno". InfoWorld.
- ^ Даль, Райан (2018-06-06). «Ошибки проектирования в Node» (PDF). Github.
- ^ "деноланд / дина, ветвь" голанг"". Github.
- ^ «Предложение: изучите возможность переноса на Rust и использования Tokio». GitHub.
- ^ «Tokio - асинхронная среда выполнения для языка программирования Rust». Tokio.rs.
- ^ "Protobuf кажется слишком накладным для этого варианта использования?". Github.
- ^ "Удалить плоские буферы". GitHub.
- ^ «Заменить флетбуферы». GitHub.
- ^ "denoland / identify_std: означает стандартные модули". Github.
- ^ "Deno 1.0". обозначение земли. Получено 2020-05-14.
- ^ «Deno готов к производству». InfoQ. Получено 2020-07-01.