写点什么

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

评论 1 条评论

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

阿里云可观测 2024 年 3 月产品动态

阿里巴巴云原生

阿里云 云原生 可观测

UniApp 应用发布到苹果商店指南

大模型驱动的新范式选车引擎

之家技术

大模型 AIGC 企业号 4 月 PK 榜

Apache Doris 2.1.1 版本正式发布!

SelectDB

数据库 大数据 开源 数据分析 大数据 开源

顶级Layer-3 通证正在飙升,布局龙头Degen Chain(含bitget教程)

股市老人

室内全彩LED显示屏的构成与技术

Dylan

技术 LED显示屏 全彩LED显示屏 led显示屏厂家 户内led显示屏

快马科技丨中小型经销商数字化怎么玩?

科技热闻

喜报!天翼云论文被权威国际学术会议IEEE/ACM CCGrid收录

编程猫

智能座机方案建设与实践

之家技术

人工智能 企业号 4 月 PK 榜

给蚂蚁金服antv提个PR, 以为是改个错别字, 未曾想背后的原因竟如此复杂!

前夕

前端 数据可视化 bug 蚂蚁金服 antv-g2

汽车智能化多模态交互

之家技术

大模型 AIGC 企业号 4 月 PK 榜

Databend 集成 PRQL:现代数据处理的一小步

Databend

从基础到高级,带你深入了解和使用curl命令(一)

霍格沃兹测试开发学社

IT外包公司可以帮企业做哪些网络优化?

Ogcloud

IT IT外包 IT外包公司 IT外包服务 IT外包服务商

通义灵码走进武汉大学:让 AI 编码助手激活大学生的创造力

阿里云云效

阿里云 AI 云原生 通义灵码

连接世界,选择国外主机服务,让你的网站跨越地域限制

一只扑棱蛾子

国外主机 国外主机服务

持续兑现承诺,英特尔锐炫Day 0驱动支持网易武侠大作《射雕》

E科讯

C++ While 和 For 循环:流程控制全解析

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

日志服务 HarmonyOS NEXT 日志采集最佳实践

阿里巴巴云原生

阿里云 云原生 HarmonyOS 日志服务 sls

零训练创建大模型的新方法:进化算法在模型融合中的应用

算AI

人工智能 神经网络 深度学习 算法

汽车之家人的“灵创”AI应用平台及编程助手AutoCode

之家技术

大模型 AIGC 企业号 4 月 PK 榜

全网唯一能够秒回粉丝的博主, 是如何做到的?

前夕

前端 Electron React 自媒体

从基础到高级,带你深入了解和使用curl命令(二)

霍格沃兹测试开发学社

浅谈TypeScript对业务可维护性的影响

前夕

typescript 前端

pageSpy - 远程调试利器

前夕

前端 pagespy

打包与发布iOS应用的完整指南

雪奈椰子

AI广告创意生产实践

之家技术

大模型 AIGC 企业号 4 月 PK 榜

AIGC在广告创意上的实践

之家技术

大模型 AIGC 企业号 4 月 PK 榜

苹果开发新款 AI 能「看懂」屏幕上内容;阿里未来 20% 代码将由 AI 编写丨 RTE 开发者日报 Vol.177

声网

我们是如何测试人工智能的(三)数据构造与性能测试篇

测试人

人工智能 软件测试

反套路打工:王子公主职场图鉴

白洞计划

云计算

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