#fluence #marine #version #minimum #checker #run-time #type

marine-min-it-version

Fluence Marine接口类型最低支持版本检查器

7个版本

0.3.2 2024年1月9日
0.3.1 2023年11月7日
0.3.0 2023年3月14日
0.2.1 2022年11月30日
0.1.0 2022年2月21日

#1686魔法豆

Download history 437/week @ 2024-03-13 379/week @ 2024-03-20 288/week @ 2024-03-27 303/week @ 2024-04-03 244/week @ 2024-04-10 309/week @ 2024-04-17 221/week @ 2024-04-24 182/week @ 2024-05-01 325/week @ 2024-05-08 581/week @ 2024-05-15 495/week @ 2024-05-22 419/week @ 2024-05-29 333/week @ 2024-06-05 114/week @ 2024-06-12 247/week @ 2024-06-19 213/week @ 2024-06-26

每月下载量1,038
15crate中使用(直接使用2个)

Apache-2.0

4KB

Marine

marine version on crates.io Coverage Status

Marine是基于组件模型的现代通用Wasm运行时,能够运行具有接口类型无共享链接方案的多模块Wasm应用程序,也称为服务。这种执行模型适用于各种场景,尤其适用于遵循实体组件系统(ECS)模式或插件式架构的实现。

Fluence节点,如Fluence Rust节点,包括Marine来执行由Aqua组成的托管Wasm服务。

动机示例

为了说明Marine的能力,让我们看看这个示例中实现的具有多个模块的Wasm服务。

进入 examples/motivational-example 目录,查看 shrek/src/main.rs 文件

// examples/motivational-example/shrek/src/main.rs
use marine_rs_sdk::marine;

fn main() {}

#[marine]
pub fn greeting(name: &str) -> Vec<String> {
    let donkey_greeting = donkey::greeting(name);         // 1
    let shrek_greeting = format!("Shrek: hi, {}", name);  // 2
    
    vec![shrek_greeting, donkey_greeting]                 
}

mod donkey {                                               // 3
    use super::*;

    #[marine]
    #[link(wasm_import_module = "donkey")]                 // 4
    extern "C" {
        pub fn greeting(name: &str) -> String;
    }
}

在这个 Marine (Wasm) 模块(和命名空间)shrek 中,我们声明了一个名为 greeting 的函数,它从 donkey 模块的(3)greeting 函数创建了一个 donkey_greeting,该函数本身依赖于从 donkey/src/main.rs(见下文)导入的 donkey Wasm 模块,使用 Rust 的 FFI link(4)。

// examples/motivational-example/donkey/src/main.rs
use marine_rs_sdk::marine;

fn main() {}

#[marine]
pub fn greeting(name: &str) -> String {
    format!("Donkey: hi, {}", name)
}

总之,我们的例子由两个独立的 Wasm 模块组成,即 shrekdonkey,展示了如何将一个模块链接到另一个模块中,即使用 donkey 模块在 shrek 模块中。请注意,shrek 模块被称为 facade 模块,根据 facade 模式,每个服务只能有一个 facade 模块。

请确保您已安装 Marine 工具 安装,并分别编译 donkeyshrek,我们可以使用 build.sh 脚本完成此操作

$> ./build.sh

它创建了两个独立的 Wasm 模块,它们位于 artifacts 目录中

$> ls artifacts
donkey.wasm    shrek.wasm

现在我们已经有了我们的模块,我们可以使用 Marine REPL 来探索它们。请注意,我们使用 Config.toml 文件通过提供模块位置和名称来帮助 REPL。一旦我们启动了 REPL,我们就可以与这两个模块交互,并且正如预期的那样,shrek 模块能够成功地访问 donkey 模块公开的函数。

$> marine repl Config.toml
...
1> interface
Loaded modules interface:

shrek:
  fn greeting(name: string) -> []string
donkey:
  fn greeting(name: string) -> string

2> call donkey greeting "no link module"
result: "Donkey: hi, no link module"
 elapsed time: 42.985µs

3> call shrek greeting "facade with link module"
result: [
  "Shrek: hi, facade with link module",
  "Donkey: hi, facade with link module"
]
 elapsed time: 39.25µs

4> q

看起来一切正常,模块已准备好进行 部署到网络与 Aqua 的组合

文档

别忘了检查我们的 YouTube 频道

仓库结构

  • crates
  • examples:几个主要用于测试的 Marine 示例
  • fluence-faas:一个提供主机关闭、IT<->JSON 转换、日志记录、配置处理以及其他功能的 Fluence FaaS 层
  • fluence-app-service:一个提供服务运行基本 API 的 Fluence 应用服务层
  • runtime:一个提供加载、卸载和调用模块的基本功能的运行时层
  • marine-js:一个旨在在浏览器中运行 Marine 的网页运行时层
  • 工具
    • REPL:一个用于测试 Marine Wasm 模块的 REPL
    • CLI:一个用于构建和从 Marine Wasm 模块中提取信息的 CLI

支持

如果您发现任何错误,请提交问题。您也可以通过 DiscordTelegram 联系我们。我们将尽力尽快解决此问题。

贡献

任何感兴趣的人都可以为该项目做出贡献。请确保您阅读并遵循一些基本的 规则

许可

所有软件代码均为 Fluence Labs, Inc. 的版权所有(c),根据Apache-2.0 许可证。

依赖项

~125KB