Date Added: Mar 2011
To manage the increasing complexity of software, developers employ a number of different strategies. These include using high-level, type-safe, object-oriented programming languages, executing applications within Managed Runtime Environments (MREs), modularizing software into independent isolated components, and maximizing programmer productivity by implementing each component in the most-suitable language. Moreover, administrators and tools increasingly co-locate components on the same physical machine to better utilize multi-core systems via thread-level parallelism and to enable efficient cross-component communication. As a result, multi-language, multi-runtime systems that employ component co-location on multi-core shared-memory architectures are more and more common.