Одной из главных целей создания нового runtime для JavaScript является предоставление более защищённого окружения. Для повышения безопасности обвязка вокруг движка V8 написана на языке Rust, позволяющем избежать многих уязвимостей, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей и выход за границы буфера. Для обработки запросов в неблокирующем режиме применяется платформа Tokio, также написанная на языке Rust. Tokio позволяет создавать высокопроизводительные приложения на основе событийно-ориентированной архитектуры (Event-driven), поддерживающие многопоточность и обработку сетевых запросов в асинхронном режиме.
Основные особенности Deno:
- Ориентация на безопасность в конфигурации по умолчанию. Обращения к файлам, сетевые возможности и доступ к переменным окружения по умолчанию блокированы и требуют явного включения;
- Встроенная поддержка языка TypeScript помимо JavaScript;
- Runtime поставляется в форме одного самодостаточного исполняемого файла («deno»). Для запуска приложений при помощи Deno достаточно загрузить для своей платформы один исполняемый файл, размером около 10 Мб, не имеющих внешних зависимостей и не требующий какой-то особой установки в систему;
- При запуске программы, а также для загрузки модулей можно использовать адресацию через URL. Например, для запуска программы welcome.js можно использовать команду «deno https://deno.land/std/examples/welcome.js». Код с внешних ресурсов загружается и кэшируется на локальной системе, но никогда автоматически не обновляется (для обновления требуется явно запустить приложение с флагом «—reload»);
- Эффективная обработка в приложениях сетевых запросов по HTTP, платформа рассчитана на создание высокопроизводительных сетевых приложений;
- Возможность создания универсальных web-приложений, которые могут выполниться как в Deno, так и в обычном web-браузере;
- Кроме runtime платформа Deno также выполняет роль пакетного менеджера и позволяет внутри кода обращаться к модулям по URL. Например, для загрузки модуля можно указать в коде «import * as log from «https://deno.land/std/log/mod.ts». Файлы, загруженные с внешних серверов по URL кэшируются. Привязка к версиям модулей определяются через указания номеров версий внутри URL, например, «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- В состав интегрирована система инспектирования зависимостей (команда «deno info») и утилита для форматирования кода (deno fmt).
- Для разработчиков приложений предложен набор стандартных модулей, прошедших дополнительный аудит и проверку на совместимость;
- Все скрипты приложения могут быть объединены в один JavaScript файл.
Отличия от Node.js:
- Deno не использует пакетный менеджер npm и не привязывается к репозиториям, адресация модулей осуществляется через URL или по файловому пути, а сами модули могут размещаться на любом сайте;
- В Deno не используется «package.json» для определения модулей;
- Различие API, все асинхронные действия в Deno возвращают promise;
- Deno требует явного определения всех необходимых полномочий для файлов, сети и переменных окружения;
- Все ошибки, не снабжённые обработчиками, приводят к завершению выполнения приложения;
- В Deno применяется система модулей ECMAScript и не поддерживается require().
Источник: http://www.opennet.ru/opennews/art.shtml?num=52387