Welcome to the Twelfth International Conference on Generative Programming: Concepts & Experiences (GPCE'13). GPCE continues to provide the premiere venue for researchers and practitioners interested in techniques that use program generation, domain-specific languages, and component deployment to increase programmer productivity, improve software quality, and shorten the time-to-market of software products. In addition to exploring cutting-edge techniques of generative software, our goal is to foster further cross-fertilization between the software engineering and the programming languages research communities. This year, GPCE is co-located with OOSPLA, the premier conference on object-oriented programming, with SLE, the conference on software language engineering, and with various other events under the SPLASH umbrella. GPCE participants are invited to visit other sessions on the same day and vice versa. This provides the attendees of all events with a comprehensive overview of current research at the intersection of programming languages and software engineering.
This volume contains the papers presented at the conference as well as the abstracts of the keynote presentations. GPCE'13 attracted 59 submissions with authors from 23 different countries. Each submission was reviewed by at least three members of the program committee. In 17 cases we reached out to external experts for an additional review. The submissions were discussed intensively during a week-long electronic program committee meeting. As a result of this meeting, 17 full research papers and 3 short research papers were selected for presentation at the conference, covering all topic areas of the call for papers, from domain-specific languages, to empirical results, and to program synthesis. The conference program also includes two keynote presentations shared with SLE, one by Don Batory titled "Dark Knowledge and Graph Grammars in Automated Software Design" and another by Ras Bodik titled "Solver-Aided Languages".
Proceeding Downloads
Modeling biology with solver-aided programming languages
A good model of a biological cell exposes secrets of the cell's signaling mechanisms, explaining diseases and facilitating drug discovery. Modeling cells is fundamentally a programming problem - it's programming because the model is a concurrent program ...
A framework for extensible languages
Extensible programming languages such as SugarJ or Racket enable programmers to introduce customary language features as extensions of the base language. Traditionally, systems that support language extensions are either (i) agnostic to the base ...
Submodules in racket: you want it when, again?
In an extensible programming language, programmers write code that must run at different times - in particular, at compile time versus run time. The module system of the Racket programming language enables a programmer to reason about programs in the ...
Declarative visitors to ease fine-grained source code mining with full history on billions of AST nodes
Software repositories contain a vast wealth of information about software development. Mining these repositories has proven useful for detecting patterns in software development, testing hypotheses for new software engineering approaches, etc. ...
Open pattern matching for C++
Pattern matching is an abstraction mechanism that can greatly simplify source code. We present functional-style pattern matching for C++ implemented as a library, called Mach71. All the patterns are user-definable, can be stored in variables, passed ...
Template constructors for reusable object initialization
Reuse of and abstraction over object initialization logic is not properly supported in mainstream object-oriented languages. This may result in significant amount of boilerplate code and proliferation of constructors in subclasses. It also makes it ...
Efficient high-level abstractions for web programming
Writing large Web applications is known to be difficult. One challenge comes from the fact that the application's logic is scattered into heterogeneous clients and servers, making it difficult to share code between both sides or to move code from one ...
Reified type parameters using Java annotations
Java generics are compiled by-erasure: all clients reuse the same bytecode, with uses of the unknown type erased. C++ templates are compiled by-expansion: each type-instantiation of a template produces a different code definition. The two approaches ...
Does the discipline of preprocessor annotations matter?: a controlled experiment
The C preprocessor (CPP) is a simple and language-independent tool, widely used to implement variable software systems using conditional compilation (i.e., by including or excluding annotated code). Although CPP provides powerful means to express ...
Investigating preprocessor-based syntax errors
The C preprocessor is commonly used to implement variability in program families. Despite the widespread usage, some studies indicate that the C preprocessor makes variability implementation difficult and error-prone. However, we still lack studies to ...
Using document-oriented GUIs in dynamic software product lines
Dynamic Software Product Line (DSPL) Engineering has gained interest through its promise of being able to unify software adaptation whereby software adaptation can be realised at compile time and runtime. While previous work has enabled program logic ...
Family-based performance measurement
Most contemporary programs are customizable. They provide many features that give rise to millions of program variants. Determining which feature selection yields an optimal performance is challenging, because of the exponential number of variants. ...
ShadowVM: robust and comprehensive dynamic program analysis for the java platform
- Lukáš Marek,
- Stephen Kell,
- Yudi Zheng,
- Lubomír Bulej,
- Walter Binder,
- Petr Tůma,
- Danilo Ansaloni,
- Aibek Sarimbekov,
- Andreas Sewe
Dynamic analysis tools are often implemented using instrumentation, particularly on managed runtimes including the Java Virtual Machine (JVM). Performing instrumentation robustly is especially complex on such runtimes: existing frameworks offer limited ...
A comparison of product-based, feature-based, and family-based type checking
Analyzing software product lines is difficult, due to their inherent variability. In the past, several strategies for product-line analysis have been proposed, in particular, product-based, feature-based, and family-based strategies. Despite recent ...
Spiral in scala: towards the systematic construction of generators for performance libraries
Program generators for high performance libraries are an appealing solution to the recurring problem of porting and optimizing code with every new processor generation, but only few such generators exist to date. This is due to not only the difficulty ...
Scalaness/nesT: type specialized staged programming for sensor networks
Programming wireless embedded networks is challenging due to severe limitations on processing speed, memory, and bandwidth. Staged programming can help bridge the gap between high level code refinement techniques and efficient device level programs by ...
Forge: generating a high performance DSL implementation from a declarative specification
- Arvind K. Sujeeth,
- Austin Gibbons,
- Kevin J. Brown,
- HyoukJoong Lee,
- Tiark Rompf,
- Martin Odersky,
- Kunle Olukotun
Domain-specific languages provide a promising path to automatically compile high-level code to parallel, heterogeneous, and distributed hardware. However, in practice high performance DSLs still require considerable software expertise to develop and ...
On the simplicity of synthesizing linked data structure operations
We argue that synthesizing operations on recursive linked data structures is not as hard as it appears and is, in fact, within reach of current SAT-based synthesis techniques - with the addition of a simple approach that we describe to decompose the ...
Generation of conjoint domain models for system-of-systems
Software solutions in complex environments, such as railway control systems or power plants, are assemblies of heterogeneous components, which are very large and complex systems themselves. Interplay of these systems requires a thorough design of a ...
Supporting large scale model transformation reuse
The growth of applications developed with the support of model transformations makes reuse a required practice, specially when applied to transformation assets (e.g. transformation chains, algorithms, and configuration files). In order to promote reuse ...
Model-driven generative framework for automated OMG DDS performance testing in the cloud
The Object Management Group's (OMG) Data Distribution Service (DDS) provides many configurable policies which determine end-to-end quality of service (QoS) of applications. It is challenging to predict the system's performance in terms of latencies, ...
Index Terms
- Proceedings of the 12th international conference on Generative programming: concepts & experiences