写点什么

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

评论 1 条评论

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

技术分享 | 数据持久化技术(Java)

霍格沃兹测试开发学社

排队助手:3 张图带你看懂「队伍合页」的经典案例场景

天天预约

小程序制作 SaaS应用 排队 排队工具

Spring Security系列教程05--实现HTTP摘要认证

一一哥

HTTP 认证 Spring Security OAuth

兆骑科创双创服务平台,项目对接,人才引进

兆骑科创凤阁

Spring Security系列教程06--前后端分离时的安全处理方案

一一哥

前后端分离 springsecurity 认证授权

Spring Security系列教程07--基于内存模型实现授权

一一哥

spring springboo Spring Security OAuth

软件测试 | 测试开发 | app自动化测试(Android)-- 属性获取与断言

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

自动化测试

1. 关联容器

小白钊钊

c++ 8月月更

兆骑科创高层次人才创新创业大赛,项目落地,云路演

兆骑科创凤阁

Spring Security系列教程08--基于默认数据库模型实现授权

一一哥

数据库 spring security

掌握这些核心算法,拿不到10个offer你来找我,我锤你个不争气的

收到请回复

Java 架构 算法 编程语言 语言 & 开发

技术分享 | 测试平台开发-前端开发之Vue.js 框架的使用(二)

霍格沃兹测试开发学社

Spring Security系列教程04--实现Form表单认证

一一哥

springboot Spring Security OAuth 表单认证

Spring Security系列教程10--基于过滤器实现图形验证码

一一哥

spring security Spring Boot 2 图片验证码

Spring Security系列教程01--Spring Security系列教程简介

一一哥

spring security

技术分享 | 测试平台开发-前端开发之Vue.js 框架(一)

霍格沃兹测试开发学社

深度解析全链路压测实施过程

穿过生命散发芬芳

全链路压测 8月月更

Spring Security系列教程02--创建SpringSecurity项目

一一哥

Java spring security springboot 安全框架 spring-boot

软件测试 | 测试开发 | 使用 cURL 发送请求

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

curl

全新EMQX Dashborad:易操作、可观测,集群数据尽在掌握

EMQ映云科技

物联网 IoT mqtt emqx 8月月更

2. 背包问题

小白钊钊

算法 8月月更

Spring Security系列教程03--实现HTTP基本认证

一一哥

spring security HTTP springboot basic spring-boot

Spring Security系列教程09--基于自定义数据库模型实现授权

一一哥

spring security Spring Boot 2

技术分享 | 被测系统架构与数据流分析

霍格沃兹测试开发学社

学习开发技术有哪些比较好的方法?

小谷哥

大咖说·图书分享|混合云架构

大咖说

架构 混合云

软件测试 | 测试开发 | 接口测试价值与体系

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

接口测试

BI如何配置“花生壳”,看这一篇就够了

葡萄城技术团队

内网穿透 可视化数据

技术分享 | 黑盒测试方法论—等价类

霍格沃兹测试开发学社

秋招如何抱佛脚?2021最新大厂Java面试真题合集(附权威答案)

收到请回复

Java 架构 语言 & 开发

如何从零开始参与 Apache 顶级开源项目?| 墙裂推荐

SelectDB

数据库 开源 程序员 社区贡献 企业号九月金秋榜

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