  The path to exascale computational capabilities in high-performance computing
(HPC) systems is challenged by the inadequacy of present software technologies
to adapt to the rapid evolution of architectures of supercomputing systems. The
constraints of power have driven system designs to include increasingly
heterogeneous architectures and diverse memory technologies and interfaces.
Future systems are also expected to experience an increased rate of errors,
such that the applications will no longer be able to assume correct behavior of
the underlying machine. To enable the scientific community to succeed in
scaling their applications, and to harness the capabilities of exascale
systems, we need software strategies that provide mechanisms for explicit
management of resilience to errors in the system, in addition to locality of
reference in the complex memory hierarchies of future HPC systems.
  In prior work, we introduced the concept of explicitly reliable memory
regions, called havens. Memory management using havens supports reliability
management through a region-based approach to memory allocations. Havens enable
the creation of robust memory regions, whose resilient behavior is guaranteed
by software-based protection schemes. In this paper, we propose language
support for havens through type annotations that make the structure of a
program's havens more explicit and convenient for HPC programmers to use. We
describe how the extended haven-based memory management model is implemented,
and demonstrate the use of the language-based annotations to affect the
resiliency of a conjugate gradient solver application.
