Unification: a multidisciplinary survey
ACM Computing Surveys (CSUR)
Principles of parameterized programming
Software reusability: vol. 1, concepts and models
Simple fast algorithms for the editing distance between trees and related problems
SIAM Journal on Computing
Cognitive dimensions of notations
Proceedings of the fifth conference of the British Computer Society, Human-Computer Interaction Specialist Group on People and computers V
Algorithm-oriented generic libraries
Software—Practice & Experience
Using C++ template metaprograms
C++ gems
Generative programming: methods, tools, and applications
Generative programming: methods, tools, and applications
MetaML and multi-stage programming with explicit annotations
Theoretical Computer Science - Partial evaluation and semantics-based program manipulation
Abstraction and verification in Alphard: defining and specifying iteration and generators
Communications of the ACM
Communications of the ACM
Modern C++ design: generic programming and design patterns applied
Modern C++ design: generic programming and design patterns applied
Stochastic Complexity in Statistical Inquiry Theory
Stochastic Complexity in Statistical Inquiry Theory
The use of sub-routines in programmes
ACM '52 Proceedings of the 1952 ACM national meeting (Pittsburgh)
Cognitive Dimensions of Notations: Design Tools for Cognitive Technology
CT '01 Proceedings of the 4th International Conference on Cognitive Technology: Instruments of Mind
LPG: A Generic, Logic and Functional Programming Language
ESOP '88 Proceedings of the 2nd European Symposium on Programming
A comparative study of language support for generic programming
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Understanding expression simplification
ISSAC '04 Proceedings of the 2004 international symposium on Symbolic and algebraic computation
C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (C++ in Depth Series)
Proceedings of the 2006 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Understanding variability abstraction and realization
ICSR'11 Proceedings of the 12th international conference on Top productivity through software reuse
Hi-index | 0.01 |
Software is a communication system. The usual topic of communication is program behavior, as encoded by programs. Domain-specific libraries are codebooks, domain-specific languages are coding schemes, and so forth. To turn metaphor into method, we adapt tools from information theory - the study of efficient communication - to probe the efficiency with which languages and libraries let us communicate programs. In previous work we developed an information-theoretic analysis of software reuse in problem domains. This new paper uses information theory to analyze tradeoffs in the design of components, generators, and metalanguages. We seek answers to two questions: (1) How can we judge whether a component is over- or under-generalized? Drawing on minimum description length principles, we propose that the best component yields the most succinct representation of the use cases. (2) If we view a programming language as an assemblage of metalanguages, each providing a complementary style of abstraction, how can these metalanguages aid or hinder us in efficiently describing software? We describe a complex triangle of interactions between the power of an abstraction mechanism, the amount of reuse it enables, and the cognitive difficulty of its use.