Как deno погашает 10 главных технических долгов node.js

Node.js deno

Организовано в соответствии с сетевой информацией

«Сейчас так сложно использовать Node!». Когда Райан Даль, отец Node.js, в начале прошлого года захотел разработать интерактивный инструмент анализа данных JavaScript, он не мог не пожаловаться на технологию, которую создал десять лет назад.

Райан Даль хочет разработать интерактивный инструмент командной строки для анализа данных, аналогичный IPython, но вместо этого использующий язык JavaScript, чтобы JavaScript также мог выполнять различные виды анализа данных, статистические расчеты и визуализацию данных, как Python.warr. Рейн Даль, когда-то покинувший сообщество разработчиков Node.js, снова взялся за изобретенный им Node.js для разработки этого нового инструмента анализа данных, но чем больше он им пользовался, тем более неудобным он становился.Он начал думать о том, как улучшить Node.js.

Node.js был впервые выпущен им 8 ноября 2009 года на европейской конференции JSConf сообщества JavaScript.Он перенес технологию JavaScript на стороне браузера в область приложений на стороне сервера. Фронтенд-инженеры никогда не думали, что они могут стать бэкенд-инженерами, но Node.js сделал фронтенд-технологию из браузера, а фронтенд-инженеры могли даже стать полноценными инженерами. передовые инженеры.

С тех пор, как Райан Даль разработал эту серверную среду JavaScript в 2009 году, она была разработана до 10-й версии. Созданный вместе с Node.js инструмент управления пакетами JavaScript npm, разработанный другим разработчиком Исааком, стал обязательной технологией для веб-разработчиков.В репозитории npm зарегистрировано более 600 000 модулей Node.js, что делает приложение Node .js для различных потребностей разработки или программного обеспечения.

JavaScript — самый популярный язык, а Node.js — самый популярный фреймворк.

Согласно опросу разработчиков, проведенному Stack OverFlow в 2018 году (в нем приняли участие более 100 000 разработчиков по всему миру), JavaScript является самой популярной технологией среди разработчиков: его используют почти 70% разработчиков, что даже более популярно, чем HTML или CSS. известный рейтинг фреймворков разработки, первое место занимает Node.js, почти 50% разработчиков (49,6%) часто его используют, небольшое увеличение на 2 процентных пункта по сравнению с 2017 годом, и количество пользователей продолжает расти, Намного выше второго -оценил Angular (36,9%), именно потому, что Node.js — это технология, которую могут использовать как фронтенд, так и бэкэнд инженеры.

Node.js — это не только текущая основная технология, но и ключевая технология архитектуры веб-приложений следующего поколения Serverless (бессерверная) архитектура. Кристофер Андерсон, старший главный инженер-программист Microsoft, отвечающий за проект Azure Functions, однажды прямо сказал, что основные поставщики бессерверных услуг делают ставку на Node.js из-за богатой экосистемы инструментов JavaScript в сочетании с легким весом. легко децентрализовать и расширять по горизонтали, а различные операционные системы легко запускать.Node.js — это инфраструктура, поддерживаемая приоритетом бессерверных сервисов, что также делает Node.js более подходящим для сверхкрупномасштабных приложений развертывания.

Сам Райан Даль признался, что никогда не думал, что Node.js окажет такое большое влияние в будущем. Он также считает, что постоянное совершенствование сообщества разработчиков делает его все более и более зрелым. По состоянию на август 2018 года в Node.js участвовало более 2000 разработчиков, количество обновлений и релизов за последние десять лет превысило 500, а количество загрузок кода на GitHub превысило 1 миллиард раз. Его используют такие технологические компании, как PayPal или ведущие научно-исследовательские институты НАСА.

Но Райан Даль начал исчезать из сообщества Node.js в 2012 году и обратился к языковым сообществам Go и Rust. Он также вернулся в область математических приложений, в которых был хорош. В 2017 году он также подал заявку на участие в Google Brain. -летний план резидентуры и стал исследовательской группой Google Brain.Как инженер по глубокому обучению, он посвятил себя исследованию технологии обработки изображений. До начала июня 2018 года, незадолго до того, как Node.js был готов вступить в свой 10-й год, JSConf Europe снова пригласил Райана Даля выступить со вступительной речью.

Несмотря на свою популярность, у Node.js все еще есть 10 технических долгов

Первоначально Райан Даль планировал поделиться своей JavaScript-версией интерактивного инструмента анализа данных IPython в своем выступлении на JSConf в 2018 году, но он не ожидал, что этот инструмент нельзя будет использовать до мая. Райан Даль, который собирался отказаться от этой речи, передумал и просто поделился проблемами, которые он обнаружил после возвращения к Node.js.Это выступление вызвало бурные дискуссии в глобальном сообществе разработчиков в прошлом году. «Я работаю в Node. 10 вещей, о которых js сожалеет больше всего». Райан Даль признал в своем выступлении, что в Node.js есть десять дизайнерских ошибок, и даже его десять главных сожалений (он намеренно использовал слово «сожаление» для описания)!

Ошибки, о которых Райан Даль очень сожалеет, включают в себя неиспользование JavaScript асинхронной обработки объектов Promise, недооценку важности безопасности, использование gyp для разработки системы сборки, несоблюдение рекомендаций сообщества по переходу на FFI и продолжение использования gyp, а также, по его мнению, что Node.js слишком зависел от функциональности npm (встроенная поддержка package.json была ошибкой), используяrequire("")Просто слишком легко встраивать произвольные модули, package.json может легко привести к неправильной концепции модуля (заставить разработчиков ошибочно думать, что файлы в одном и том же каталоге являются одним и тем же модулем), раздутому и сложному дизайну node_module, и сообщество разработчиков уже давно жаловалось о проблеме загрузки черной дыры (загрузка npm занимает очень много времени),require("module")Функция не требует аннотации имени.jsрасширение и бесполезный дизайн index.js.

В 2012 году Райан Даль покинул сообщество Node.js.После этого он объяснил, что разработка Node.js идет в правильном направлении и достигла его первоначальных целей, поэтому он решил уйти, но в этом выступлении в 2018 году он признал, что Node .js У .js все еще есть много проблем, которые нужно исправить, поэтому теперь он вернулся, чтобы погасить технический долг года и исправить ошибку проектирования Node.js.

Ответ Райана Даля заключается в создании новой серверной среды выполнения JavaScript, проекта Deno.

Deno был открытым исходным кодом на Github с мая 2018 года по март этого года.Участвовало более 100 разработчиков, и есть 5 основных разработчиков, которые часто вносят свой код.

10 главных технических долгов Node.js, о которых сожалеет Райан Даль

  1. Объект Promise без асинхронной обработки JavaScript

  2. недооценка важности безопасности

  3. Используйте gyp для разработки системы сборки

  4. Продолжайте использовать gyp, не прислушиваясь ко всем предложениям предоставить FFI

  5. Чрезмерная зависимость от npm (встроенная поддержка package.json)

  6. Слишком легко вызвать require("любой модуль")

  7. package.json создает неправильную концепцию модулей (файлы в одном каталоге — это один и тот же модуль)

  8. Раздутый и сложный дизайн node_module и загрузка черной дыры (часто загрузка npm занимает много времени)

  9. require("module") без обязательного расширения .js

  10. Бесполезный дизайн index.js.

Как Deno спасла наследие дизайна Node.js

这是 Deno 项目的一个范例,是 Unix 系统基本命令 cat 的一个实现。cat 可以从标准输入取得文件, 再逐行把文件内容送出到标准输出上。这个范例反映出 Deno 要将 I/O 抽象化和精简化的意图。

Это пример проекта Deno, реализации базовой команды cat в системах Unix. cat может получить файл из стандартного ввода, а затем отправить содержимое файла в стандартный вывод построчно. Эта парадигма отражает намерение Deno абстрагировать и упростить ввод-вывод.

Райан Даль надеется решить три основные проблемы Node.js, создав Deno, новую серверную среду выполнения JavaScript, включающую точный интерфейс ввода-вывода, безопасность по умолчанию (Secure by Default) и введение децентрализованного набора модульной системы. , и т.д. Последний пункт - решить старую проблему слишком долгой и слишком медленной загрузки.

Далее Райан Даль объяснил, что, хотя он проводит все свое время в разработке на компилируемых языках, таких как C++, Go или Rust, все еще есть несколько вещей, которые он часто делает, требующих использования динамических сценариев. Например, организация данных, координация тестовых задач, развертывание серверной или клиентской среды, рисование статистических диаграмм, настройка параметров системы сборки или разработка прототипов приложений и т. д.

Однако эти задачи для разных целей требуют переключения между разными скриптовыми языками или инструментами, такими как Bash, Python или Node.js, что довольно хлопотно. А неудача в разработке этого интерактивного инструмента анализа данных в первой половине 2018 года заставила его задуматься о том, может ли существовать общий инструмент для написания сценариев.

Deno

Дено Архитектура

Создайте простой, удобный в использовании инструмент для написания сценариев общего назначения.

Когда Райан Даль посетил ежегодную конференцию разработчиков JavaScript (JSDC) на Тайване в ноябре 2018 года, он особо отметил: «Мне не нравится использовать разные инструменты для разных целей, я просто хочу иметь простой, непосредственно исполняемый, удобный инструмент, который вы можете использовать, вот что такое Deno».

Короче говоря, Deno использует механизм JavaScript Chrome V8, такой как Node.js, но Deno использует более строгую спецификацию синтаксиса JavaScript TypeScript, а Deno эквивалентен среде выполнения TypeScript. Первая версия среды выполнения Deno была реализована на языке Go, но Райан Даль переработал среду выполнения Deno на языке Rust, чтобы избежать повторного использования двух наборов сборщиков мусора (один набор на языке Go, движок V8 также встроен в набор) и влияют на производительность. Кроме того, компилятор TypeScript встроен в среду выполнения Deno.

Deno стремится быть безопасным, лаконичным, с одним исполняемым файлом.

Целями дизайна Deno являются безопасность, простые модули, один исполняемый файл (упрощенная упаковка) и т. д. Одной из реализованных функций является то, что различные модули могут быть импортированы через URL-адреса.Кроме того, безопасность по умолчанию — доступ Для ресурсов или сетей требуется авторизация, а пользовательский код может выполняться только в защищенной песочнице. Почему не может использовать Go, с которым он больше всего знаком? Потому что «динамический язык по-прежнему необходим».

В его понимании JavaScript — идеальный динамический язык, однако Node.js — это технология почти 10-летней давности, ограниченная оригинальной архитектурой дизайна, и он считает, что возможности, появившиеся в JavaScript в последние годы, можно повторно использовать и переосмыслить. , Фундаментальный дизайн Node.js, включая стандартные методы, такие как ArrayBuffers для доступа к необработанной памяти, интерфейсы TypeScript для гибкой композиции и новые асинхронные механизмы Async и Await. Райан Даль внедрил эти новые функции JavaScipt в Deno для разработки новой серверной среды JavaScript.

Однако на этот раз вместо того, чтобы пойти тем же путем, что и Node.js, и поместить весь веб-сервер в структуру, Райан Даль решил создать самодостаточную и полнофункциональную программу времени выполнения, которую легко носить с собой, а не иметь сложный набор каталогов и структурного каркаса.

Более того, упакованный в виде среды выполнения, он может быть развернут в различных средах.Райан Даль, например, если Deno развернут на бессерверном сервисе, вы можете указать URL-адрес для запуска вызова бессерверного сервиса без загрузки раздела. Код выполняется на бессерверной сервисной платформе, а также может быть развернут на периферийных вычислительных устройствах для выполнения небольших задач по обработке данных.

Не доверяйте коду пользователя и может выполняться только в песочнице

Кроме того, с точки зрения механизма безопасности, Deno разработала двухуровневую структуру разрешений, один из которых представляет собой базовый уровень с привилегиями, а другой — пользовательское пространство без привилегий.Райан Даль объяснил, что это похоже на дизайн операционной системы. код, который не доверяет коду пользователя, различает полномочия пользователя и уровень полномочий ядра системы.Чтобы использовать ключевые ресурсы, программа пользователя должна выполняться основной программой системы посредством системных вызовов. Deno также «не доверяет клиентским программам JavaScript и может выполняться только в безопасной песочнице».

Для выполнения всех операций с конфиденциальными ресурсами, такими как базовая файловая система, требуется авторизация. Это структура безопасности по умолчанию, включая доступ к сети, запись в файловую систему, доступ к переменным среды, выполнение и другие конфиденциальные действия. Для выполнения требуется авторизация. .

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

Кроме того, Deno использует многие функции языка Go, такие какcopy()Относится к языку Go.io.Copy(),BufReader()Также обратитесь к языку Gobufio.ReaderДизайн и т. д., а также множество механизмов тестирования, документы и т. д. Райан Даль также ссылается на знакомый ему язык Go.

Укажите URL-адрес для встраивания сторонней библиотеки функций.

Третьей целью дизайна Deno является создание децентрализованной модульной системы.Дизайн Райана Даля заключается в том, что Deno может встраивать внешние сторонние библиотеки функций через URL-адреса, как в JavaScript. Кроме того, языки Deno и Rust также были сильно интегрированы, и даже после перехода на Rust для реализации Deno Райан Даль сообщил, что будет установлен механизм моста, чтобы Deno мог легко использовать библиотеку функций в Rust.

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

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

В будущем будет поддерживаться WebGL, и Deno сможет вызывать ресурсы GPU

Одно из самых больших различий между Deno и Node.js заключается в том, что в будущем он будет поддерживать машинное обучение. Райан Даль сообщил, что они разрабатывают подключаемый модуль для численных вычислений.Самое главное — поддерживать GPU, который также является самой необходимой функцией модуля машинного обучения. "В будущем Deno будет изначально поддерживать WebGL, позволяя программам JavaScipt вызывать ресурсы графического процессора. Это одна из его целей при создании Deno". JS также использует WebGL.

В будущем Deno нацелится на потребности в логическом выводе малого машинного обучения.

В отличие от CUDA от Nvidia, которую можно использовать для планирования нескольких ресурсов графического процессора для комплексного обучения машинному обучению, Райан Даль объяснил, что Deno хочет предоставить простые и достаточные возможности машинного обучения, которые можно использовать только для одного графического процессора. или вычислительные потребности только для логического вывода, достаточно поддержки WebGL.

Deno был открытым исходным кодом на веб-сайте Github с середины мая 2018 года по март этого года.Участвовало более 80 разработчиков, и есть 5 основных разработчиков, которые часто вносят свой код. В настоящее время основное внимание уделяется конструктивным особенностям предварительно настроенной архитектуры безопасности.

Наконец, могут ли предприятия использовать Deno? Райан Даль признал, что Deno еще далеко до 1.0 и все еще является очень новой технологией. Однако: "Подождите меня еще год. Если какая-либо компания захочет его использовать, пожалуйста, напишите мне, и я предоставлю техническую поддержку", - сказал он серьезно.

О Райане Дале

8 ноября 2009 года Райан Даль, отец Node.js, впервые представил Node.js на европейской конференции JSConf. Однако с 2012 года он исчез из сообщества Node.js и обратился к языковым сообществам Go и Rust, а в 2017 году присоединился к исследовательской группе Google Brain в качестве инженера по глубокому обучению. Сейчас внештатный разработчик.

В начале июня 2018 года Райан Даль опубликовал на JSConf Europe список Node.js Top Ten Regrets и запустил Deno, новое серверное решение для выполнения JavaScript.

Добро пожаловать на официальный аккаунт Jingcheng Yideng: jingchengyideng, чтобы получить больше галантереи.