OOPSLA/ECOOP '90 Proceedings of the European conference on object-oriented programming on Object-oriented programming systems, languages, and applications
The design and evolution of C++
The design and evolution of C++
Points-to analysis in almost linear time
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Dynamic typing as staged type inference
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Term rewriting and all that
Generic programming and the STL: using and extending the C++ Standard Template Library
Generic programming and the STL: using and extending the C++ Standard Template Library
Dependent types in practical programming
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type inference with constrained types
Theory and Practice of Object Systems - Special issue on foundations of object-oriented languages
A Machine-Oriented Logic Based on the Resolution Principle
Journal of the ACM (JACM)
Fast Decision Procedures Based on Congruence Closure
Journal of the ACM (JACM)
Variations on the Common Subexpression Problem
Journal of the ACM (JACM)
Generative programming: methods, tools, and applications
Generative programming: methods, tools, and applications
Unification-based pointer analysis with directional assignments
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
MetaML and multi-stage programming with explicit annotations
Theoretical Computer Science - Partial evaluation and semantics-based program manipulation
Aspect-oriented programming: Introduction
Communications of the ACM
Types and programming languages
Types and programming languages
Principal type-schemes for functional programs
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Template meta-programming for Haskell
ACM SIGPLAN Notices
Conquering aspects with Caesar
Proceedings of the 2nd international conference on Aspect-oriented software development
Inductive Definitions in the system Coq - Rules and Properties
TLCA '93 Proceedings of the International Conference on Typed Lambda Calculi and Applications
A General Type Inference Framework for Hindley/Milner Style Systems
FLOPS '01 Proceedings of the 5th International Symposium on Functional and Logic Programming
Handling Preprocessor-Conditioned Declarations
SCAM '02 Proceedings of the Second IEEE International Workshop on Source Code Analysis and Manipulation
Extensional normalisation and type-directed partial evaluation for typed lambda calculus with sums
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
IEEE Transactions on Software Engineering
Variability management with feature-oriented programming and aspects
Proceedings of the 12th ACM SIGSOFT twelfth international symposium on Foundations of software engineering
C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond (C++ in Depth Series)
Unification Modulo ACUI Plus Distributivity Axioms
Journal of Automated Reasoning
Software Product Line Engineering: Foundations, Principles and Techniques
Software Product Line Engineering: Foundations, Principles and Techniques
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Algorithm specialization in generic programming: challenges of constrained generics in C++
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
Polymorphic variants in Haskell
Proceedings of the 2006 ACM SIGPLAN workshop on Haskell
Statically scoped object adaptation with expanders
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Concepts: linguistic support for generic programming in C++
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Reflective program generation with patterns
Proceedings of the 5th international conference on Generative programming and component engineering
cJ: enhancing java with safe type conditions
Proceedings of the 6th international conference on Aspect-oriented software development
Concoqtion: indexed types now!
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Safe composition of product lines
GPCE '07 Proceedings of the 6th international conference on Generative programming and component engineering
Foundations for structured programming with GADTs
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Hm(x) type inference is clp(x) solving
Journal of Functional Programming
Granularity in software product lines
Proceedings of the 30th international conference on Software engineering
Expressive and safe static reflection with MorphJ
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Building a Family of Compilers
SPLC '08 Proceedings of the 2008 12th International Software Product Line Conference
On the modularity of feature interactions
GPCE '08 Proceedings of the 7th international conference on Generative programming and component engineering
Feature featherweight java: a calculus for feature-oriented programming and stepwise refinement
GPCE '08 Proceedings of the 7th international conference on Generative programming and component engineering
A machine-checked model of safe composition
Proceedings of the 2009 workshop on Foundations of aspect-oriented languages
Static computation and reflection
Static computation and reflection
Fitting the pieces together: a machine-checked model of safe composition
Proceedings of the the 7th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering
Toward foundations for type-reflective metaprogramming
GPCE '09 Proceedings of the eighth international conference on Generative programming and component engineering
A calculus for uniform feature composition
ACM Transactions on Programming Languages and Systems (TOPLAS)
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
Type safety for feature-oriented product lines
Automated Software Engineering
Incremental type-checking for type-reflective metaprograms
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
TypeChef: toward type checking #ifdef variability in C
FOSD '10 Proceedings of the 2nd International Workshop on Feature-Oriented Software Development
Morphing: Structurally shaping a class by reflecting on others
ACM Transactions on Programming Languages and Systems (TOPLAS)
MAVEN: modular aspect verification and interference analysis
Formal Methods in System Design
Symbolic model checking of software product lines
Proceedings of the 33rd International Conference on Software Engineering
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Variability-aware parsing in the presence of lexical macros and conditional compilation
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
The Choice Calculus: A Representation for Software Variation
ACM Transactions on Software Engineering and Methodology (TOSEM)
Statically safe program generation with safegen
GPCE'05 Proceedings of the 4th international conference on Generative Programming and Component Engineering
Intraprocedural dataflow analysis for software product lines
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
A closer look at aspect interference and cooperation
Proceedings of the 11th annual international conference on Aspect-oriented Software Development
A semantic analysis of c++ templates
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
Type checking annotation-based product lines
ACM Transactions on Software Engineering and Methodology (TOSEM)
SuperC: parsing all of C by taming the preprocessor
Proceedings of the 33rd ACM SIGPLAN conference on Programming Language Design and Implementation
Simulation-based abstractions for software product-line model checking
Proceedings of the 34th International Conference on Software Engineering
An error-tolerant type system for variational lambda calculus
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
A variability-aware module system
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Strategies for product-line verification: case studies and experiments
Proceedings of the 2013 International Conference on Software Engineering
Counter-factual typing for debugging type errors
Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages
Hi-index | 0.00 |
Through the use of conditional compilation and related tools, many software projects can be used to generate a huge number of related programs. The problem of typing such variational software is difficult. The brute-force strategy of generating all variants and typing each one individually is: (1) usually infeasible for efficiency reasons and (2) produces results that do not map well to the underlying variational program. Recent research has focused mainly on efficiency and addressed only the problem of type checking. In this work we tackle the more general problem of variational type inference and introduce variational types to represent the result of typing a variational program. We introduce the variational lambda calculus (VLC) as a formal foundation for research on typing variational programs. We define a type system for VLC in which VLC expressions are mapped to correspondingly variational types. We show that the type system is correct by proving that the typing of expressions is preserved over the process of variation elimination, which eventually results in a plain lambda calculus expression and its corresponding type. We identify a set of equivalence rules for variational types and prove that the type unification problem modulo these equivalence rules is unitary and decidable; we also present a sound and complete unification algorithm. Based on the unification algorithm, the variational type inference algorithm is an extension of algorithm W. We show that it is sound and complete and computes principal types. We also consider the extension of VLC with sum types, a necessary feature for supporting variational data types, and demonstrate that the previous theoretical results also hold under this extension. Finally, we characterize the complexity of variational type inference and demonstrate the efficiency gains over the brute-force strategy.