Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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]

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

Релизы [ править ]

Через официальную страницу релизов [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/

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

  1. ^ "Авторы, denoland / означать, Github" . Дата обращения 5 июля 2019 .
  2. ^ "Выпуск 1.8.1" . 9 марта 2021 . Проверено 10 марта 2021 года .
  3. ^ "означать / ЛИЦЕНЗИЯ на мастера" . GitHub . Дата обращения 5 июля 2019 .
  4. ^ "Лицензия Массачусетского технологического института" . Инициатива открытого исходного кода . 17 сентября 2018 . Проверено 17 сентября 2018 года .
  5. ^ «Deno: безопасная среда выполнения TypeScript V8 от оригинального создателя Node.js» . InfoQ . Проверено 17 мая 2019 .
  6. ^ a b JSConf (06.06.2018), 10 вещей, о которых я сожалею о Node.js - Райан Даль - JSConf EU 2018 , получено 17 мая 2019 г.
  7. ^ a b c "Руководство Deno" . обозначение . земля . Проверено 17 мая 2019 .
  8. ^ Пол Крилл (2018-06-21). «Сожаления Райана Даля о Node.js привели к Deno» . InfoWorld .
  9. ^ Даль, Райан (2018-06-06). «Ошибки проектирования в Node» (PDF) . Github .
  10. ^ "деноланд / дина, ветвь" голанг " " . Github .
  11. ^ «Предложение: изучите возможность переноса на Rust и использования Tokio» . GitHub .
  12. ^ «Tokio - Асинхронная среда выполнения для языка программирования Rust» . Tokio.rs .
  13. ^ "Protobuf кажется слишком накладным для этого варианта использования?" . Github .
  14. ^ "Удалить плоские буферы" . GitHub .
  15. ^ "Заменить флетбуферы" . GitHub .
  16. ^ "denoland / means_std: означает стандартные модули" . Github .
  17. ^ "Deno 1.0" . обозначение . земля . Проверено 14 мая 2020 .
  18. ^ «Deno готов к производству» . InfoQ . Проверено 1 июля 2020 .
  19. ^ «Релизы» . 2020-12-30 . Проверено 14 января 2021 .

Внешние ссылки [ править ]

  • Официальный веб-сайт