  Dynamic software adaptability is one of the central features leveraged by
autonomic computing. However, developing software that changes its behavior at
run time adapting to the operational conditions is a challenging task. Several
approaches have been proposed in the literature to attack this problem at
different and complementary abstraction levels: software architecture,
middleware, and programming level. We focus on the support that ad-hoc
programming language constructs may provide to support dynamically adaptive
behaviors. We introduce context-oriented programming languages and we present a
framework that positions the supported paradigm in the MAPE-K autonomic loop.
We discuss the advantages of using context-oriented programming languages
instead of other mainstream approaches based on dynamic aspect oriented
programming languages and present a case study that shows how the proposed
programming style naturally fits dynamic adaptation requirements. Finally, we
discuss some known problems and outline a number of open research challenges.
