BACK TO INDEX

Publications of Jeremy G. Siek
Books and proceedings
  1. Jeremy G. Siek, Lee-Quan Lee, and Andrew Lumsdaine. The Boost Graph Library: User Guide and Reference Manual. Addison-Wesley, 2002. [bibtex-entry]


Thesis
  1. Jeremy G. Siek. A Language for Generic Programming. PhD thesis, Indiana University, August 2005.
    Annotation: The past decade of software library construction has demonstrated that the discipline of generic programming is an effective approach to the design and implementation of large-scale software libraries. At the heart of generic programming is a semi-formal interface specification language for generic components. Many programming languages have features for describing interfaces, but none of them match the generic programming specification language, and none are as suitable for specifying generic components. This lack of language support impedes the current practice of generic programming. In this dissertation I present and evaluate the design of a new programming language, named G (for generic), that integrates the generic programming specification language with the type system and features of a full programming language. The design of G is based on my experiences, and those of colleagues, in the construction of generic libraries over the past decade. The design space for programming languages is large, thus this experience is vital in guiding choices among the many tradeoffs. The design of G emphasizes modularity because generic programming is inherently about composing separately developed components. In this dissertation I demonstrate that the design is implementable by constructing a compiler for G (translating to C++) and show the suitability of G for generic programming with prototypes of the Standard Template Library and the Boost Graph Library in G. I formalize the essential features of G in a small language and prove type soundness.
    [bibtex-entry]


Articles in journals or book chapters
  1. Ronald Garcia, Jaakko Järvi, Andrew Lumsdaine, Jeremy G. Siek, and Jeremiah Willcock. An Extended Comparative Study of Language Support for Generic Programming. Journal of Functional Programming, 2006.
    Note: To appear. [bibtex-entry]


  2. Daniel P. Friedman, Abdulaziz Ghuloum, Jeremy G. Siek, and Lynn Winebarger. Improving the Lazy Krivine Machine. Higher-Order and Symbolic Computation, 2003.
    Note: Accepted for publication. [bibtex-entry]


  3. Jeremy G. Siek and Andrew Lumsdaine. C++ Concept Checking. Dr. Dobb's Journal, June 2001. [bibtex-entry]


  4. Jeremy G. Siek and Andrew Lumsdaine. The Generic Graph Component Library. Dr. Dobb's Journal, September 2000. [bibtex-entry]


  5. Jeremy G. Siek and Andrew Lumsdaine. Software Engineering for Peak Performance. C++ Report, pp 23--27, May 2000. [bibtex-entry]


  6. Jeremy G. Siek and Andrew Lumsdaine. Advances in Software Tools for Scientific Computing, chapter A Modern Framework for Portable High Performance Numerical Linear Algebra. Springer, 2000. [bibtex-entry]


  7. Jeremy G. Siek and Andrew Lumsdaine. The Matrix Template Library: Generic Components for High-performance Scientific Computing. Computing in Science and Engineering, 1(6):70--78, November 1999. [bibtex-entry]


Conference articles
  1. Emir Pasalic, Jeremy G. Siek, and Walid Taha. Concoqtion: Mixing Indexed Types and Hindley-Milner Type Inference. In POPL '07: Conference record of the 34th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, 2007.
    Note: Submitted. [bibtex-entry]


  2. Douglas Gregor, Jaakko Järvi, Jeremy G. Siek, Gabriel Dos Reis, Bjarne Stroustrup, and Andrew Lumsdaine. Concepts: First-Class Language Support for Generic Programming. In Proceedings of the 2006 ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA'06), October 2006. [bibtex-entry]


  3. Andrew Lumsdaine Jaakko Jarvi, Douglas Gregor, Jeremiah Willcock and Jeremy G. Siek. Algorithm specialization in generic programming - Challenges of constrained generics in C++. In PLDI '06: Proceedings of the ACM SIGPLAN 2006 conference on Programming language design and implementation, New York, NY, USA, June 2006. ACM Press.
    Annotation: Generic programming has recently emerged as a paradigm for developing highly-reusable software libraries, most notably in C++. We have designed and implemented a constrained generics extension for C++ to support modular type-checking of generic algorithms and to address other issues associated with unconstrained generics. To be as broadly applicable as possible, generic algorithms are defined with minimal requirements on their inputs. At the same time, to not lose potential efficiency, generic algorithms may have multiple implementations that exploit features of specific classes of inputs. This process of algorithm specialization relies on non-local type information and conflicts directly with the local nature of modular type-checking. In this paper, we review the design and implementation of our extensions for generic programming in C++, describe the issues of algorithm specialization and modular type-checking in detail, and discuss the important design tradeoffs in trying to accomplish both. We present the particular design that we chose for our implementation, with the goal of hitting the sweet spot in this interesting design space.
    [bibtex-entry]


  4. Jeremy G. Siek and Walid Taha. Gradual typing for functional languages. In Scheme and Functional Programming Workshop, September 2006. [bibtex-entry]


  5. Jeremy G. Siek and Walid Taha. A Semantic Analysis of C++ Templates. In ECOOP 2006: European Conference on Object-Oriented Programming, Nantes, France, July 2006. [bibtex-entry]


  6. Jeremy G. Siek and Andrew Lumsdaine. Language Requirements for Large-Scale Generic Libraries. In GPCE '05: Proceedings of the fourth international conference on Generative Programming and Component Engineering, September 2005.
    Note: Accepted for publication.
    Annotation: The past decade of experience has demonstrated that the generic programming methodology is highly effective for the design, implementation, and use of large-scale software libraries. The fundamental principle of generic programming is the realization of interfaces for entire sets of components, based on their essential syntactic and semantic requirements, rather than for any particular components. Many programming languages have features for describing interfaces between software components, but none completely support the approach used in generic programming. We have recently developed G, a language designed to provide first-class language support for generic programming and large-scale libraries. In this paper, we present an overview of G and analyze the interdependence between language features and libraries design in light of a complete implementation of the Standard Template Library using G. In addition, we discuss important issues related to modularity and encapsulation in large-scale libraries and how language support for validation of components in isolation can prevent many common problems in component integration.
    [bibtex-entry]


  7. Jeremy G. Siek and Andrew Lumsdaine. Essential Language Support for Generic Programming. In PLDI '05: Proceedings of the ACM SIGPLAN 2005 conference on Programming language design and implementation, New York, NY, USA, pages 73--84, June 2005. ACM Press.
    Annotation: ``Concepts'' are an essential language feature needed to support generic programming in the large. Concepts allow for succinct expression of bounds on type parameters of generic algorithms, enable systematic organization of problem domain abstractions, and make generic algorithms easier to use. In this paper we present the design of a type system and semantics for concepts that is suitable for non-type-inferencing languages. Our design shares much in common with the type classes of Haskell, though our primary influence is from best practices in the \C pp{} community, where concepts are used to document type requirements for templates in generic libraries. Concepts include a novel combination of associated types and same-type constraints that do not appear in type classes, but that are similar to nested types and type sharing in ML.
    [bibtex-entry]


  8. Jeremy G. Siek and Andrew Lumsdaine. Modular Generics. In Concepts: a Linguistic Foundation of Generic Programming, April 2004. Adobe Systems.
    Annotation: This paper presents the design of G, a new language specifically created for generic programming. We review and identify important language features of C++ and Haskell in light of the past decade of generic library research and development. Based on this analysis we propose and evaluate relevant language design decisions for G. Generic programming is concerned with the construction of libraries of reusable software components and is inherently about programming ``in the large.'' Thus, the design of G places its greatest emphasis on modularity and safety, while also providing run-time efficiency and programmer convenience. This paper focuses on name scoping and type checking for generic functions, support for dispatching to algorithm specializations, support for type associations among abstractions, and separate compilation. The resulting design for G includes three novel aspects: scoped models declarations, nested types in concepts, and optional type constraints on generic functions.
    [bibtex-entry]


  9. Ronald Garcia, Jaakko Järvi, Andrew Lumsdaine, Jeremy G. Siek, and Jeremiah Willcock. A Comparative Study of Language Support for Generic Programming. In Proceedings of the 2003 ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA'03), October 2003. [bibtex-entry]


  10. Jaakko Järvi, Andrew Lumsdaine, Jeremy G. Siek, and Jeremiah Willcock. An Analysis of Constrained Polymorphism for Generic Programming. In Kei Davis and Jörg Striegnitz, editors, Multiparadigm Programming in Object-Oriented Languages Workshop (MPOOL) at OOPSLA, Anaheim, CA, October 2003. [bibtex-entry]


  11. Sibylle Schupp, D. P. Gregor, B. Osman, David R. Musser, Jeremy G. Siek, Lie-Quan Lee, and Andrew Lumsdaine. Concept-Based Component Libraries and Optimizing Compilers. In Proceedings IPDPS'02, 2002. [bibtex-entry]


  12. David Abrahams and Jeremy G. Siek. Policy Adaptors and the Boost Iterator Adaptor Library. In Second Workshop on C++ Template Programming, October 2001. [bibtex-entry]


  13. Jeremiah Willcock, Jeremy G. Siek, and Andrew Lumsdaine. Caramel: A Concept Representation System for Generic Programming. In Second Workshop on C++ Template Programming, Tampa, Florida, October 2001. [bibtex-entry]


  14. Jeremy G. Siek and Andrew Lumsdaine. Concept checking: Binding parametric polymorphism in C++. In Proceedings of the First Workshop on C++ Template Programming, Erfurt, Germany, 2000. [bibtex-entry]


  15. Lie-Quan Lee, Jeremy G. Siek, and Andrew Lumsdaine. Generic Graph Algorithms for Sparse Matrix Ordering. In ISCOPE'99, Lecture Notes in Computer Science, 1999. Springer-Verlag. [bibtex-entry]


  16. Jeremy G. Siek, Lie-Quan Lee, and Andrew Lumsdaine. The generic graph component library. In Proceedings of the 1999 ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, pages 399--414, 1999. ACM Press. [bibtex-entry]


  17. Jeremy G. Siek and Andrew Lumsdaine. Mayfly: A Pattern for Lightweight Generic Interfaces. In Pattern Languages of Programs, July 1999. [bibtex-entry]


  18. Jeremy G. Siek and Andrew Lumsdaine. The Matrix Template Library: A Unifying Framework for Numerical Linear Algebra. In Parallel Object Oriented Scientific Computing, 1998. ECOOP. [bibtex-entry]


  19. Jeremy G. Siek and Andrew Lumsdaine. The Basic Linear Algebra Instruction Set: Building Blocks for Portable High Performance. In SciTools, 1998. [bibtex-entry]


  20. Jeremy G. Siek and Andrew Lumsdaine. Generic Programming for High Performance Numerical Linear Algebra. In SciTools, 1998. [bibtex-entry]


  21. Jeremy G. Siek, Andrew Lumsdaine, and Lie-Quan Lee. Generic Programming for High Performance Numerical Linear Algebra. In Proceedings of the SIAM Workshop on Object Oriented Methods for Inter-operable Scientific and Engineering Computing (OO'98), 1998. SIAM Press. [bibtex-entry]


  22. Jeremy G. Siek and Andrew Lumsdaine. The Matrix Template Library: A Generic Programming Approach to High Performance Numerical Linear Algebra. In International Symposium on Computing in Object-Oriented Parallel Environments, number 1505 of Lecture Notes in Computer Science, pages 59--70, 1998. [bibtex-entry]


  23. Jeremy G. Siek and Andrew Lumsdaine. A Rational Approach to Portable High Performance: The Basic Linear Algebra Instruction Set (BLAIS) and the Fixed Algorithm Size Template (FAST) Library. In Parallel Object Oriented Scientific Computing, 1998. ECOOP. [bibtex-entry]


Internal reports
  1. Jeremy G. Siek and Walid Taha. Gradual Typing: Isabelle/Isar Formalization. Technical report TR06-874, Rice University, April 2006. [bibtex-entry]


  2. Jeremy G. Siek, Douglas Gregor, Ronald Garcia, Jeremiah Willcock, Jaakko Järvi, and Andrew Lumsdaine. Concepts for C++0x. Technical report N1758=05-0018, ISO/IEC JTC 1, Information Technology, Subcommittee SC 22, Programming Language C++, 2005. [bibtex-entry]


  3. Jeremy G. Siek and Walid Taha. C++.T Formalization in Isar. Technical report TR05-458, Rice University, Houston, TX, December 2005. [bibtex-entry]


  4. Jeremy G. Siek and Andrew Lumsdaine. Essential Language Support for Generic Programming: Formalization Part 1. Technical report 605, Indiana University, December 2004.
    Annotation: ``Concepts'' are an essential language feature needed to support generic programming in the large. Concepts allow for succinct expression of bounds on type parameters of generic algorithms, enable systematic organization of problem domain abstractions, and make generic algorithms easier to use. In this paper we formalize the design of a type system and semantics for concepts that is suitable for non-type-inferencing languages. Our design shares much in common with the type classes of Haskell, though our primary influence is from best practices in the \C pp{} community, where concepts are used to document type requirements for templates in generic libraries. The technical development in this paper defines an extension to System F and a type-directed translation from the extension back to System F. The translation is proved sound; the proof is written in the human readable but machine checkable Isar language and has been automatically verified by the Isabelle proof assistant. This document was generated directly from the Isar theory files using Isabelle's support for literate proofs.
    [bibtex-entry]


  5. David Abrahams, Jeremy G. Siek, and Thomas Witt. Iterator Facade and Adaptor. Technical report N1476=03-0059, ISO/IEC JTC 1, Information Technology, Subcommittee SC 22, Programming Language C++, 2003. [bibtex-entry]


  6. David Abrahams, Jeremy G. Siek, and Thomas Witt. New Iterator Concepts. Technical report N1477=03-0060, ISO/IEC JTC 1, Information Technology, Subcommittee SC 22, Programming Language C++, 2003. [bibtex-entry]


  7. Daniel P. Friedman, Abdulaziz Ghuloum, Jeremy G. Siek, and Lynn Winebarger. Improving the Lazy Krivine Machine. Technical report 581, Indiana University, November 2003.
    Note: To appear in the journal, Higher Order and Symbolic Computation.
    Annotation: Krivine presents the K machine, which produces weak head normal form results. Sestoft introduces several call-by-need variants of the K machine that implement result sharing via pushing update markers on the stack in a way similar to the TIM and the STG machine. When a sequence of consecutive markers appears on the stack, all but the first cause redundant updates. Improvements related to these sequences have dealt with either the consumption of the markers or the removal of the markers once they appear. Here we present an improvement that eliminates the production of marker sequences of length greater than one. This improvement results in the C machine, a more space and time efficient variant of K. We then apply the classic optimization of short-circuiting operand variable dereferences to create the call-by-need S machine. Finally, we combine the two improvements in the CS machine. On our benchmarks this machine uses half the stack space, performs one quarter as many updates, and executes between 27 0.000000aster and 17lower than our L variant of Sestoft's lazy Krivine machine. More interesting is that on one benchmark L, S, and C consume unbounded space, but CS consumes constant space. Our comparisons to Sestoft's Mark 2 machine are not exact, however, since we restrict ourselves to unpreprocessed closed lambda terms. Our variant of his machine does no environment trimming, conversion to deBruijn-style variable access, and does not provide basic constants, data type constructors, or the recursive let. (The Y combinator is used instead.)
    [bibtex-entry]


  8. J. Järvi, Bjarne Stroustrup, Douglas Gregor, and Jeremy G. Siek. Decltype and Auto. Technical report N1478=03-0061, ISO/IEC JTC 1, Information Technology, Subcommittee SC 22, : Programming Language C++, 2003. [bibtex-entry]


  9. Todd L. Veldhuizen and Jeremy G. Siek. Combining Optimizations, Combining Theories. Technical report 582, Indiana University, May 2003.
    Annotation: We consider the problem of how best to combine optimizations in imperative compilers. It is known that combined optimizations (or ``super-analyses'') can be strictly better than iterating separate improvement passes. We propose an explanation of why this is so by drawing connections between program analysis and the algebraic and coalgebraic views of programs and processes. We argue that ``optimistic'' analyses decide coinductively-defined relations and are based on bisimilarity. We relate combining program improvements to the problem of deciding combinations of theories. Iterating program improvements is similar to the Nelson-Oppen method of deciding combined theories: in Nelson-Oppen decision procedures communicate equalities, and iterated improvement passes implicitly communicate equalities via term replacements. To decide combined theories of bisimilarity, some ``co-Nelson-Oppen'' procedure is needed that propagates \e mph{inequalities} amongst decision procedures. Hence, iterating optimistic analyses fails to be effective because inequalities cannot be communicated by semantics-preserving rewrites. Superanalysis is conjectured to overcome this failing by behaving like a ``co-Nelson-Oppen'' decision procedure.
    [bibtex-entry]


  10. Sibylle Schupp, Douglas Gregor, Brian Osman, David R. Musser, Jeremy G. Siek, Lie-Quan Lee, and Andrew Lumsdaine. Concept-based Component Libraries and Optimizing Compilers. Technical report, RPI Computer Science Department Technical Report 02-02, 2002. [bibtex-entry]


Miscellaneous
  1. Jeremy G. Siek. A Modern Framework for Portable High Performance Numerical Linear Algebra. Master's thesis, University of Notre Dame, 1999. [bibtex-entry]



BACK TO INDEX




Disclaimer:

This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All person copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.

Les documents contenus dans ces répertoires sont rendus disponibles par les auteurs qui y ont contribué en vue d'assurer la diffusion à temps de travaux savants et techniques sur une base non-commerciale. Les droits de copie et autres droits sont gardés par les auteurs et par les détenteurs du copyright, en dépit du fait qu'ils présentent ici leurs travaux sous forme électronique. Les personnes copiant ces informations doivent adhérer aux termes et contraintes couverts par le copyright de chaque auteur. Ces travaux ne peuvent pas être rendus disponibles ailleurs sans la permission explicite du détenteur du copyright.




Last modified: Sat Jul 15 14:51:45 2006
Author: jsiek.


This document was translated from BibTEX by bibtex2html