【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

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

评论 1 条评论

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

软件测试/测试开发丨uiautomator2 自动化测试工具使用

测试人

软件测试 自动化测试 测试开发 uiautomator

Cloud Studio 一个好用的在线编程工具

CODING DevOps

开发 部署 Cloud Studio 云端IDE 在线编程

人脸识别:城市公共交通

百度开发者中心

人工智能 人脸识别

百度与用友网络签署战略合作

百度开发者中心

智能制造 文心一言

Wallys/QSDK/IPQ4019 and IPQ4029 chipsets support 20 km remote transmission

Cindy-wallys

IPQ4019 ipq4029

软件测试/测试开发丨Linux 常用高频命令

测试人

Linux 软件测试 自动化测试 测试开发

用友自主研发企业商用版TimensionDB时序数据库重磅发布!

用友BIP

数据库 用友iuap 用友技术大会 升级企业数智化底座

设计模式天花板,详解23种设计模式+7大设计原则

小小怪下士

Java 程序员 设计模式

招商基金数字化转型下的研发管理|标杆案例

万事ONES

作为前端你还不懂MutationObserver?那Out了

不叫猫先生

JavaScript 前端 三周年连更 MutationObserver

人工智能时代来临,殊不知低代码早已出手

加入高科技仿生人

人工智能 低代码 数智化 数智融合

法大大发布数智化签约管理平台,赋能企业高效增长

人称T客

在 Kubernetes 中实施零信任的七条准则

NGINX开源社区

nginx Kubernetes

少年与阿童木:一场软件竞技赛背后的智能未来

脑极体

机器人 华为云

智汇昌平,数赢未来——宝德京产自主创新服务器正式下线

Geek_2d6073

大淘宝技术斩获NTIRE 2023视频质量评价比赛冠军(内含夺冠方案)

阿里巴巴大淘宝技术

视频 NTIRE

linux设置虚拟IP

linux大本营

Linux 网络 IP地址

阿里内部微服务架构秘籍:SpringCloudAlibaba全彩版笔记开源

采菊东篱下

编程 微服务

读《分布式商业》有感

后台技术汇

分布式 三周年连更

人工智能训练数据集:基础与发展

来自四九城儿

iOS MachineLearning 系列(5)—— 视频中的物体运动追踪

珲少

c++单例模式的所有面经

linux大本营

设计模式 单例模式 C++

从“捐赠”到“接受捐赠”,这背后是openEuler的两次蜕变

Geek_2d6073

极客时间「大师课·深度剖析 RocketMQ5.0」上线啦,欢迎免费领取!

Apache RocketMQ

云原生 消息队列

ThingsBoard 前端项目内置部件开发

echeverra

thingsboard

为什么老有人想让我们“程序员”失业? | 社区征文

不叫猫先生

人工智能 程序人生 ChatGPT 三周年征文

低代码是开发的未来,还是只能解决边角问题的鸡肋?

引迈信息

前端 后端 低代码 JNPF

测试Java初学者建议

FunTester

“前端已死”还是“娱乐至死”?做个清醒的前端

这我可不懂

前端 低代码

有奖征文丨【玩转Cloud Studio】第二季来啦!

CODING DevOps

Cloud Studio 云端IDE 在线编程 有奖征文 活动推荐

耗时72天!终于把GitHub上热度最高的Java面试八股文整理出来了,涵盖多家大厂面试真题

架构师之道

Java 面试

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