Abstract
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 inefficient 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.
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsPreview
Unable to display preview. Download preview PDF.
References
Dawson Engler. Incorporating applications semantics and control into compilation. In Proceedings of the Conference on Domain-Specific Languages, Santa Barbara, California, USA, 15–17 October 1997.
Dawson R. Engler, Wilson C. Hsieh, and M. Frans Kaashoek. ‘C: A language for high-level, efficient, and machine-independent dynaic code generation. In Conference Record of POPL’ 96: The 23rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pages 131–144, St. Petersburg Beach, Florida, 21–24 January 1996.
Chris W. Fraser and David R. Hanson. A retargetable compiler for ANSI C. SIGPLAN Notices, 26(10):29–43, October 1991.
James Gosling, Bill Joy, and Guy L. Steele Jr. The Java Language Specification. The Java Series. Addison-Wesley, Reading, MA, USA, 1996.
Robert Harper, Robin Milner, and Mads Tofte. The definition of Standard ML: Version 3. Technical Report ECS-LFCS-89-81, Laboratory for the Foundations of Computer Science, University of Edinburgh, May 1989.
Sam Kamin, Miranda Callahan, and Lars Clausen. Lightweight and generative components ii: Binary-level components. September 1999.
Kim Mens, Cristina Lopes, Bedir Tekinerdogan, and Gregor. Kiczales. Aspect-oriented programming. Lecture Notes in Computer Science, 1357:483–--, 1998.
Dale Rogerson. Inside COM: Microsoft’s Component Object Model. Microsoft Press, 1997.
Walid Taha and Tim Sheard. Multi-stage programming with explicit annotations. In Proceedings of the ACM SIGPLAN Symposium on Partial Evaluation and Semantics-Based Program Manipulation (PEPM-97), volume 32, 12 of ACM SIGPLAN Notices, pages 203–217, New York, June 12–13 1997. ACM Press.
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2000 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Kamin, S., Callahan, M., Clausen, L. (2000). Lightweight and Generative Components I: Source-Level Components. In: Czarnecki, K., Eisenecker, U.W. (eds) Generative and Component-Based Software Engineering. GCSE 1999. Lecture Notes in Computer Science, vol 1799. Springer, Berlin, Heidelberg. https://doi.org/10.1007/3-540-40048-6_5
Download citation
DOI: https://doi.org/10.1007/3-540-40048-6_5
Published:
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-41172-7
Online ISBN: 978-3-540-40048-6
eBook Packages: Springer Book Archive