В этой статье слишком много ссылок на первоисточники . ( Август 2019 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Автор (ы) оригинала | Райан Даль |
---|---|
Разработчики) | Разные |
изначальный выпуск | 13 мая 2018 г . [1] |
Стабильный выпуск | 1.8.1 [2] / 9 марта 2021 г . |
Репозиторий | github |
Написано в | TypeScript , JavaScript , Rust , C ++ (привязки V8) |
Операционная система | Linux , macOS , Microsoft Windows |
Тип | Среда выполнения |
Лицензия | Лицензия MIT [3] [4] |
Интернет сайт | Дино |
Deno - это среда выполнения для JavaScript и TypeScript , основанная на движке V8 JavaScript и языке программирования Rust . Он был создан Райаном Далем , первоначальным создателем 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 и использовал буферы протокола для сериализации между привилегированной (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 стремится быть продуктивной средой написания сценариев для современного программиста. [7] Подобно Node.js, Deno делает упор на управляемую событиями архитектуру , предоставляя набор неблокирующих основных утилит ввода-вывода вместе с их блокирующими версиями. Deno можно использовать для создания веб-серверов , выполнения научных вычислений и т. Д. Deno - это программное обеспечение с открытым исходным кодом под лицензией MIT . [18]
Сравнение с Node.js [ править ]
Deno и Node.js - это среды выполнения, построенные на движке Google V8 JavaScript , который используется в Google Chrome . Оба они имеют внутренние циклы событий и предоставляют интерфейсы командной строки для запуска сценариев и широкого набора системных утилит.
Deno в основном отличается от Node.js в следующих аспектах: [7]
- Использует ES Module в качестве модульной системы по умолчанию вместо CommonJS .
- Использует URL-адреса для загрузки локальных или удаленных зависимостей, как в браузерах .
- Включает встроенный диспетчер пакетов для выборки ресурсов, поэтому npm не требуется .
- Поддерживает TypeScript «из коробки», используя компилятор TypeScript со снэпшотом с механизмами кэширования.
- Стремится к лучшей совместимости с браузерами с широким спектром веб-API.
- Обеспечивает доступ к файловой системе и сети для запуска изолированного кода.
- Изменяет API для использования функций promises, ES6 и TypeScript.
- Минимизирует размер основного API, обеспечивая большую стандартную библиотеку без внешних зависимостей.
- Использование каналов передачи сообщений для вызова привилегированных системных API и привязок.
Релизы [ править ]
Версия | Последняя микро-версия | Дата выхода | Дата последней микроверсии | Описание |
---|---|---|---|---|
0.1.0 | 0.1.12 | 2018-08-23 | 2018-11-12 | Rust rewrite и снимок V8 |
0.2.0 | 0.2.11 | 2018-11-27 | 2019-02-08 | Умеренно пригодный к употреблению |
0.3.0 | 0.3.10 | 2019-02-18 | 2019-04-25 | Вместо импорта модуля «означать» теперь есть глобальная переменная «Deno». |
0.4.0 | 0.4.0 | 2019-05-03 | 2019-05-03 | - |
0.5.0 | 0.5.0 | 2019-05-11 | 2019-05-11 | - |
0.6.0 | 0.6.0 | 2019-05-20 | 2019-05-20 | - |
0.7.0 | 0.7.0 | 2019-05-29 | 2019-05-29 | - |
0.8.0 | 0.8.0 | 2019-06-08 | 2019-06-08 | - |
0.9.0 | 0.9.0 | 2019-06-15 | 2019-06-15 | - |
0.10.0 | 0.10.0 | 2019-06-25 | 2019-06-25 | - |
0.11.0 | 0.11.0 | 2019-07-06 | 2019-07-06 | - |
0.12.0 | 0.12.0 | 2019-07-16 | 2019-07-16 | - |
0,13,0 | 0,13,0 | 2019-07-31 | 2019-07-31 | - |
0,14,0 | 0,14,0 | 2019-08-09 | 2019-08-09 | - |
0,15,0 | 0,15,0 | 2019-08-13 | 2019-08-13 | - |
0,16,0 | 0,16,0 | 2019-08-22 | 2019-08-22 | - |
0,17,0 | 0,17,0 | 2019-09-04 | 2019-09-04 | - |
0,18,0 | 0,18,0 | 2019-09-13 | 2019-09-13 | - |
0,19,0 | 0,19,0 | 2019-09-24 | 2019-09-24 | - |
0.20.0 | 0.20.0 | 2019-10-06 | 2019-10-06 | - |
0,21,0 | 0,21,0 | 2019-10-19 | 2019-10-19 | - |
0,22,0 | 0,22,0 | 2019-10-28 | 2019-10-28 | - |
0,23,0 | 0,23,0 | 2019-11-04 | 2019-11-04 | - |
0,24,0 | 0,24,0 | 2019-11-14 | 2019-11-14 | - |
0,25,0 | 0,25,0 | 2019-11-26 | 2019-11-26 | - |
0,26,0 | 0,26,0 | 2019-12-05 | 2019-12-05 | - |
0,27,0 | 0,27,0 | 2019-12-18 | 2019-12-18 | - |
0,28,0 | 0,28,1 | 2020-01-02 | 2020-01-03 | - |
0,29,0 | 0,29,0 | 2020-01-09 | 2020-01-09 | - |
0,30,0 | 0,30,0 | 2020-01-17 | 2020-01-17 | - |
0,31,0 | 0,31,0 | 2020-01-24 | 2020-01-24 | - |
0,32,0 | 0,32,0 | 2020-02-03 | 2020-02-03 | - |
0,33,0 | 0,33,0 | 2020-02-13 | 2020-02-13 | - |
0,34,0 | 0,34,0 | 2020-02-20 | 2020-02-20 | - |
0,35,0 | 0,35,0 | 2020-02-28 | 2020-02-28 | - |
0,36,0 | 0,36,0 | 2020-03-11 | 2020-03-11 | - |
0,37,0 | 0,37,1 | 2020-03-23 | 2020-03-23 | - |
0,38,0 | 0,38,0 | 2020-03-28 | 2020-03-28 | - |
0,39,0 | 0,39,0 | 2020-04-03 | 2020-04-03 | - |
0,40,0 | 0,40,0 | 2020-04-08 | 2020-04-08 | - |
0,41,0 | 0,41,0 | 2020-04-16 | 2020-04-16 | - |
0,42,0 | 0,42,0 | 2020-04-29 | 2020-04-29 | - |
1.0.0 | 1.0.5 | 2020-05-13 | 2020-06-03 | - |
1.1.0 | 1.1.3 | 2020-06-12 | 2020-07-03 | - |
1.2.0 | 1.2.3 | 2020-07-13 | 2020-08-08 | - |
1.3.0 | 1.3.3 | 2020-08-13 | 2020-09-04 | - |
1.4.0 | 1.4.6 | 2020-09-13 | 2020-10-10 | - |
1.5.0 | 1.5.4 | 2020-10-27 | 2020-11-23 | Более быстрое встряхивание и объединение деревьев, переработанный REPL |
1.6.0 | 1.6.3 | 2020-12-08 | 2020-12-30 | Компиляция автономных двоичных файлов с помощью функции «компилировать обозначение», поддержка TypeScript 4.1, экспериментальная поддержка Mac ARM64 |
1.7.0 | 1.7.5 | 2021-02-05 | 2021-02-19 | Кросс-компиляция и двоичные файлы меньшего размера на 60% для компиляции обозначения, API преобразователя DNS, поддержка URL-адресов данных в операторах импорта и веб-воркерах |
1.8.0 | 1.8.1 | 2021-03-02 | 2021-03-09 | Экспериментальная поддержка API WebGPU, встроенные API-интерфейсы интернационализации включены, поддержка выборки частных модулей, обновленный инструментарий покрытия, поддержка TypeScript 4.2 |
Легенда: Старая версия Последняя версия Будущий выпуск |
Через официальную страницу релизов [19]
Пример [ править ]
Это запускает базовый сценарий Deno без каких-либо разрешений файловой системы или сети ( режим песочницы ):
обозначаем запуск main.ts
Для включения разрешений требуются явные флаги:
обозначает запуск --allow-read --allow-net main.ts
Чтобы проверить дерево зависимостей скрипта, используйте info
подкоманду:
Обозначение info main.ts
Базовый Hello, World! программа в Deno выглядит так же, как в Node.js:
консоль . log ( "Привет, мир!" );
Глобальное Deno
пространство имен предоставляет API, недоступные в браузере. Программа Cat для Unix может быть реализована следующим образом:
/ * cat.ts * // * API-интерфейсы Deno доступны через пространство имен `Deno`. * / const { stdout , open , copy , args } = Deno ;// верхнего уровня Await поддерживается для ( пусть я = 0 ; I < арг . Длина ; I ++ ) { Const имя_файла = арг [ я ]; // Получает аргументы командной строки. const file = await open ( имя файла ); // Открывает соответствующий файл для чтения. ждать копию ( файл , стандартный вывод ); // Выполняет асинхронное копирование с нулевым копированием из файла в stdout. }
Deno.copy
Функция , используемая выше работает как Гоу io.Copy
, где stdout
( стандартный вывод ) является местом Writer
, и file
является источником Reader
. Чтобы запустить эту программу, нам нужно разрешить чтение файловой системы :
обозначение run --allow-read cat.ts myfile
Следующий сценарий Deno реализует базовый HTTP-сервер :
// Импортирует службу из удаленной стандартной библиотеки Deno, используя URL. импортировать { serve } из "https://deno.land/[email protected]/http/server.ts" ;// Функция `serve` возвращает асинхронный итератор, выдавая поток запросов на await ( const req of serve ({ port : 8000 })) { req . ответить ({ body : "Hello, World! \ n" }); }
При запуске этой программы Deno автоматически загрузит и кэширует файлы удаленной стандартной библиотеки и скомпилирует код. Точно так же мы можем запустить сценарий стандартной библиотеки (например, файловый сервер ) напрямую без явной загрузки, указав URL-адрес в качестве входного имени файла ( -A
включает все разрешения):
$ означает запустить -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 .
- ^ "Выпуск 1.8.1" . 9 марта 2021 . Проверено 10 марта 2021 года .
- ^ "означать / ЛИЦЕНЗИЯ на мастера" . GitHub . Дата обращения 5 июля 2019 .
- ^ "Лицензия Массачусетского технологического института" . Инициатива открытого исходного кода . 17 сентября 2018 . Проверено 17 сентября 2018 года .
- ^ «Deno: безопасная среда выполнения TypeScript V8 от оригинального создателя Node.js» . InfoQ . Проверено 17 мая 2019 .
- ^ a b JSConf (06.06.2018), 10 вещей, о которых я сожалею о Node.js - Райан Даль - JSConf EU 2018 , получено 17 мая 2019 г.
- ^ a b c "Руководство Deno" . обозначение . земля . Проверено 17 мая 2019 .
- ^ Пол Крилл (2018-06-21). «Сожаления Райана Даля о Node.js привели к Deno» . InfoWorld .
- ^ Даль, Райан (2018-06-06). «Ошибки проектирования в Node» (PDF) . Github .
- ^ "деноланд / дина, ветвь" голанг " " . Github .
- ^ «Предложение: изучите возможность переноса на Rust и использования Tokio» . GitHub .
- ^ «Tokio - Асинхронная среда выполнения для языка программирования Rust» . Tokio.rs .
- ^ "Protobuf кажется слишком накладным для этого варианта использования?" . Github .
- ^ "Удалить плоские буферы" . GitHub .
- ^ "Заменить флетбуферы" . GitHub .
- ^ "denoland / means_std: означает стандартные модули" . Github .
- ^ "Deno 1.0" . обозначение . земля . Проверено 14 мая 2020 .
- ^ «Deno готов к производству» . InfoQ . Проверено 1 июля 2020 .
- ^ «Релизы» . 2020-12-30 . Проверено 14 января 2021 .
Внешние ссылки [ править ]
- Официальный веб-сайт