Состоялся релиз JavaScript-платформы Deno 1.16, предназначенной для обособенного выполнения (без использования браузера) приложений, написанных на языках JavaScript и TypeScript. Проект развивается автором Node.js Райаном Далем (Ryan Dahl). Код платформы написан на языке программирования Rust и распространяется под лицензией MIT. Готовые сборки подготовлены для Linux, Windows и macOS.
Проект схож с платформой Node.js и, подобно ему, использует JavaScript-движок V8, однако, по словам автора Node.js, исправляет ряд архитектурных просчётов своего предшественника и отличается от него следующими нюансами:
- Использование в качестве основного языка Rust, что, по мнению разработчиков, уменьшает риск появления уязвимостей, связанных с низкоуровневой работой с памятью (переполнение буфера, use-after-free и пр.);
- Deno не использует пакетный менеджер npm и package.json, предлагая пользователю установку модулей путём указания URL или пути к модулю для установки. Тем не менее, проектом предлагается несколько утилит для упрощения работы со сторонними модулями;
- Приложения запускаются обособленно в песочницах и не имеют имеют доступа к сети, переменным окружения и файловой системе, без явно выданных полномочий;
- В архитектуре заложена возможность создания универсальных веб-приложений, которые способны работать как в системе Deno, так и в обычном браузере;
- Использование «ES Modules» и отсутствие поддержки require();
- Любые необработанные программистом ошибки в веб-приложении приводят к их принудительному завершению;
- Поддержка TypeScript помимо JavaScript;
- Полный размер готовой к использованию платформы – 10 Мб в виде единого файла;
- В комплекте предлагается система разрешения зависимостей и форматирования кода;
- Ориентировать на высокопроизводительные приложения.
Dino обрабатывает запросы в неблокирующем режиме с применением платформы Tokio, предназначенной для создания высокопроизводительных приложений на основе событийно-ориентированной (event-driven) архитектуры. Также интересно, что встроенный HTTP-сервер Deno реализован на TypeScript поверх нативных TCP-сокетов, что положительно сказывается на производительности сетевых операций.
В новой версии отмечается:
- Оптимизация производительности (4 патча);
- Исправление более 15 ошибок, в частности, теперь TLS-клиент поддерживает HTTP/2, подсистема кодировки поддерживает дополнительные метки кодирования и пр.;
- Более двух десятков нововведений, из которых можно отметить стабилизацию ранее тестовых подсистем Deno.startTls и Deno.TestDefinition.permissions, обновление JS-движка V8 до версии 9.7 и поддержку преобразований React 17 JSX.