在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

评论 1 条评论

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

YashanDB与云计算平台的无缝集成方法

数据库砖家

在LangChain中无缝接入MCP服务器扩展AI智能体能力

测吧(北京)科技有限公司

政府与大企业的即时通讯需求:BeeWorks 的专属解决方案

BeeWorks

即时通讯 IM 私有化部署

LED视频墙技术新进展:2025年行业观察

Dylan

LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家 户内led显示屏

海外红人营销太烧钱?用这几招在非英语市场低成本突围

Wolink

出海企业 海外营销推广 沃链Wolink 达人营销

YashanDB与开源数据库的比较:优劣势分析

数据库砖家

YashanDB与其他数据库之间的主要区别和选择建议

数据库砖家

天猫商品评论数据API的技术解析与Python实现方案

tbapi

天猫商品评论接口 天猫API 天猫评论数据采集 天猫商品评论API 天猫评论数据分析

告别复杂规划:MZGantt让项目可视化变得简单高效

Tecjt_锦图科技

AI英语口语APP开发方案

北京木奇移动技术有限公司

软件外包公司 AI英语学习 AI口语

YashanDB与NoSQL数据库的异同解析

数据库砖家

YashanDB与企业ERP系统集成实用指南

数据库砖家

YashanDB与云计算的完美结合,提升企业IT架构弹性

数据库砖家

YashanDB与云数据库集成的优势解析

数据库砖家

YashanDB与主流编程语言集成开发指南

数据库砖家

AI 基础设施新范式,百度百舸 5.0 技术深度解析

Baidu AICLOUD

昆仑芯 MoE FP8

安全聊天:为何内网 IM 系统成企业首选?

BeeWorks

即时通讯 IM 私有化部署

第一批智能体开发者的生存境况

脑极体

AI

面试官:如何提升项目并发性能?

王磊

排名提升至第四|PingCAP 荣登 2025 AI Cloud 100 China 榜单

TiDB 社区干货传送门

YashanDB用户权限管理教程,提升企业数据安全等级

数据库砖家

YashanDB与MongoDB数据库功能异同解析

数据库砖家

YashanDB与云计算平台深度集成实践

数据库砖家

YashanDB优化存储空间利用率实用技巧

数据库砖家

2024 信息技术应用创新优秀解决方案揭晓,平凯星辰占五席

TiDB 社区干货传送门

平凯星辰分享出海新范式:全球化的深度,取决于本地化的精度

TiDB 社区干货传送门

YashanDB与微服务架构:如何支持现代应用开发?

数据库砖家

明基RD系列深度护航CCF创新创业训练营,以专业编程设备赋能未来数字化人才

极客天地

如何利用CST把PCB的S参数生成Spice电路模型

思茂信息

cst操作 CST软件 CST Studio Suite

YashanDB优势详解:企业数字化转型的理想数据库选择

数据库砖家

YashanDB与数据仓库的区别:您该如何选择?

数据库砖家

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