2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论 1 条评论

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

使用 Node.js、Express 和 React 构建强大的 API

数据追梦人

域名转移会影响域名解析吗?

防火墙后吃泡面

CodeBuddy 焕新升级: 软件开发智能体 Craft 重磅发布

CodeBuddy

腾讯云 腾讯 AI编程 CodeBuddy

用 SQL 还是 NoSQL?Apipost 的回答是:两个都要!

数据追梦人

Typescript AI 通义灵码 VSCode插件安装与功能详解

阿里云云效

typescript

天润融通AI Agent重塑零售连锁行业客户服务竞争力

天润融通

「高盛」最新人形机器人研报:主流人形机器人公司梳理和商业化瓶颈(附报告)

机器人头条

科技 大模型 人形机器人 具身智能

代码成为 "乐高积木"——AI 时代的开发革命

代码制造者

#AI编程

【HarmonyOS 5】如何开启DevEco Studio热更新调试应用模式

GeorgeGcs

调试 热更新

Typescript AI 通义灵码 VSCode插件安装与功能详解

阿里巴巴云原生

LLM实现text2SQL实战总结

数由科技

人工智能 设计原则 LLM text2sql

海信三筒洗衣机全系配置及价格公布,疯狂宠粉!科技创新引领产业升级

新消费日报

CST联合Isight进行天线DOE设计

思茂信息

cst cst电磁仿真 CST Studio Suite

阜博集团完成对 PEX 的收购

财见

【HarmonyOS 5】AttributeModifier和AttributeUpdater详解

GeorgeGcs

update Attribute Modifier

从训练到推理丨焱融存储蝉联 IDC SDS 文件市场增速第一

焱融科技

文件存储 软件定义存储 AI存储 全闪存 IDC报告

ERP系统生产模式(ATO、MTS、MTO、ETO、CTO)你了解多少?!

积木链小链

数字化 ERP 智能制造 生产模式

线上线下畅玩无阻,陪玩系统小程序源码是怎样做到的?

DUOKE七七

php vue.js MySQL uniapp

CAD缩放后有符号不显示怎么办

极客天地

阿里云 Elasticsearch Serverless 检索增强型8.17版免费邀测!

阿里云大数据AI技术

大数据 elasticsearch 阿里云 检索 serveless

API 接口开发与合理利用:构建高效、安全、可维护的数字桥梁

Noah

优化 Apache 日志记录的 5 个最佳实践

运维有小邓

日志管理系统 Apache 日志

如何使用 Databend Cloud 化简大数据架构?| Data Infra NO.24 回顾

Databend

如何合理规划Elasticsearch的索引|得物技术

得物技术

索引 Elastic Search 容量设计

Cision宣布获得2.5亿美元新资金

财见

CAD中的草图绘制功能

极客天地

Easysearch 自动备份:快照生命周期管理

极限实验室

Snapshot easysearch

程序员业务能力进阶:技术与业务的深度融合

代码制造者

低代码 #程序员

前端热更新:无声引擎驱动中国互联网的数字化转型

xuyinyin

凌晨 GPT - 4.1霸气登场,性能狂飙还降价

GPU算力

openai ChatGPT ChatGPT4 LLM模型 #大语言模型

MCP Server 开发实战 | 大模型无缝对接 Grafana

阿里巴巴云原生

阿里云 云原生 Grafana

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