NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论 1 条评论

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

Rola详解国外住宅IP代理选择的8个方法,稳定的海外IP哪个靠谱?

Geek_bf375d

爬虫 代理IP 免费代理ip 跨境电商 IP 路由

企业网站建设怎么做?

九凌网络

工作流引擎的架构设计与对比

小狗围观科幻

罗拉ROLA告诉你Facebook广告账号被封怎么办?

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

【Spring Cloud实战】分布式系统控制与组件应用

快乐非自愿限量之名

分布式 服务器 组件 spring-cloud

跨境电商有没好的代理ip系统推荐?罗拉ROLA告诉你

Geek_bf375d

代理IP 代理IP设置 免费代理ip 跨境电商 爬虫分享

直播预告丨大模型+Agents疏通京东金融运营堵点

京东科技开发者

人工智能 AI 大模型

罗拉ROLA告诉你美国IP代理如何获取?适用于哪些场景?

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

为什么Facebook运营需使用IP代理?罗拉ROLA详解有哪些美国IP代理好用?

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

外贸推广方式有哪些

九凌网络

OpenAI 曾收到 AI 重大突破警告;半独立的 OpenAI 比与微软合并更好丨 RTE 开发者日报 Vol.91

声网

如何让你的网络推广实现最大性价比

九凌网络

罗拉Rola知道IP地址如何变更的吗?

Geek_bf375d

爬虫 跨境电子商务 代理IP 代理IP设置 免费代理ip

HDD城市站九城联动,超1500位HarmonyOS开发者积极参与

最新动态

主流的低代码平台有哪些?程序员应该如何与低代码相处?

高端章鱼哥

软件开发 低代码 JNPF

罗拉ROLA告诉你选择海外住宅代理IP服务供应商要注意哪些问题?

Geek_bf375d

爬虫 跨境电子商务 代理IP 代理IP设置 免费代理ip

HashML——让更多企业读懂数据,用好AI

酷克数据HashData

WorkPlus即时通讯,打通上下游产业链,构建企业生态圈

WorkPlus

深度解读:Raft是Paxos的一个变种么?

小猿姐

数据库 raft PAXOS

StarRocks 算子落盘:让大查询又快又稳

StarRocks

数据库 OLAP StarRocks

WorkPlus实现完全私有化部署,企业数据安全有保障

WorkPlus

FACEBOOK有哪些错误养号行为?罗拉ROLA-IP为您详解

Geek_bf375d

代理IP 免费代理ip 跨境电商 爬虫软件 IP 路由

人工智能应用:文本分类的技术突破与实战指导

不在线第一只蜗牛

人工智能 文本 技术 优化体系

WorkPlus解放企业应用开发,实现跨平台无缝切换

WorkPlus

机智的告警策略,完善监控系统的重要一环

观测云

监控告警 告警策略

一文详解Vue生命周期

EquatorCoco

Vue 生命周期

海外代理IP测试|如何检测代理IP质量?罗拉ROLA详解方法与工具全干货!

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

现在的我们需要怎么去布局一级

币离海

最新demo版 | 如何0-1开发支付宝小程序之小程序页面功能介绍(三)

盐焗代码虾

支付宝小程序 支付宝 小程序开发

罗拉ROLA分析亚马逊频繁扫号下的跨境电商,跨境电商卖家应该何去何从?

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

NEO: A Learned Query Optimizer 论文

Downal

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