Coroutines for Zig based on minicoro
Architectures Supported
- x86_64 (linux)
- x86_64 (win) as a wrapper
- x86_64 (mac)
- ARM/ARM64 (any)
Features
- Stackful Coroutines
- Inside Threads
- Nested Coroutines
An example
conststd=@import("std");
constZoro=@import("zoro").Zoro;
pubfnfibonacci(zoro: *Zoro) !void {
varm: u64=1;
varn: u64=1;
varmax: u64=undefined;
tryzoro.pop(&max);
while (true) {
tryzoro.push(&m);
tryzoro.yield();
vartmp: u64=m+%n;
m=n;
n=tmp;
if (m>=max) break;
}
tryzoro.push(&m);
}
pubfnmain() !void {
varzoro=tryZoro.create(fibonacci, 0);
deferzoro.destroy();
varmax: u64=10000000000000000000;
tryzoro.push(&max);
varcounter: usize=1;
while (zoro.status() ==.SUSPENDED) {
tryzoro.restart(); //resumevarret: u64=0;
tryzoro.pop(&ret);
std.log.info("fib {} = {}", .{counter, ret});
counter+=1;
}
}UB