写点什么

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:002801

评论 1 条评论

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

牛掰!阿里人用7部分讲明白百亿级高并发系统(全彩版小册开源)

Java~~~

Java 架构 面试 多线程 高并发

惊艳!阿里自爆用480页讲清楚了44种微服务架构设计模式

Java~~~

Java spring 架构 面试 微服务

叹服!阿里自述SpringCloud微服务:入门+实战+案例

Java~~~

Java spring 架构 面试 Spring Cloud

膜拜!首次公布Java10W字面经,Github访问量破百万

Java~~~

Java 架构 面试 微服务 多线程

测试用例编写方法

与风逐梦

PancakeSwap市值管理机器人APP系统开发价格

完美!华为爆出Redis宝典,原来Redis性能可压榨到极致

Java~~~

Java redis 架构 面试 分布式

云上数据不安全主要原因是什么?保障云上数据安全用什么软件好?

行云管家

云计算 数据安全 企业上云 云数据

进大厂为何要学Zookeeper?

冰河

zookeeper 分布式 一致性 服务注册与发现 协同系统

限时!字节Java程序性能优化宝典开源,原来这才叫性能优化

Java~~~

Java 架构 面试 JVM 性能调优

uniswap市值管理机器人系统开发

快速解决运维过程中碰到的难题,就用行云管家!

行云管家

运维 运维人生 IT运维 企业运维

云小课|VMware备份上云学习专列来了,快加入吧~

华为云开发者联盟

云备份 VMware备份 备份上云

RVB2601应用开发实战系列四:FOTA镜像升级

Roy夹馍

物联网 risc-v 嵌入式开发

🚄【Redis 干货领域】让你彻底会使用“Redis中最陌生且最强大的集合”(ZSET)【上部】

码界西柚

redis Zset 9月日更 Redis指令

GameFi/DeFi+NFT软件系统开发方案

限量!腾讯高工用4部分讲清楚了Spring全家桶+微服务

Java~~~

Java spring 架构 面试 微服务

顶级!13位专家力荐Spring5为企业级开发提供一站式方案

Java~~~

Java spring 架构 面试 Spring Boot

Swap市值管理机器人系统软件开发资料

细节爆炸!腾讯用13个案例实战讲明白MySQL,没想到这么全

Java~~~

Java MySQL 数据库 架构 面试

game+defi系统软件开发内容

高光时刻!美团推出Spring源码进阶宝典:脑图+视频+文档

Java~~~

Java spring 源码 架构 面试

iOS 屏幕实时共享功能实践(内附详细代码)

融云 RongCloud

ios 音视频

大厂的 SDK 写法,偷学到了!

程序员鱼皮

Java c++ Python 架构 大前端

美团架构师熬夜整理:Netty权威指南2.0版+英雄传说项目

Java~~~

Java 架构 面试 Netty 架构师

回款金额自动分配

明道云

RVB2601应用开发实战系列五: 网络播放器设计(一)

Roy夹馍

物联网 risc-v 嵌入式开发

面面俱到!阿里巴巴2021最新Java面试参考权威指南泰山版震撼来袭

Java 架构 面试 后端 计算机

GameFi游戏金融系统软件开发介绍

九阴真经MySQL版:一条查询语句如何执行的

MySQL 数据库 程序员 架构

TLS协议分析 (一) 设计目标及历史

OpenIM

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