Functional IO [functional-io]
The exact nature of this paper is a little unclear to me. But here goes.
Programming languages that do something must do IO. Operating systems present different mechanisms for doing IO. This paper would be looking at explaining these mechanisms and how they fit into a programming language (either poorly or well) and perhaps calling for better designs for languages as it relates to modern, post-POSIX IO.
On linux there are maybe two abstractions over system calls we may wish to discuss: AIO and Uring.
On macOS we have the Grand Central Dispatch.
What does this all boil down too? It might be interesting to describe these various models for achieving asynchronous IO:
Parallelism: one model is purely thanks to having multiple OS threads. In this model, you can block on an IO operation on a separate running thread.
Polling: this is your epoll,
select()etc. Here, you make what would normally be considered blocking calls but only when you're pretty sure you know the call won't block.Submission and Completion Queues: IOCP and Uring, this is a OS-provided mechanisms for submitting an IO operation and receiving completions when the kernel has performed the task. Conceptually, this is a lot simpler and shifts the burden of multiplexing IO on the kernel (you may have some parameter configuration to help you).