Most parallel programming models provide a single generic mode in which processes can exchange information with each other. However, empirical observation of parallel programs suggests that processes share data in a few distinct and specific modes. We argue that such modes should be identified and explicitly supported in parallel languages and their associated models. The paper describes a set of information sharing abstractions that have been identified and incorporated in the parallel programming language Charm. It can be see that using these abstractions leads to improved clarity, expressiveness, efficiency; and portability of user programs. In addition, the specificity provided by these abstractions can be exploited at compile-time and at run-time to provide the user with highly refined performance feedbacks.