The os/Coro module

That module was originally an ooc port of Steve Dekorte’s libcoroutine.

Coroutines help achieve cooperative multi-tasking, as opposed to threads, which achieve preemptive multitasking. In cooperative multi-tasking, each task (or ‘coroutine’) is responsible for handing the control to another coroutine.

Basic usage

First, we have to create a main coroutine:

import os/Coro

mainCoro := Coro new()
mainCoro initializeMainCoro

We can then create another coroutine, which we’ll here use as a generator

letter: Char

coro1 := Coro new()
mainCoro startCoro(coro1, ||
    for (c in "LLAMACORE") {
        letter = c
        coro1 switchTo(mainCoro)

Then we can retrieve those letters one by one:

while (true) {
    "%c" printfln(letter)
    mainCoro switchTo(coro1)

This example is quite simple, just printing each letter that coro1 gives us on separate lines, but complex tasks can be broken down in various coroutines and be achieved in a much more lightweight fashion than threads or processes.