Alexei Sholik is an enthusiastic developer of things. He has worked in game development and app development for iOS since 2008, has been contributing to the development Elixir since 2012, and currently is a member of the Elixir core team. More recently, he got involved in server-side development using Elixir professionally at PSPDFKit.
As a longtime fan of computer science, Alexei enjoys reading an occasional white paper about new advancements and case studies in the field of programming theory and practice while sipping hot tea on a weekend night.
Alexei's favourite pastime activities include playing the guitar, learning foreign languages, playing Riichi, and fantasizing about what an ideal programming language would look like.
Modern programming languages provide two main ways of handling input and output: using either blocking calls (i.e. ones that prevent other code from running within the same thread of execution) or asynchronous calls (allowing the execution of selected parts of code to be interleaved with other code). Event loops, async and await, futures, promises, signals – these are some of the abstractions created to simplify the task of writing code that deals with concurrent events such as handling keyboard input or sending data to a remote server. But which one should we use?
In this talk, we will first survey the current landscape of abstractions for handling I/O present in various programming languages. We will then use streams of events and lazy sequences in Elixir to write concise and clean code for dealing with I/O and other concurrent activities. Elixir, due to its Erlang heritage, offers a unique approach to dealing with concurrency which we will exploit for our purposes.