Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data.

Tillmann Rendel

dblp:72/3832 · DBLP profile ↗
← Back
13ranked-venue papers
4as first author
0since 2021 · last 2016
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 13 · 4 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
6 papers
Compilers and program optimization · 48% Programming languages and type systems · 31% Program analysis · 12%

Topics — the 13 heaviest of 15, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Compilers and program optimization
parsing
0.532016
Parsing with first-class derivatives · OOPSLA 2016
Variability-aware parsing in the presence of lexical macros and conditional compilation · OOPSLA 2011
SugarJ: library-based syntactic language extensibility · OOPSLA 2011
Compilers and program optimization › parsing
parser combinators
0.212016
Parsing with first-class derivatives · OOPSLA 2016
Programming languages and type systems › grammar formalisms
attribute grammars
0.212014
From object algebras to attribute grammars · OOPSLA 2014
Program analysis › static analysis
incremental analysis
0.212014
A theory of changes for higher-order languages: incrementalizing λ-calculi by static differentiation · PLDI 2014
Compilers and program optimization
program transformation
0.212014
A theory of changes for higher-order languages: incrementalizing λ-calculi by static differentiation · PLDI 2014
Programming languages and type systems
domain-specific languages
0.112011
SugarJ: library-based syntactic language extensibility · OOPSLA 2011
Compilers and program optimization › parsing
incremental parsing
0.112011
SugarJ: library-based syntactic language extensibility · OOPSLA 2011
Programming languages and type systems
language design
0.112011
SugarJ: library-based syntactic language extensibility · OOPSLA 2011
Programming languages and type systems › metaprogramming
language embedding
0.112011
SugarJ: library-based syntactic language extensibility · OOPSLA 2011
Requirements engineering and software design
software product lines
0.112011
Variability-aware parsing in the presence of lexical macros and conditional compilation · OOPSLA 2011
Software maintenance and evolution
software variability
0.112011
Variability-aware parsing in the presence of lexical macros and conditional compilation · OOPSLA 2011
Program analysis
variability analysis
0.112011
Variability-aware parsing in the presence of lexical macros and conditional compilation · OOPSLA 2011
Programming languages and type systems
lambda calculus
0.112009
Typed self-representation · PLDI 2009

Methods — techniques the papers use, named apart from their topics

formalization · 0.3scala encoding · 0.2program differentiation · 0.2lambda calculus · 0.2variability-aware parsing · 0.1sugar libraries · 0.1stratego · 0.1SDF · 0.1type soundness proof · 0.1
YearPublicationVenuePosition
2016 Parsing with first-class derivatives
abstract
Brzozowski derivatives, well known in the context of regular expressions, have recently been rediscovered to give a simplified explanation to parsers of context-free languages. We add derivatives as a novel first-class feature to a standard parser combinator language. First-class derivatives enable an inversion of the control flow, allowing to implement modular parsers for languages that previously required separate pre-processing steps or cross-cutting modifications of the parsers. We show that our framework offers new opportunities for reuse and supports a modular definition of interesting use cases of layout-sensitive parsing.
Jonathan Immanuel Brachthäuser, Tillmann Rendel, Klaus Ostermann
OOPSLA2
2015 Automatic refunctionalization to a language with copattern matching: with applications to the expression problem
abstract
Defunctionalization and refunctionalization establish a correspondence between first-class functions and pattern matching, but the correspondence is not symmetric: Not all uses of pattern matching can be automatically refunctionalized to uses of higher-order functions. To remedy this asymmetry, we generalize from first-class functions to arbitrary codata. This leads us to full defunctionalization and refunctionalization between a codata language based on copattern matching and a data language based on pattern matching. We observe how programs can be written as matrices so that they are modularly extensible in one dimension but not the other. In this representation, defunctionalization and refunctionalization correspond to matrix transposition which effectively changes the dimension of extensibility a program supports. This suggests applications to the expression problem.
Tillmann Rendel, Julia Trieflinger, Klaus Ostermann
ICFP1
2014 From object algebras to attribute grammars
abstract
Oliveira and Cook (2012) and Oliveira et al. (2013) have recently introduced object algebras as a program structuring technique to improve the modularity and extensibility of programs. We analyze the relationship between object algebras and attribute grammars (AGs), a formalism to augment context-free grammars with attributes. We present an extension of the object algebra technique with which the full class of L-attributed grammars - an important class of AGs that corresponds to one-pass compilers - can be encoded in Scala. The encoding is modular (attributes can be defined and type-checked separately), scalable (the size of the encoding is linear in the size of the AG specification) and compositional (each AG artifact is represented as a semantic object of the host language). To evaluate these claims, we have formalized the encoding and re-implemented a one-pass compiler for a subset of C with our technique. We also discuss how advanced features of modern AG systems, such as higher-order and parameterized attributes, reference attributes, and forwarding can be supported.
Tillmann Rendel, Jonathan Immanuel Brachthäuser, Klaus Ostermann
OOPSLA1
2014 A theory of changes for higher-order languages: incrementalizing λ-calculi by static differentiation
abstract
If the result of an expensive computation is invalidated by a small change to the input, the old result should be updated incrementally instead of reexecuting the whole computation. We incrementalize programs through their derivative. A derivative maps changes in the program's input directly to changes in the program's output, without reexecuting the original program. We present a program transformation taking programs to their derivatives, which is fully static and automatic, supports first-class functions, and produces derivatives amenable to standard optimization.
Yufei Cai, Paolo G. Giarrusso, Tillmann Rendel, Klaus Ostermann
PLDI3
2012 Layout-sensitive language extensibility with SugarHaskell
abstract
Programmers need convenient syntax to write elegant and concise programs. Consequently, the Haskell standard provides syntactic sugar for some scenarios (e.g., do notation for monadic code), authors of Haskell compilers provide syntactic sugar for more scenarios (e.g., arrow notation in GHC), and some Haskell programmers implement preprocessors for their individual needs (e.g., idiom brackets in SHE). But manually written preprocessors cannot scale: They are expensive, error-prone, and not composable. Most researchers and programmers therefore refrain from using the syntactic notations they need in actual Haskell programs, but only use them in documentation or papers. We present a syntactically extensible version of Haskell, SugarHaskell, that empowers ordinary programmers to implement and use custom syntactic sugar.
Sebastian Erdweg, Felix Rieger, Tillmann Rendel, Klaus Ostermann
Haskell3
2012 Layout-Sensitive Generalized Parsing
Sebastian Erdweg, Tillmann Rendel, Christian Kästner, Klaus Ostermann
SLE2
2011 Revisiting Information Hiding: Reflections on Classical and Nonclassical Modularity
Klaus Ostermann, Paolo G. Giarrusso, Christian Kästner, Tillmann Rendel
ECOOP4
2011 Growing a language environment with editor libraries
abstract
Large software projects consist of code written in a multitude of different (possibly domain-specific) languages, which are often deeply interspersed even in single files. While many proposals exist on how to integrate languages semantically and syntactically, the question of how to support this scenario in integrated development environments (IDEs) remains open: How can standard IDE services, such as syntax highlighting, outlining, or reference resolving, be provided in an extensible and compositional way, such that an open mix of languages is supported in a single file?
Sebastian Erdweg, Lennart C. L. Kats, Tillmann Rendel, Christian Kästner, Klaus Ostermann, Eelco Visser
GPCE3
2011 SugarJ: library-based syntactic language extensibility
abstract
Existing approaches to extend a programming language with syntactic sugar often leave a bitter taste, because they cannot be used with the same ease as the main extension mechanism of the programming language - libraries. Sugar libraries are a novel approach for syntactically extending a programming language within the language. A sugar library is like an ordinary library, but can, in addition, export syntactic sugar for using the library. Sugar libraries maintain the composability and scoping properties of ordinary libraries and are hence particularly well-suited for embedding a multitude of domain-specific languages into a host language. They also inherit self-applicability from libraries, which means that sugar libraries can provide syntactic extensions for the definition of other sugar libraries. To demonstrate the expressiveness and applicability of sugar libraries, we have developed SugarJ, a language on top of Java, SDF and Stratego, which supports syntactic extensibility. SugarJ employs a novel incremental parsing technique, which allows changing the syntax within a source file. We demonstrate SugarJ by five language extensions, including embeddings of XML and closures in Java, all available as sugar libraries. We illustrate the utility of self-applicability by embedding XML Schema, a metalanguage to define XML languages.
Sebastian Erdweg, Tillmann Rendel, Christian Kästner, Klaus Ostermann
OOPSLA2
2011 Variability-aware parsing in the presence of lexical macros and conditional compilation
abstract
In many projects, lexical preprocessors are used to manage different variants of the project (using conditional compilation) and to define compile-time code transformations (using macros). Unfortunately, while being a simple way to implement variability, conditional compilation and lexical macros hinder automatic analysis, even though such analysis is urgently needed to combat variability-induced complexity. To analyze code with its variability, we need to parse it without preprocessing it. However, current parsing solutions use unsound heuristics, support only a subset of the language, or suffer from exponential explosion. As part of the TypeChef project, we contribute a novel variability-aware parser that can parse almost all unpreprocessed code without heuristics in practicable time. Beyond the obvious task of detecting syntax errors, our parser paves the road for further analysis, such as variability-aware type checking. We implement variability-aware parsers for Java and GNU C and demonstrate practicability by parsing the product line MobileMedia and the entire X86 architecture of the Linux kernel with 6065 variable features.
Christian Kästner, Paolo G. Giarrusso, Tillmann Rendel, Sebastian Erdweg, Klaus Ostermann, Thorsten Berger
OOPSLA3
2010 Invertible syntax descriptions: unifying parsing and pretty printing
abstract
Parsers and pretty-printers for a language are often quite similar, yet both are typically implemented separately, leading to redundancy and potential inconsistency. We propose a new interface of syntactic descriptions, with which both parser and pretty-printer can be described as a single program. Whether a syntactic description is used as a parser or as a pretty-printer is determined by the implementation of the interface. Syntactic descriptions enable programmers to describe the connection between concrete and abstract syntax once and for all, and use these descriptions for parsing or pretty-printing as needed. We also discuss the generalization of our programming technique towards an algebra of partial isomorphisms.
Tillmann Rendel, Klaus Ostermann
Haskell1
2009 Typed self-representation
abstract
Self-representation -- the ability to represent programs in their own language -- has important applications in reflective languages and many other domains of programming language design. Although approaches to designing typed program representations for sublanguages of some base language have become quite popular recently, the question whether a fully metacircular typed self-representation is possible is still open. This paper makes a big step towards this aim by defining the Fω* calculus, an extension of the higher-order polymorphic lambda calculus Fω that allows typed self-representations. While the usability of these representations for metaprogramming is still limited, we believe that our approach makes a significant step towards a new generation of reflective languages that are both safe and efficient.
Tillmann Rendel, Klaus Ostermann, Christian Hofer
PLDI1
2008 Polymorphic embedding of dsls
abstract
The influential pure embedding methodology of embedding domain-specific languages (DSLs) as libraries into a general-purpose host language forces the DSL designer to commit to a single semantics. This precludes the subsequent addition of compilation, optimization or domain-specific analyses. We propose polymorphic embedding of DSLs, where many different interpretations of a DSL can be provided as reusable components, and show how polymorphic embedding can be realized in the programming language Scala. With polymorphic embedding, the static type-safety, modularity, composability and rapid prototyping of pure embedding are reconciled with the flexibility attainable by external toolchains.
Christian Hofer, Klaus Ostermann, Tillmann Rendel, Adriaan Moors
GPCE3