VLDB 2026 Research / reviewers in the wild / expert
Aggelos Biboudis
dblp:136/1016
· DBLP profile ↗
9ranked-venue papers
2as first author
0since 2021 · last 2020
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 9 · 2 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
5 papers |
Programming languages and type systems · 83% Program verification · 11% Compilers and program optimization · 6% |
Topics — the 12 heaviest of 14, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Programming languages and type systems
type systems |
0.7 | 3 | 2018 | Simplicitly: foundations and applications of implicit function types · Proc. ACM Program. Lang. 2018 Automating ad hoc data representation transformations · OOPSLA 2015 Forsaking inheritance: supercharged delegation in DelphJ · OOPSLA 2013 |
Programming languages and type systems › type systems
object initialization |
0.4 | 1 | 2020 | A type-and-effect system for object initialization · Proc. ACM Program. Lang. 2020 |
Programming languages and type systems › computational effects
type and effect systems |
0.4 | 1 | 2020 | A type-and-effect system for object initialization · Proc. ACM Program. Lang. 2020 |
Programming languages and type systems › type checking
bidirectional type checking |
0.3 | 1 | 2018 | Simplicitly: foundations and applications of implicit function types · Proc. ACM Program. Lang. 2018 |
Programming languages and type systems
functional programming |
0.3 | 1 | 2017 | Stream fusion, to completeness · POPL 2017 |
Programming languages and type systems › programming models
stream processing |
0.3 | 1 | 2017 | Stream fusion, to completeness · POPL 2017 |
Compilers and program optimization › memory optimization
data layout transformation |
0.2 | 1 | 2015 | Automating ad hoc data representation transformations · OOPSLA 2015 |
Programming languages and type systems › language semantics
core calculus |
0.2 | 1 | 2013 | Forsaking inheritance: supercharged delegation in DelphJ · OOPSLA 2013 |
Programming languages and type systems › object-oriented programming
delegation |
0.2 | 1 | 2013 | Forsaking inheritance: supercharged delegation in DelphJ · OOPSLA 2013 |
Programming languages and type systems › language semantics
formal semantics |
0.2 | 1 | 2013 | Forsaking inheritance: supercharged delegation in DelphJ · OOPSLA 2013 |
Programming languages and type systems › object-oriented programming
object-oriented language design |
0.2 | 1 | 2013 | Forsaking inheritance: supercharged delegation in DelphJ · OOPSLA 2013 |
Programming languages and type systems › computational effects
monads |
0.1 | 1 | 2018 | Simplicitly: foundations and applications of implicit function types · Proc. ACM Program. Lang. 2018 |
Methods — techniques the papers use, named apart from their topics
typestate polymorphism · 0.4subtyping · 0.4formalization · 0.3bidirectional type checking · 0.3
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2020 | A type-and-effect system for object initializationabstractEvery newly created object goes through several initialization states: starting from a state where all fields are uninitialized until all of them are assigned. Any operation on the object during its initialization process, which usually happens in the constructor via this , has to observe the initialization states of the object for correctness, i.e. only initialized fields may be used. Checking safe usage of this statically, without manual annotation of initialization states in the source code, is a challenge, due to aliasing and virtual method calls on this . Mainstream languages either do not check initialization errors, such as Java, C++, Scala, or they defend against them by not supporting useful initialization patterns, such as Swift. In parallel, past research has shown that safe initialization can be achieved for varying degrees of expressiveness but by sacrificing syntactic simplicity. We approach the problem by upholding local reasoning about initialization which avoids whole-program analysis, and we achieve typestate polymorphism via subtyping. On this basis, we put forward a novel type-and-effect system that can effectively ensure initialization safety while allowing flexible initialization patterns. We implement an initialization checker in the Scala 3 compiler and evaluate on several real-world projects. Fengyun Liu, Ondrej Lhoták, Aggelos Biboudis, Paolo G. Giarrusso, Martin Odersky |
Proc. ACM Program. Lang. | 3 |
| 2018 | A practical unification of multi-stage programming and macrosabstractProgram generation is indispensable. We propose a novel unification of two existing metaprogramming techniques: multi-stage programming and hygienic generative macros. The former supports runtime code generation and execution in a type-safe manner while the latter offers compile-time code generation. Nicolas Stucki, Aggelos Biboudis, Martin Odersky |
GPCE | 2 |
| 2018 | Simplicitly: foundations and applications of implicit function typesabstractUnderstanding a program entails understanding its context; dependencies, configurations and even implementations are all forms of contexts. Modern programming languages and theorem provers offer an array of constructs to define contexts, implicitly. Scala offers implicit parameters which are used pervasively, but which cannot be abstracted over. This paper describes a generalization of implicit parameters to implicit function types , a powerful way to abstract over the context in which some piece of code is run. We provide a formalization based on bidirectional type-checking that closely follows the semantics implemented by the Scala compiler. To demonstrate their range of abstraction capabilities, we present several applications that make use of implicit function types. We show how to encode the builder pattern, tagless interpreters, reader and free monads and we assess the performance of the monadic structures presented. Martin Odersky, Olivier Blanvillain, Fengyun Liu, Aggelos Biboudis, Heather Miller, Sandro Stucki |
Proc. ACM Program. Lang. | 4 |
| 2017 | Stream fusion, to completenessabstractStream processing is mainstream (again): Widely-used stream libraries are now available for virtually all modern OO and functional languages, from Java to C# to Scala to OCaml to Haskell. Yet expressivity and performance are still lacking. For instance, the popular, well-optimized Java 8 streams do not support the zip operator and are still an order of magnitude slower than hand-written loops. Oleg Kiselyov, Aggelos Biboudis, Nick Palladinos, Yannis Smaragdakis |
POPL | 2 |
| 2016 | Recaf: Java dialects as librariesabstractMainstream programming languages like Java have limited support for language extensibility. Without mechanisms for syntactic abstraction, new programming styles can only be embedded in the form of libraries, limiting expressiveness. In this paper, we present Recaf, a lightweight tool for creating Java dialects; effectively extending Java with new language constructs and user defined semantics. The Recaf compiler generically transforms designated method bodies to code that is parameterized by a semantic factory (Object Algebra), defined in plain Java. The implementation of such a factory defines the desired runtime semantics. We applied our design to produce several examples from a diverse set of programming styles and two case studies: we define i) extensions for generators, asynchronous computations and asynchronous streams and ii) a Domain-Specific Language (DSL) for Parsing Expression Grammars (PEGs), in a few lines of code. Aggelos Biboudis, Pablo Inostroza, Tijs van der Storm |
GPCE | 1 |
| 2015 | Streams a la carte: Extensible Pipelines with Object AlgebrasabstractStreaming libraries have become ubiquitous in object-oriented languages, with recent offerings in Java, C#, and Scala. All such libraries, however, suffer in terms of extensibility: there is no way to change the semantics of a streaming pipeline (e.g., to fuse filter operators, to perform computations lazily, to log operations) without changes to the library code. Furthermore, in some languages it is not even possible to add new operators (e.g., a zip operator, in addition to the standard map, filter, etc.) without changing the library. We address such extensibility shortcomings with a new design for streaming libraries. The architecture underlying this design borrows heavily from Oliveira and Cook's object algebra solution to the expression problem, extended with a design that exposes the push/pull character of the iteration, and an encoding of higher-kinded polymorphism. We apply our design to Java and show that the addition of full extensibility is accompanied by high performance, matching or exceeding that of the original, highly-optimized Java streams library. Aggelos Biboudis, Nick Palladinos, Georgios Fourtounis 0001, Yannis Smaragdakis |
ECOOP | 1 |
| 2015 | Automating ad hoc data representation transformationsabstractTo maximize run-time performance, programmers often specialize their code by hand, replacing library collections and containers by custom objects in which data is restructured for efficient access. However, changing the data representation is a tedious and error-prone process that makes it hard to test, maintain and evolve the source code. We present an automated and composable mechanism that allows programmers to safely change the data representation in delimited scopes containing anything from expressions to entire class definitions. To achieve this, programmers define a transformation and our mechanism automatically and transparently applies it during compilation, eliminating the need to manually change the source code. Our technique leverages the type system in order to offer correctness guarantees on the transformation and its interaction with object-oriented language features, such as dynamic dispatch, inheritance and generics. We have embedded this technique in a Scala compiler plugin and used it in four very different transformations, ranging from improving the data layout and encoding, to retrofitting specialization and value class status, and all the way to collection deforestation. On our benchmarks, the technique obtained speedups between 1.8x and 24.5x. Vlad Ureche, Aggelos Biboudis, Yannis Smaragdakis, Martin Odersky |
OOPSLA | 2 |
| 2013 | Reified type parameters using Java annotationsabstractJava 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 offer trade-offs on multiple axes. We propose an extension of Java generics that allows by-expansion translation relative to selected type parameters only. This language design allows sophisticated users to get the best of both worlds at a fine granularity. Furthermore, our proposal is based on Java 8 Type Annotations (JSR 308) and the Checker Framework as an abstraction layer for controlling compilation without changes to the internals of a Java compiler. Prodromos Gerakios, Aggelos Biboudis, Yannis Smaragdakis |
GPCE | 2 |
| 2013 | Forsaking inheritance: supercharged delegation in DelphJabstractWe propose DelphJ: a Java-based OO language that eschews inheritance completely, in favor of a combination of class morphing and (deep) delegation. Compared to past delegation approaches, the novel aspect of our design is the ability to emulate the best aspects of inheritance while retaining maximum flexibility: using morphing, a class can select any of the methods of its delegatee and export them (if desired) or transform them (e.g., to add extra arguments or modify type signatures), yet without needing to name these methods explicitly and handle them one-by-one. Compared to past work on morphing, our approach adopts and adapts advanced delegation mechanisms, in order to add late binding capabilities and, thus, provide a full substitute of inheritance. Additionally, we explore complex semantic issues in the interaction of delegation with late binding. We present our language design both informally, with numerous examples, and formally in a core calculus. Prodromos Gerakios, Aggelos Biboudis, Yannis Smaragdakis |
OOPSLA | 2 |