Можно ли запустить JavaScript код в Rust с помощью Node.js?

Можно ли использовать Rust для выполнения JavaScript кода в NodeJS без использования WebAssembly? Как NodeJS обрабатывает мусор в своем процессе выполнения?
  • 3 августа 2024 г. 0:43
Ответы на вопрос 2
Да, можно запустить JavaScript код в Rust с помощью Node.js. Для этого можно воспользоваться библиотекой neon-bindings, которая позволяет устанавливать соединение между Rust и JavaScript, используя Node.js API.

Что касается использования Rust для выполнения JavaScript кода в Node.js без WebAssembly, то это действительно возможно с помощью neon-bindings. Однако в этом случае необходимо использовать библиотеку, чтобы обеспечить взаимодействие между двумя языками.

Что касается обработки мусора в процессе выполнения Node.js, то он использует механизм автоматического управления памятью, так называемый сборщик мусора. Сборщик мусора в Node.js основан на алгоритме Mark-and-Sweep, который отслеживает объекты, доступные из корневых объектов, и удаляет неиспользуемые объекты из памяти. Этот процесс позволяет эффективно управлять памятью и избегать утечек памяти в процессе выполнения Node.js.
Хоть и вопрос несколько сумбурный и не совсем понятно, что автор хочет на самом деле... 
Но краткий ответ: да, возможно, но есть нюансы...

Самый простой вариант - запускать node как отдельный процесс. Можно просто запускать на каждый чих, а можно заморочиться и организовать общение между приложением на Rust и приложением на Node.js

Вариант поинтереснее - Node.js можно собрать как библиотеку (есть даже готовые бинарные сборки такого), линкуем с приложением на Rust. Всё живёт в одном процессе, но node будет запускать свои потоки.

Есть и обратный последнему вариант. Можно из Rust кода собрать бинарный аддон к Node.js
Правда тут уже JS код будет запускать код на Rust.
https://napi.rs
https://neon-rs.dev

Можно пойти дальше. Если задача просто исполнять JS код из приложения на Rust, то можно слинковаться с одним из JS движков. Приколюх предоставляемых платформой Node.js здесь не будет (вроде fs или http), хотя никто не мешает реализовать это самостоятельно.
https://crates.io/crates/v8
https://crates.io/crates/quickjs_runtime
Похожие вопросы