#print #panic-handler #wasi

nightly no-std wasi-print

WASI print and panic library for WASM no_std

3 releases

0.2.2 Feb 25, 2023
0.2.1 Feb 25, 2023
0.2.0 Feb 24, 2023

#574 in WebAssembly

MIT license

9KB
70 lines

Maintenance CI crates-io api-docs

wasi-print: : implementation of Rust print macros and similar for no_std WASI

Bart Massey 2023 (version 0.2.2)

This crate contains basic niceties for writing no_std modules for WASI. wasi-print provides:

  • An abort() function that raises a WASI exception.
  • A panic_handler that aborts after trying to print panic information.
  • A print_fd() function that prints an &str to a WASI fd.
  • Printing macros print!(), println!(), !eprint() and !eprintln().

Example

This is a full standalone Rust WASM program using wasi_print.

#![no_std]

use wasi_print::*;

#[no_mangle]
pub extern "C" fn math_add(x: i32, y: i32) -> i32 {
    eprint!("guest running math_add({}, {}) …", x, y);
    let result = x + y;
    eprintln!(" and returning {}", result);
    result
}

Features

  • print: Include printing code. This requires nightly for a variety of reasons.
  • panic_handler: Provide a panic handler.

Acknowledgments

Figuring out how to write this was made much easier by this excellent blog post by "James [Undefined]".

License

This work is licensed under the "MIT License". Please see the file LICENSE.txt in this distribution for license terms.

Further Acknowledgments

Thanks to the cargo-readme crate for generation of this README.

Dependencies

~0.5–7.5MB
~50K SLoC