Chapter 2 introduced us to the mechanisms that direct work to a particular device—controlling where code executes. In this chapter, we explore how to adapt to the devices that are present at runtime.
We want our programs to be portable. In order to be portable, we need our programs to adapt to the capabilities ...