写点什么

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

评论 1 条评论

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

NL2SQL进阶系列(5):论文解读业界前沿方案(DIN-SQL、C3-SQL、DAIL-SQL)、新一代数据集BIRD-SQL解读

汀丶人工智能

自然语言处理 大模型 NL2SQL

库存领域核心能力--库存预占 建设实践

京东科技开发者

Disk Drill for Mac(数据恢复软件) v5.5.1515中文激活版

iMac小白

Disk Drill for Mac Disk Drill下载 Disk Drill mac

剪切板复制粘贴管理工具 Paste for mac中文激活版

iMac小白

Paste for Mac paste mac破解版 Paste 下载

FotoJet Designer(图形设计软件)特别版下载

iMac小白

中科院院士:借鉴美国超级计算机安腾 探索我国技术新路径

Geek_2d6073

软件测试学习笔记丨显式等待的高级使用

测试人

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

微服务架构下如何通过弱依赖原则保障系统高可用

京东科技开发者

FotoJet Designer(图形设计软件)v1.3.3 特别版+便携版

iMac小白

FotoJet Designer下载 FotoJet Designer mac

信创里程碑:Tapdata 同时通过华为云 GaussDB 及鲲鹏兼容互认证,全面支持基础设施自主创新建设

tapdata

华为云 GaussDB 华为云公有云平台(鲲鹏)

win版DxO FilmPack 7(照片模拟胶片效果处理)v7.6.0.515 (x64)特别版

iMac小白

DxO FilmPack 7 DxO FilmPack 7下载 DxO FilmPack 7破解版

App测试中,强制等待和隐式等待谁更强?

霍格沃兹测试开发学社

去中心化交易所开发 AI策略交易

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

国际标准图查询语言 GQL 正式发布,悦数图数据库业界首家原生支持

最新动态

ETLCloud中多并行分支运行的设计技巧

RestCloud

ETL 数据集成 多并行分支

Axure RP 9 for mac激活版 交互式产品原型设计工具

iMac小白

Axure RP 9汉化 Axure RP 9授权码 Axure RP 9破解版

Icecream Screen Recorder Pro(屏幕录像软件)

iMac小白

win版 Navicat Premium 16(数据库管理软件)中文特别版

iMac小白

Navicat Premium 16下载 Navicat Premium 16激活 Navicat Premium 16破解

NL2SQL实践系列(1):深入解析Prompt工程在text2sql中的应用技巧

汀丶人工智能

大模型 text2sql NL2SQL

架构设计|基于 raft-listener 实现实时同步的主备集群

快乐非自愿限量之名

Java 架构 运维

Adobe Bridge 2024(Br2024) v14.0.4.222 (x64)直装版

iMac小白

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