Skip to content

Latest commit

History

27 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

zoro

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

About

Coroutines for Zig

Topics

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages