19 个版本 (8 个重大更新)
0.14.0 | 2024 年 2 月 21 日 |
---|---|
0.12.0 | 2024 年 2 月 8 日 |
0.10.3 | 2023 年 12 月 28 日 |
0.10.1 | 2023 年 10 月 24 日 |
0.6.10 | 2021 年 6 月 15 日 |
#154 in 魔法豆
3,348 次每月下载
在 33 个软件包中(7 个直接使用)
26KB
416 行
Marine Rust SDK
此 SDK 使开发者能够创建通用 Wasm 模块,并借助 interface-types 和 无共享链接 方案,将它们组合成多模块设置。SDK 提供所有必要的宏和其他功能,以使 Wasm 开发过程尽可能接近 "vanilla" Rust。编译后的模块旨在与 Marine 运行时一起运行。
用法
SDK 的核心组件是用于与导出函数、外部块和结构一起使用的 #[marine]
宏。让我们考虑一个具有一个导出函数的模块的简单场景
use marine_rs_sdk::marine;
#[marine]
pub fn greeting(name: String) -> String {
format!("Hi, {}", name)
}
此代码导入Marine SDK并将问候函数包装在#[marine]
宏中。所有以这种方式包装的函数都将从编译的Wasm模块中导出。
要将此代码编译为Wasm,您需要Marine CLI工具。如果您尚未安装CLI,请使用cargo install marine
marine build --release
最后,您将获得嵌入到Wasm二进制文件中的构建清单,并可以与Marine REPL(mrepl)中的模块交互。如果您还没有安装它,请使用cargo install mrepl
进行安装
> marine info ./target/wasm32-wasi/release/greeting.wasm
it version: 0.23.1
sdk version: 0.7.0
authors: <user-name>
version: 0.1.0
description:
repository:
build time: 2023-02-15 18:52:37.865550 +00:00 UTC
> mrepl --quiet
1> load greeting ./target/wasm32-wasi/release/greeting.wasm
module successfully loaded into App service
elapsed time: 52.153308ms
2> interface
Application service interface:
greeting:
fn greeting(name: String) -> String
3> call greeting greeting "user"
result: String("Hi, user")
elapsed time: 132.021µs
有关开发此简单模块的完整指南,请参阅此处。
SDK组件
SDK导出以下主要组件
#[marine]
过程宏,可用于- 调用参数接口,旨在提供一组模块启动参数
- 挂载二进制接口,可用于调用CLI工具
- module_manifest宏,旨在将一些信息嵌入到编译的Wasm中
- 日志记录功能,允许调整Marine日志机制
支持的Rust类型
目前,#[marine]
宏允许以下Rust类型作为导出和导入函数的参数或结构体字段的参数
- 以下Rust基本类型之一:
bool
、u8
、u16
、u32
、u64
、i8
、i16
、i32
、i64
、f32
、f64
- 字符串
String
、&str
- 以上类型的元素组成的向量
- 由以上类型的向量组成的向量,其中允许递归,例如,类型
Vec<Vec<Vec<u8>>>
是允许的 - 以上所有类型的参考
- 所有字段都是基本Rust类型的结构体
- 所有字段都是上述类型或其他以类似方式构建的结构体
文档
此外,请查看我们的YouTube频道。
仓库结构
- crates
- macro-testing-utils 包含内部测试工具
- main 包含 export_allocator、logger 和 results 模块
- marine-macro 是
#[marine]
宏的 proc-macro crate - marine-macro-impl 是
#[marine]
宏的实际实现 - timestamp-macro 是一个宏,支持将时间戳嵌入编译后的 Wasm 二进制文件
- src 包含 call_parameters 和 mounted_binary 模块,以及所有必要的用户内容
支持
如果您发现错误,请提交问题。您也可以在 Discord 或 Telegram 上联系我们。我们将尽力尽快解决问题。
贡献
任何感兴趣的人都可以为该项目做出贡献。请确保您阅读并遵循一些基本的 规则。
许可
所有软件代码版权所有(c)Fluence Labs,Inc.,根据 Apache-2.0 许可协议。
lib.rs
:
Fluence后端SDK的主要部分。包含 export_allocator
、logger
和 result
模块。
依赖关系
~155–435KB