A retargetable compiler for ANSI C
ACM SIGPLAN Notices
C: a language for high-level, efficient, and machine-independent dynamic code generation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Multi-stage programming with explicit annotations
PEPM '97 Proceedings of the 1997 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Inside COM
The Java Language Specification
The Java Language Specification
Aspect-Oriented Programming Workshop Report
ECOOP '97 Proceedings of the Workshops on Object-Oriented Technology
Incorporating application semantics and control into compilation
DSL'97 Proceedings of the Conference on Domain-Specific Languages on Conference on Domain-Specific Languages (DSL), 1997
Generic Components: A Symbiosis of Paradigms
GCSE '00 Proceedings of the Second International Symposium on Generative and Component-Based Software Engineering-Revised Papers
Lightweight and Generative Components 2: Binary-Level Components
SAIG '00 Proceedings of the International Workshop on Semantics, Applications, and Implementation of Program Generation
Implicitly heterogeneous multi-stage programming
GPCE'05 Proceedings of the 4th international conference on Generative Programming and Component Engineering
Source-level optimization of run-time program generators
GPCE'05 Proceedings of the 4th international conference on Generative Programming and Component Engineering
Hi-index | 0.00 |
Current definitions of "software component" are based on abstract data types -- collections of functions together with local data. This paper addresses two ways in which this definition is inadequate: it fails to allow for lightweight components -- those for which a function call is too ineffcient or semantically inappropriate -- and it fails to allow for generative components -- those in which the component embodies a method of constructing code rather than actual code. We argue that both can be solved by proper use of existing language technologies, by using a higher-order meta-language to compositionally manipulate values of type Code, syntactic fragments of some object language. By defining' a client as a function from a component to Code, components can be defined at a very general level without much notational overhead. In this paper, we illustrate this idea entirely at the source-code level, taking Code to be string. Operating at this level is particularly simple, and is useful when the source code is not proprietary. In a companion paper, we define Code as a set of values containing machine-language code (as well as some additional structure), allowing components to be delivered in binary form.