В 2009 году, на конференции JSConf, программист Ryan Dahl из комании Joyent, представил миру технологию, которая перевернула мир веб-разработки. Назвал он её Node.js. По окончании презентации зал аплодировал Райну стоя. И он это заслужил.

После этого Node.js начал стремительно развиваться, однако через какое-то время, Райан покуинул проект. За развитие Node.js взялось сообщество. Была сформирована организация Node.js Foundation, которая до сих пор занимается развитием платформы.

Благодаря Node, JavaScript из простого сриптового языка превратился в полноценный язык программирования, которому посильны почти любые задачи. Благодаря Node семимильными шагами начали развиваться фронтэнд фреймворки, появиалсь возможность содздавать мобильные и декстопные приложения на JavaScript. Появилась возможность использовать JS для программирования микроконтроллеров, моделей машинного обучения и много чего еще. Стоит отметить, что многое из этого можно было практически или теоретически сделать и раньше, но благодаря Райану появилась платформа, которая была простой удобной и доступной.

В 2018 году Райн вновь выступает на JSConf с докладом про Node.js. На этот раз он решил поделитсья 10 вещами, о которых он пожалел при созадании Node.js. Посмотрев его выступление со многими пунктами сложно не согласится. В своем докладе Райн отметил, что многое из того, что он считает косяками, стало фишками Node.js и менять что-то уже поздно. Райн плавно подводит аудиторию к тому, что раз Node уже не изменить, то единственный выход - это создать новую платформу, которая будет такой же удобной и доступной как Node, но лишена его недостатков. Райн раскрыл завесу и представил миру Deno.

Deno - это платформа для создания программ на JavaScript и TypeScript. Главная цель Deno - предоставить простую, удобную и безопасную среду для разработки.

Особенности Deno

У Deno есть ряд очень интересных особенностей.

Rust под капотом. В отличии от Node.js, который написан на C/C++, Deno написан на современном языке программирования Rust, разрабатываемый и финансруемый компанией Mozilla, создателем бразуера Firefox. Rust хорошо подходит для системного программаривания, т.е. программирование на уровне ОС. Я уверен, что использование Rust сделало разработку Deno, намного более приятным занятием, чем разработка Node на C/C++.

Движок V8. Для компиляции JavaScript, как и Node.js, Deno использует движок V8 из проекта Chromium. Этот же движок используется в бразурах Google Chrome, Microsoft Edge и некоторых других. До сих V8 является самым производительным.

Поддержка TypeScript. В последние годы, популярной алтернативой JavaScript стал TypeScript, язык программирования от компании Microsoft, расширяющий возможности JavaScript. Главная особенность TypeScript - поддержка статической типизации. Deno поддерживает TypeScript прямо "из коробоки", без необходимости предварительной настройки.

Один файл. Deno не требует устнановки каких-либо дополнительных инструментов. Поставляется он как один исполняемый файл, который весит около 15 мб.

ES модули. За основу модульной системы в Deno взят стандарт ES модулей, который был добавлен в JavaScript в 2015. Причем реализация страдарта максимально приближена к браузерной, т.е. загрузка модулей осуществляется по URL.

Децентрализованные пакеты. В Deno нет централизованного репозитория пакетов, по типу npm. Теортически любой модуль можно будет загрузить просто указав URL.

Отсутствие менеджера пакетов. В Deno отсутствует отдельная утилита для управления пакетами. Эту роль выполняет сам Deno.

Стандартная библиотека. Так же как и Node, Deno предоставляет стандартную библиотеку модулей для решения таких задач как доступ к файловой системе, работа с датами, сетью и др.

Безопасность в приоритете. В целях безопастности, по-умолчанию Deno не предоставляет программе доступ к файловой системе, сети и окружению. Если программе нужно прочитать файл, отправить запрос на другой сервер или что-то получить из окружения, то при запуске программы ей необходимо дать на это разрешение.

Встроенные инструменты. Для повышения производительности в Deno имеются встроенные средства для тестирования, форматирования и проверки кода. Я очень надеюсь что это положит конец спорам по поводу того как следует форматировать код.

Асинхронность. Одной из ошибок Райна при создании Node.js был отказ от использования обещаний, вместо которых в Node используются функции обратного вызова. Райна можно понять, т.к. обещания в 2009 еще не были в стандарте. В Deno все асинхронные операции возвращают обещания. Но асинхронные функции это уже прошлый век, сейчас в теме асинхронные функции, которые основаны на обещаниях. Вместо свистоплясок с then мы можем использовать удобный синтаксис async/await. Что примечательно в Deno ключевое слово await можно использовать в глабальном пространстве, без неоходимости оборачивания кода в асинхронную фукнцию.

Совместимость с API браузера. API Deno максимально приближен к API бразуера, конечно там где это оправдано. Естественно в Deno имеется объект console и таеймерные функции. Но также, есть и кое-что поинтереснее, например, в Deno имеется глабльаный объект window, на который можно повесить обработчик на событие load с помощью функции addEventListener.


В этом уроке мы рассмотрели основные особенности Deno и некторые различия с Node.js. В заключении я хочу высказать свое мнение по поводу того заменит ли Deno Node, и стоит ли сейчас все бросать и переписывать все проекты на Deno.

Я считаю что пока рано давать определенный отвеа, после официального резила, прошло совсем мало времени. Deno находится в самом начале своего пути. Когда появился Node, мало кто мог представить как сильно он изменит мир веб-разработки и что вообще что такая платформа вообще кому-то нужна. И вот более чем 10 лет спустя, написано миллионы строчек кода, такими компаниями как Amazon, Google, Microsoft, Netflix, PayPal влолжены миллоны долларов в Node-инфраструктуру. Node уверенно занял свое место, и просто так он его не отдаст, но у Deno есть все шансы, если не сместить Node, то по крайней мере подвинуть его и предложить отличную алтернативу.