PDA

Просмотр полной версии : Автор Node.js представил защищённую JavaScript-платформу Deno 1.0


Suicide
14.05.2020, 20:06
После двух лет разработки представлен (https://deno.land/v1) первый значительный выпуск Deno 1.0 (https://deno.land/), платформы для обособленного выполнения приложений на языках JavaScript и TypeScript, которая может быть использована для создания обработчиков, работающих на сервере. Платформу развивает Райан Даль (Ryan Dahl (https://en.wikipedia.org/wiki/Ryan_Dahl)), создатель Node.js. Как и в Node.js в Deno используется JavaScript-движок V8 (https://v8.dev/), который также применяется в браузерах на основе Chromium. При этом Deno не является ответвлением от Node.js, а представляет собой созданный с нуля новый проект. Код проекта распространяется (https://github.com/denoland/deno) под лицензией MIT. Сборки подготовлены (https://github.com/denoland/deno/releases/tag/v1.0.0) для Linux, Windows и macOS.

Значительный номер версии связан со стабилизацией API в пространстве имён Deno, которые отвечают за взаимодействие приложений с ОС. Программные интерфейсы, которые пока не стабилизированы (https://doc.deno.land/https/raw.githubusercontent.com/denoland/deno/master/cli/js/lib.deno.unstable.d.ts), по умолчанию скрыты и доступны только при запуске в режиме "--unstable". По мере формирования новых версий подобные API постепенно будут переводиться в разряд стабильных. API в глобальном пространстве имён, включающий такие общие функции как setTimeout() и fetch(), по возможности приближен к API обычных web-браузеров и развивается в соответствии с Web-стандартами для браузеров. Предоставляемые Rust API, которые применяется непосредственно в коде платформы, а также интерфейс для разработки плагинов к Deno runtime, пока не стабилизированы и продолжают развиваться.

Ключевыми мотивами создания новой JavaScript-платформы стало желание устранить концептуальные ошибки, допущенные (https://www.youtube.com/watch?v=M3BM9TB-8yA) в архитектуре Node.js, и предоставить пользователям более защищённое окружение. Для повышения безопасности обвязка вокруг движка V8 написана на языке Rust, позволяющем избежать многих уязвимостей, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей и выход за границы буфера. Для обработки запросов в неблокирующем режиме применяется платформа Tokio (https://github.com/tokio-rs/tokio), также написанная на языке Rust. Tokio позволяет создавать высокопроизводительные приложения на основе событийно-ориентированной архитектуры (Event-driven), поддерживающие многопоточность и обработку сетевых запросов в асинхронном режиме.

Основные особенности (https://deno.land/manual) Deno:


Ориентация на безопасность в конфигурации по умолчанию. Обращения к файлам, сетевые возможности и доступ к переменным окружения по умолчанию блокированы и требуют явного включения. Приложения по умолчанию запускаются в изолированных sandbox-окружениях и не могут получить доступ к системным возможностям без предоставления явных полномочий;

Встроенная поддержка языка TypeScript помимо JavaScript. Для проверки типов и генерации JavaScript задействован штатный компилятор TypeScript, что приводит к проседанию производительности по сравнению с разбором JavaScript в V8. В будущем планируется подготовить собственную реализацию системы проверки типов TypeScript, которая позволит на порядок поднять производительность обработки TypeScript;

Runtime поставляется в форме одного самодостаточного исполняемого файла ("deno"). Для запуска приложений при помощи Deno достаточно загрузить (https://github.com/denoland/deno/releases) для своей платформы один исполняемый файл, размером около 20 Мб, не имеющих внешних зависимостей и не требующий какой-то особой установки в систему. При этом deno не является монолитным приложением, а представляет собой коллекцию crate-пакетов на Rust (deno_core (https://crates.io/crates/deno_core), rusty_v8 (https://crates.io/crates/rusty_v8)), которые могут использоваться по отдельности;

При запуске программы, а также для загрузки модулей можно использовать адресацию через URL. Например, для запуска программы welcome.js можно использовать команду "deno https://deno.land/std/examples/welcome.js". Код с внешних ресурсов загружается и кэшируется на локальной системе, но никогда автоматически не обновляется (для обновления требуется явно запустить приложение с флагом "--reload");

Эффективная обработка в приложениях сетевых запросов по HTTP, платформа рассчитана на создание высокопроизводительных сетевых приложений;

Возможность создания универсальных web-приложений, которые могут выполниться как в Deno, так и в обычном web-браузере;

Наличие стандартного набора модулей (https://deno.land/std), использование которых не требует привязки к внешним зависимостям. Модули из стандартной коллекции прошли дополнительный аудит и проверку на совместимость;

Кроме 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-сервер Deno написан на TypeScript и работает поверх нативных TCP-сокетов, а HTTP-сервер Node.js написан на Си и предоставляет привязки для JavaScript. Разработчики Deno сосредоточили усилия на оптимизации всего слоя TCP-сокетов и предоставление более общего интерфейса. HTTP-сервер Deno обеспечивает меньшую пропускную способность, но гарантирует предсказуемые низкие задержки. Например, в тесте простое приложение на базе Deno HTTP server смогло обработать 25 тысяч запросов в секунду с максимальной задержкой в 1.3 миллисекунд. В Node.js аналогичное приложение обработало 34 тысячи запросов в секунду, но задержки колебались от 2 и 300 миллисекунд.

Deno не совместим с пакетами для Node.js (NPM), но отдельно развивается прослойка (https://deno.land/std/node/) для совместимости со стандартной библиотекой Node.js, по мере развития которой в Deno смогут запускаться всё больше приложений, написанных для Node.js.
14.05.2020

https://www.opennet.ru/opennews/art.shtml?num=52947​

CKAP
16.05.2020, 17:10
Ооо Суе .. Статья хорошая.. про недочеты V8 будет познавательно. Мне тут динозавра притащили. Он даже без джава был, еще на Флеш плеере. Камень атлон, (Вон это чудище у меня под столом) без SSE2 Инструкций.. там в нем всего вроде два сраных пакета\набора.. из браузеров Rхамелеон зашел, но тупил он конешн.. накатил я лубунту на этот калькулятор, из Node встал мм толи 7v толи 8я.. 12 билд уже плевался, а из девелопера NetBeans IDE 8.2.. сам прихуел. Но как бы понятно что, было бы желания кодить. Железо любое сойдет, книг навалом. А тут чет как то все туманно, мотивация явно высосана из одного место, у одно жителя ачата Но за развитием событий будет интересно наблюдать. Новье сюда же можно, рад буду. --