写点什么

Neon 支持在 Node App 中嵌入 Rust 代码

  • 2020-10-29
  • 本文字数:967 字

    阅读完需:约 3 分钟

Neon支持在Node App中嵌入Rust代码

Neon 是一个可以使用 Rust 开发原生 Node 模块的库和工具链,类似于使用 C 和 C++所实现的功能,它还利用了 Rust 安全方面的好处。


Neon 致力于让 Node.js 模块的创建变得简单明了。在安装了 Neon 和 Rust 工具链后,你就可以使用 neon new 来创建一个 Node 模块骨架,其中包含了一个 Cargo.toml 文件和一个 Rust 文件(一个示例 hello 函数):


<project-name>/├── .git ignore├── README.md├── lib/│   └── index.js├── native/│   ├── Cargo.toml│   └── src/│       └── lib.rs└── package.json
复制代码


你可以在 Cargo.toml 中添加所需的 Rust 依赖项,并按照你喜欢的方式布局代码。你可以通过两个步骤导出 Rust 函数,然后在 Node 程序中使用它。首先是注册函数:


register_module!(mut m, {    m.export_function("myFunction", thread_count)});
复制代码


然后,在 lib/index.js 中导出:


const addon = require('../native');module.exports = addon.myFunction;
复制代码


准备好代码后,你就可以构建 Node 模块:


neon build --release
复制代码


虽然这看起来很简单,但你无论如何都应该特别注意在 Node 环境中表现得像个好公民。特别是你导出的任何一个 Rust 函数都应该是特定类型的:


fn add1(mut cx: FunctionContext) -> JsResult<JsNumber> {...}
复制代码


这里,可以通过 FunctionContext 访问 Node 调用者环境,包括它的 arguments 列表。类似地,导出的函数应该返回一个 JsResult,这是一个指定了函数返回给定类型或抛出 JavaScript 异常的可选类型。例如,你可以使用以下语法访问特定参数:


let x = cx.argument::<JsNumber>(0)?.value();
复制代码


要从导出的函数返回值,应该将其转换为预期值。例如,如果你的函数返回一个数字,在返回时你需要使用 Rust 的 as f64 转换操作符对其进行转换:


Ok(cx.number(num_cpus::get() as f64))
复制代码


构建原生 Node 模块的一个好处是可以执行异步后台任务。Neon 使用 N-API 的微任务API来实现这个目标,并依赖 JavaScript 端的回调和 Promise 来控制异步任务的执行。


Neon 也可以用于 Electron App。目前这需要使用一个中间工具 electron-build-env,用于构建 Electron App 所需的 Neon 依赖项。Neon 团队正在开发electron-rebuild,这个工具将简化这一过程,可以像使用其他依赖项那样使用 Neon 依赖项。


原文链接


Neon Enables Embedding Rust Code in Node.js Apps


2020-10-29 09:002536

评论 1 条评论

发布
用户头像
牛逼
2020-10-29 10:03
回复
没有更多了
发现更多内容

面试官:小伙子先来说一下可能引起Java内存泄露的场景吧

Java 程序员 后端

面试时通过volatile关键字,全面展示线程内存模型的能力

Java 程序员 后端

面试被吊打系列:气得我直接把简历上的精通数据库给删掉了

Java 程序员 后端

面试被问Tomcat整体架构设计,我哭的像个孩子

Java 程序员 后端

面试官:谈谈你对线程池的理解

Java 程序员 后端

面试:第六章:面试题收集

Java 程序员 后端

面试官:如何提升TCP三次握手的性能?

Java 程序员 后端

项目构建系统之 Maven

Java 程序员 后端

高频MySQL面试题:MySQL 索引使用什么数据结构?为什么用 B+做索引

Java 程序员 后端

2021年11月数据库排行解读:openGauss跃居第三,人大金仓晋身前十

墨天轮

MySQL 数据库 oracle TiDB 国产数据库

面试过阿里的P7大佬分享:180+道Java面试题目!含答案解析!

Java 程序员 后端

高可用延迟队列设计与实现

Java 程序员 后端

高并发下Mysql主从延迟处理方案

Java 程序员 后端

面试官:数据库自增 ID 用完了会咋样?(1)

Java 程序员 后端

面试官:数据库自增 ID 用完了会咋样?

Java 程序员 后端

高可用RabbitMQ集群的搭建及原理分析

Java 程序员 后端

高龄程序员的面临的处境:你有时候没有错,只是年纪大了

Java 程序员 后端

腾讯云TDSQL重磅发布全自研新敏态引擎

科技热闻

100道 IT名企前端面试真题,java教程pdf百度网盘

Java 程序员 后端

面试官:如何提升TCP三次握手的性能?(1)

Java 程序员 后端

面试官:小伙子我们先来唠唠并发编程的几大核心知识点

Java 程序员 后端

双十一揭秘 1 :如何保证流量激发的时候不宕机?

青云技术社区

云计算 PaaS SaaS 云平台

设备巡检管理系统,为企业降本增效

低代码小观

企业管理 管理系统 设备巡检 企业设备管理 设备巡检管理系统

1024 的那天,我这个三线的程序员是这样度过的,阿里巴巴高级java工程师薪酬

Java 程序员 后端

面试官:小伙子你给我说说MySql并发事务处理细节

Java 程序员 后端

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

Java 程序员 后端

-So-easy!多图详解CLH锁的原理与实现,轻松把握AQS,nginx原理及应用

Java 程序员 后端

1000页神仙文档,连阿里P8面试官都说太详细了,面面俱到!搞懂这些直接P6+

Java 程序员 后端

首全网发!2021最新版字节面经刷题笔记,已霸榜GitHub

Java 程序员 后端

高并发负载均衡:网络协议原理(三)

Java 程序员 后端

10万字Spring Boot详细学习笔记+源码免费开放下载,京东T7大牛纯手写出来的!

Java 程序员 后端

Neon支持在Node App中嵌入Rust代码_大前端_Sergio De Simone_InfoQ精选文章