Concurrency / Parallelism

Ki's approach to concurrency and parallelism is rather low-level. Functions can be defined as async, meaning they will be spawned in a separate thread. async functions have the two additional restrictions:

async/gen functions cannot accept references

A reference's underlying memory may be deallocated while the async/gen function is running, so it cannot accept reference arguments.

async Functions Don't Have Return Values

async functions have their own return value: thread. Starting a thread can cause an error though, so that has to be wrapped in iferr.