corevm-guest 0.1.16

API/SDK for CoreVM guest programs
Documentation
⚠️ **CoreVM API is subject to change.**

# How to write a program for CoreVM


## Rust

CoreVM programs have single entry-point called `main` with `index = 0` (the default).
The simplest program looks like the following.

```rust
#![no_std]
#![no_main]

#[polkavm_derive::polkavm_export]
extern "C" fn main() -> u64 {
    0
}
```

CoreVM programs produce output into one of the output streams.
Currently _console_ and _video_ streams are available.
The simplest program that outputs "Hello world" to the console output stream is shown below.

```rust
#![no_std]
#![no_main]

use corevm_guest::println;

#[polkavm_derive::polkavm_export]
extern "C" fn main() -> u64 {
    println!("Hello world");
    0
}
```

Copying out the data is an atomic operation:
the array passed to e.g. `yield_console_data` is either fully copied or not copied at all.
If the array can't be copied, the program execution is suspended, and
the continuation is possible via creating another work package.


## C

Here is the example program written in C.

```c
#include <stdint.h>

#include "corevm_guest.h"

POLKAVM_EXPORT(uint64_t, ext_main);

uint64_t ext_main() {
    corevm_printf("Hello world\n");
    return 0;
}
```