7 个版本

使用旧版 Rust 2015

0.5.1 2018年4月15日
0.5.0 2018年4月15日
0.4.0-alpha.42017年9月24日
0.3.10 2017年8月27日

#19 in #ice

LGPL-3.0

49KB
1.5K SLoC

Ice Core

Crates.io Build Status

在 WebAssembly 中构建高效且可靠的后端应用程序。

这是什么?

Ice 是 WebAssembly 中的后端应用程序容器。

WebAssembly,主要用于构建客户端 Web 应用程序,也可以用于构建服务器端应用程序。通过一个受管理的执行环境和基于 LLVM 的底层 JIT (wasm-core),Ice 能够实现更高的安全性(并为 C/C++ 应用程序提供额外的安全性),提供平台无关的高级抽象,并带来一些特殊功能,如动态机器间应用程序迁移和更精确的服务监控。

构建

需要最新的 nightly Rust 和 LLVM 6。

cargo build --release

开始使用

首先,创建一个根目录以放置配置和应用程序

mkdir my_ice_root
cd my_ice_root

然后,在根目录中创建一个名为 config.yaml 的配置文件,其格式定义在 config.rs/Config

applications:
  - name: hello_world
    path: ./apps/hello_world

在此,我们指定了一个名为 hello_world 的应用程序,位于 ./apps/hello_world,当启动 ice_core 时,该应用程序将被自动初始化。

现在让我们初始化 hello_world 应用程序

mkdir apps
cd apps
cargo new hello_world
cd hello_world

[lib] 部分和运行时库 ia 添加到新创建的 Cargo.toml

[lib]
name = "hello_world"
crate-type = ["cdylib"]

[dependencies]
ia = "0.1"

然后在 hello_world 目录中创建另一个 config.yaml,这是应用程序级元数据定义(定义在 config.rs/AppMetadata

package_name: com.example.hello_world
bin: target/wasm32-unknown-unknown/release/hello_world.wasm

src/lib.rs 中编写一些代码来打印 "Hello, world!"

#[macro_use]
extern crate ia;

app_init!({
    println!("Hello, world!");
    0
});

构建它

cargo build --release --target wasm32-unknown-unknown

切换回 my_ice_root 并启动 ice_core

ice_core config.yaml

你应该看到你的第一个 hello_world 应用程序正在运行!

与本地二进制的比较

WebAssembly 虚拟机必须进行一些必要的检查和转换以确保一切正常工作。因此,它总是比预编译的本地二进制文件慢一点。然而,这种差异相当小,通常不会成为真实应用程序的性能瓶颈。

此外,Ice Core 能够提供本地环境无法提供的一些功能

  • 精确权限控制
  • 运行时机器间应用迁移(进行中)
  • 服务监控与管理(进行中)

依赖关系

~9MB
~164K SLoC