7 个版本
使用旧版 Rust 2015
0.5.1 | 2018年4月15日 |
---|---|
0.5.0 | 2018年4月15日 |
0.4.0-alpha.4 | 2017年9月24日 |
0.3.10 | 2017年8月27日 |
#19 in #ice
49KB
1.5K SLoC
Ice Core
在 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