10个版本

0.1.6 2020年3月9日
0.1.5 2020年3月9日
0.0.3 2020年3月4日

#951 in WebAssembly

42 个月下载量
用于 wcurses

MIT/Apache

12KB
322

libw

docs.rs docs

这个库旨在成为wasi严格功能的更易于使用的人类封装。

  • 仅使用 #[no_std]alloc 来鼓励非膨胀的wasm二进制文件
  • 不需要使用 wasm32-wasi 编译rust(这样做会增加文件大小)
  • 高级操作独立于POSIX
  • 是学习wasi如何工作的好方法!。

hello world

[package]
name = "my_app"
version = "0.0.1"

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

[profile.release]
lto = true

[dependencies]
libw = "0"
#![no_std]

#[no_mangle]
pub fn _start() {
    libw::print("hey!\n");
}
build:
	@RUSTFLAGS='-C link-arg=-s' cargo build --target wasm32-unknown-unknown --release
	@cp target/wasm32-unknown-unknown/release/wasp.wasm .
wasmer my_app.wasm

文件操作

wasi模块只能在其被明确允许访问的文件夹中工作。默认情况下,wasi有3个基本文件

  • 0 - 应用程序文本输入流
  • 1 - 应用程序文本输出流
  • 2 - 应用程序错误文本输出流

您在启动时给予明确权限的文件将被分配文件描述符号。您必须手动指定目录来完成此操作。

libw 中,可以使用 accessible_directories() 获取可访问的目录列表。您必须指定一个以可访问路径之一为前缀的完整路径。

let path = "/foo/hello.txt";
let mut txt = libw::read_text(path);
txt.push_str("goodbye");
libw::write_text(path, txt);
wasmer my_app.wasm --dir=/foo 

API

数据流

  • read_line - 读取输入字符直到按回车
  • print - 打印字符
  • println - 打印以换行符结尾的字符
  • error - 打印错误

时间

  • current_time - 自Unix纪元以来的毫秒数
  • unix_time - 自Unix纪元以来的秒数
  • high_precision_time - 获取主机时钟的当前实时值

调度

  • exit - 停止当前进程
  • sleep - 将线程的控制权yield n毫秒

环境

  • accessible_directories - 获取wasi模块可访问的目录向量
  • environment_variables - 获取环境变量向量
  • command_arguments - 获取命令行参数字符串向量

文件

  • read_text - 将文本文件读取到字符串中
  • write_text - 从字符串写入文本文件
  • read_bytes - 从文件读取所有字节
  • write_bytes - 将所有字节写入文件
  • is_readable - 该文件能否被读取
  • is_writeable - 该文件能否被写入
  • is_directory - 该文件是否是目录
  • is_stream - 该文件是否是流

数学

  • random - 获取一个随机的 f32

许可证

本项目许可为以下任一

由您选择。

贡献

除非您明确声明,否则您提交给 libw 的任何贡献,根据 Apache-2.0 许可证的定义,应作为上述双重许可,无需附加条款或条件。

依赖项

~1MB
~14K SLoC