RUST — будущее инфраструктуры JavaScript

внешний интерфейс Rust
RUST — будущее инфраструктуры JavaScript

Переведено из Rust Is The Future of JavaScript Infrastructure, доступно по адресу:Rust — будущее инфраструктуры JavaScript — Ли Робинсон

Автор: Ли Робинсон.

Rust — это быстрый, надежный язык программирования с эффективным использованием памяти. Самый любимый язык программирования в stackoverflow за последние шесть лет (2016,2017,2018,2019,2020,2021), последовательно занимают первое место. Mozilla создала Rust, а Facebook, Apple, Amazon, Microsoft и Google используют Rust для разработки системной инфраструктуры, шифрования, виртуализации и другого программного обеспечения более низкого уровня.

Почему Rust начинает заменять Javascript в важных частях веб-экосистемы, включая сжатие (Terser), компиляцию (Babel), форматирование (Prettier), упаковку (webpack), проверку кода (ESLint) и многие другие библиотеки?

Что такое ржавчина?

Rust помогает разработчикам создавать быстрое программное обеспечение, экономящее память. Это современная альтернатива C++ или C, которая также ориентирована на безопасность кода и лаконичный синтаксис.

Rust и JavaScript очень разные. JavaScript найдет неиспользуемые переменные и объекты и автоматически очистит их. Этот механизм называется сборкой мусора (Garbage Collection). Rust ожидает, что разработчики сами планируют ручное управление памятью.

Используя Rust, разработчики могут иметь больший контроль над памятью с меньшими трудностями, чем C++ или Go.

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

Adoption

Помимо упомянутых выше компаний, использующих Rust, Rust также используется многими популярными библиотеками с открытым исходным кодом:

Rust дает нам силы, и использование Rust — одно из лучших решений, которые мы когда-либо принимали. Помимо производительности, инженерная философия Rust, направленная на корректность, помогает нам лучше справляться со сложностью. Мы можем написать сложные переменные, используя систему типов Rust, а затем позволить компилятору Rust сделать проверку за нас. --Dropbox

От JavaScript для ржавчины

JavaScript является наиболее широко используемым языком программирования, работающий на каждом устройстве с браузером. За последнее десятилетие очень большая экосистема была построена вокруг JavaScript.

  • Webpack:Помогает разработчикам объединять несколько файлов JavaScript в один.
  • Babel:Помогает разработчикам писать программы, поддерживающие старые браузеры, используя современный синтаксис JavaScript.
  • Terser:Помогите разработчикам сжимать сгенерированный код (для экономии трафика и запутывания).
  • Prettier:Помогает разработчикам форматировать весь код единообразно.
  • ESLint:Помогает разработчикам автоматически выявлять потенциальные проблемы при написании кода.

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

SWC

SWC, созданный в 2017 году с целью предоставления масштабируемой платформы на основе ржавчины, посвященной созданию следующего поколения инструментов быстрого развития. Этот инструмент используется некоторыми известными проектами, такими как Next.js, parcel и deno, а некоторые компании также используют его, включая Vercel, Bytedance, Tencent, Shopify.

SWC можно использовать для компиляции, сжатия, упаковки и использования функций, предоставляемых плагинами. Вы можете использовать эти функции для преобразования кода. Упомянутые выше расширенные инструменты, такие как Next.js, также выполняют эти преобразования.

Deno

Deno, созданная в 2018 году, представляет собой простую, современную и безопасную среду выполнения для JavaScript и TypeScript. Дено б/уV8и разрабатывается на Rust. Основатель Deno является основателем Node.js, который является попыткой заменить Node.js. Дено выпущен в мае 2020 г.1.0Версия.

Рецензент кода Deno, средство форматирования кода, генератор документации — все это используетсяSWCсмириться.

esbuild

esbuild, созданный в январе 2020 года, представляет собой сборщик JavaScript, написанный на Go, который в 10-100 раз быстрее, чем другие существующие инструменты.

Я пытаюсь создать инструмент сборки, который а) хорошо работает для конкретного варианта использования (упакованный JavaScript, TypeScript и, возможно, CSS) и б) переустанавливает ожидания сообщества разработчиков в отношении скорости инструментов сборки JavaScript. Наши нынешние инструменты просто слишком медленные. -- Эван,esbuild Автор ( Source )

Инструменты для создания JavaScript с использованием языков системного программирования, таких как Go или Rust, были относительно редки, когда был выпущен esbuild. Лично esbuild вдохновил очень большое количество разработчиков инструментов на использование языков системного программирования, чтобы сделать эти инструменты быстрее. Эван предпочитает использовать go:

Написано на Rust, приложив некоторые усилия, должно работать нормально. Но на более высоком уровне Go удобнее в использовании. Этот проект для меня всего лишь побочный проект, поэтому он должен быть веселым. — Эван, автор esbuild ( Source )

Некоторые утверждают, что Rust может работать лучше, но оба могут достичь целей Эвана и повлиять на сообщество:

Даже с очень простой оптимизацией Rust может превзойти лучшие оптимизации Go. Писать высокопроизводительные программы на Rust гораздо проще, чем изучать очень продвинутый Go. Discord

Rome

Rome, созданный в августе 2020 года, представляет собой инспектор кода, компилятор, упаковщик, тестер и многое другое для JavaScript, TypeScript, HTML, JSON, Markdown и CSS. Видение Rome состоит в том, чтобы заменить и унифицировать цепочку инструментов для фронтенд-разработки. его авторSebastian, который также разработал Babel.

Зачем все развивать?

Чтобы Babel мог служить низкоуровневым строительным блоком для других инструментов, необходимо внести некоторые необходимые изменения, которые в основном полностью реструктурируют архитектуру Babel. Архитектура Babel — это то, чем я занимался в 2014 году, когда изучал парсеры, синтаксические деревья и компиляторы.- Sebastian ( Source )

Rome написан на TypeScript и работает на Node.js, но теперь используетRustпереписать.

Rust + WebAssembly

WebAssembly (WASM)— переносимый низкоуровневый язык, в который компилируется Rust. WASM работает в браузере и может вызывать друг друга с помощью JavaScript, который поддерживается почти всеми современными браузерами.

WASM намного быстрее, чем JS, но не так быстро, как нативная разработка. В наших тестах Parcel с использованием WASM в 10-20 раз медленнее, чем нативная разработка.Devon Govett

В настоящее время WASM — не самое совершенное решение, но оно все же может помочь разработчикам обеспечить более быструю работу. Чиновники Rust обещают более высокое качествоWASMвыполнить. Для разработчиков это означает, что вы можете наслаждаться производительностью Rust (по сравнению с Go), даже если вы все еще компилируете для Интернета (используя WASM).

Ниже приведены относительно ранние библиотеки и фреймворки:

Эти веб-фреймворки на основе Rust, хотя и скомпилированы в WASM, не планируют заменить JavaScript, а предпочитают сосуществовать с JavaScript. Вот что мы хотели бы увидеть: Rust делает JavaScript быстрее, а компиляция ориентирована на будущее.WASM.

Ржавчина на всем пути.

Почему бы не использовать Rust?

У Rust очень крутая кривая обучения. Rust имеет более низкий уровень абстракции, чем большинство веб-языков.

Rust заставляет вас думать о каждом аспекте вашего кода, что чрезвычайно важно для разработки системы. Rust заставляет задуматься о том, как разделяется и копируется память. Rust заставляет вас думать о редких, но реальных пограничных случаях, чтобы убедиться, что эти пограничные случаи также содержатся. Везде, где вы можете повысить свою эффективность, Rust поможет вам.- Том МакРайт ( Source )

Использование Rust в веб-сообществе все еще редко. Он еще не использовался в больших масштабах. Хотя для разработчиков инструментов JavaScript изучение Rust является препятствием. Но интересно, что разработчики предпочитают использовать более быстрые инструменты, даже если им сложнееДобавить код(потому что ржавчина сильнее).В конечном итоге выигрывает более быстрое программное обеспечение.(пользовательский интерфейс)

Сейчас все еще трудно найти библиотеки Rust для выполнения ваших любимых служб (таких как аутентификация, базы данных, транзакции и т. д.). Но я думаю, что при масштабном использовании Rust и WASM эти проблемы решатся сами собой. Но не сейчас. Нам нужны инструменты JavaScript, чтобы помочь нам построить мост и постепенно улучшать проблемы с производительностью.

Будущее инструментов JavaScript

Я считаю, что Rust — это будущее инструментов JavaScript.Next.js 12Начните полностью заменять Babel (компилятор) и Terser (компрессор кода) на SWC и Rust. Зачем?

  • Расширяемость: SWC can be used as a Crate inside Next.js, without having to fork the library or workaround design constraints.
  • представление:Используя SWC, мы получаем 3-кратную скорость обновления и 5-кратную скорость упаковки, и еще есть много возможностей для повышения производительности.
  • WebAssembly:Rust поддерживает WASM для всех платформ и везде использует Next.js.
  • Community:Сообщество и экосистема Rust потрясающие и продолжают расти.

Не только Next.js использует SWC, но и:

  • ДеноРецензенты кода, форматировщики, генераторы документации — все используютSWC.
  • RomeиспользуетRustПерепишите, планируйте использовать SWC.
  • dprint, созданный с помощью SWC, быстрее, чем Prettier30x раз.
  • ParcelИспользование SWC, улучшенное10xпредставление.

Parcel использует SWC как библиотеку. Раньше мы использовали парсер Babel, написанный на JS. Теперь мы используем парсер SWC сRustзаписывать. Включает реализацию подъема области, сбор зависимостей и многое другое. По такому же принципу делается Deno на SWC.Devon Govett

Хотя это раннее использование Rust, здесь есть несколько важных моментов, на которые стоит обратить внимание:

  • Плагин:Написание плагинов на Rust — сложная задача для большинства JS-разработчиков. Использование JS для создания системы плагинов будет иметь проблемы с производительностью. В настоящее время нет хорошего решения этой проблемы.
  • Пакет:В настоящее время нас интересует swcpack, альтернатива webpack. Хотя он все еще находится в стадии разработки, будущее многообещающее.
  • WebAssembly:Хотя может показаться заманчивым использовать Rust и скомпилировать в WASM, предстоит еще много работы.

Тем не менее, я абсолютно уверен, что Rust продолжит увеличивать свое влияние на экосистему JavaScript. Представьте, что проекты по всему миру, использующие Next.js, уже упакованы с преимуществами производительности Rust. Затем вы можете использовать Next.js, как и любой другой пакет NPM.

Это мир, в котором я хочу жить (и развиваться).