След две години разработка първото значително издание , платформа за отделно изпълнение на приложения на JavaScript и TypeScript, която може да се използва за създаване на обработчици, работещи на сървъра. Платформата се разработва от Райън Дал (), създател на Node.js. Както при Node.js, в Deno се използва JavaScript двигател, , който също се прилага в браузерите на базата на Chromium. В същото време, Deno не е разклонение на Node.js, а представлява нов проект, създаден от нулата. Кодът на проекта е с лиценз MIT. Сборките за Linux, Windows и macOS.
Значителният номер на версията е свързан с стабилизацията на API в пространството на имената Deno, които отговарят за взаимодействието на приложенията с ОС. Програмните интерфейси, които все още , по подразбиране са скрити и достъпни само при стартиране в режим "—unstable". С течение на развитието на нови версии, такива API постепенно ще бъдат прехвърлени в категорията на стабилните. API в глобалното пространство от имена, включително такива общи функции като setTimeout() и fetch(), по възможност е приближен до API на обикновените уеб браузъри и се развива съвместно с уеб стандартите за браузъри. Предоставените Rust API, които се използват директно в кода на платформата, както и интерфейсът за разработка на плъгини за Deno runtime, все още не са стабилизирани и продължават да се развиват.
Основните мотиви за създаването на новата JavaScript платформа бяха желанието да се отстранят концептуалните грешки, в архитектурата на Node.js и да се предостави на потребителите по-защитена среда. За повишаване на сигурността, обвивката около двигателя V8 е написана на Rust, което позволява да се избегнат много уязвимости, произтичащи от нискоуровнева работа с паметта, като достъп до отдели от паметта след освободен ресурс, разименуване на нулеви указатели и излизане извън границите на буфера. За обработка на заявки в неблокиращ режим се използва платформата , също написана на Rust. Tokio позволява създаването на високо производителни приложения на база на събитийно-ориентирана архитектура, поддържаща многопоточност и асинхронна обработка на мрежови заявки.
Основни Deno:
- Ориентиране към сигурност в конфигурацията по подразбиране. Достъпът до файлове, мрежови функции и достъп до променливи на средата е по подразбиране блокиран и изисква явно разрешение. Приложенията по подразбиране се стартират в изолирани sandbox среди и нямат достъп до системни функции без предоставяне на явни разрешения;
- Вградена поддръжка на TypeScript, в допълнение към JavaScript. За проверка на типовете и генериране на JavaScript е ангажиран стандартният компилатор TypeScript, което води до спад в производителността в сравнение с анализа на JavaScript в V8. В бъдеще се планира подготовка на собствена реализация на системата за проверка на типовете TypeScript, която ще позволи значително да се повиши производителността на обработката на TypeScript;
- Runtime е предоставен под формата на един самостоятелен изпълняващ файл ("deno"). За стартиране на приложения с Deno е достатъчно за своята платформа един изпълняем файл с размер около 20 Мб, без външни зависимости и без необходимост от специална инсталация в системата. Въпреки това, deno не е монолитно приложение, а представлява колекция от crate пакети на Rust (, ), които могат да се използват поотделно;
- При стартиране на програмата, както и за зареждане на модули, може да се използва адресация чрез URL. Например, за стартиране на програмата welcome.js може да се използва командата «deno https://deno.land/std/examples/welcome.js». Кодът от външни ресурси се изтегля и кешира на локалната система, но никога не се актуализира автоматично (за актуализиране е необходимо изрично да се стартира приложението с флага «—reload»);
- Ефективна обработка на мрежови заявки по HTTP в приложенията, платформата е проектирана за изграждане на високопроизводителни мрежови приложения;
- Възможност за създаване на универсални уеб приложения, които могат да се изпълняват както в Deno, така и в обикновения уеб браузър;
- Наличието , чието използване не изисква свързване с външни зависимости. Модулите от стандартната колекция преминаха през допълнителен одит и проверка за съвместимост;
- Освен 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 е написан на C и предлага свръзки за JavaScript. Разработчиците на Deno са насочили усилията си към оптимизиране на целия слой TCP сокети и предоставяне на по-общ интерфейс. HTTP сървърът на Deno осигурява по-ниска пропускна способност, но гарантира предсказуеми ниски забавяния. Например, в тест, просто приложение, базирано на Deno HTTP сървър, успя да обработи 25 хиляди заявки в секунда с максимално забавяне от 1.3 милисекунди. В Node.js подобно приложение обработи 34 хиляди заявки в секунда, но забавянията варираха от 2 до 300 милисекунди.
- Deno не е съвместим с пакети за Node.js (NPM), но се развива отделно за съвместимост със стандартната библиотека на Node.js, в процеса на развитие на която в Deno ще могат да се стартират все повече приложения, написани за Node.js.
Източник: opennet.ru
