Structured concurrency
Concurrency is the act of having many computations that are going on at the same time. Different languages deal with this concept differently. For example, Erlang has actors, JavaScript has promises, .NET has tasks, and Go has goroutines. Each of these provides a different abstraction on how to understand and handle the ongoing jobs and communicate data between them.
Crystal provides some low-level concurrency primitives with fibers, channels, and the select
statement. They are quite powerful and allow a program to handle concurrency as it sees fit. But the standard library still lacks a higher-level tool for structured concurrency, where the lifetime and data flow of each job is clearly stated and predictable. Having this will make concurrent programming less error-prone and easier to reason about. More about this can be found by reading up on issue #6468.