Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Aggelos Biboudis is active.

Publication


Featured researches published by Aggelos Biboudis.


european conference on object-oriented programming | 2015

Streams à la carte: Extensible Pipelines with Object Algebras

Aggelos Biboudis; Nick Palladinos; George Fourtounis; Yannis Smaragdakis

Streaming libraries have become ubiquitous in object-oriented languages, with recent oerings in Java, C#, and Scala. All such libraries, however, suer in terms of extensibility: there is no


symposium on principles of programming languages | 2017

Stream fusion, to completeness

Oleg Kiselyov; Aggelos Biboudis; Nick Palladinos; Yannis Smaragdakis

Stream 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. We present the first approach that represents the full generality of stream processing and eliminates overheads, via the use of staging. It is based on an unusually rich semantic model of stream interaction. We support any combination of zipping, nesting (or flat-mapping), sub-ranging, filtering, mapping—of finite or infinite streams. Our model captures idiosyncrasies that a programmer uses in optimizing stream pipelines, such as rate differences and the choice of a “for” vs. “while” loops. Our approach delivers hand-written–like code, but automatically. It explicitly avoids the reliance on black-box optimizers and sufficiently-smart compilers, offering highest, guaranteed and portable performance. Our approach relies on high-level concepts that are then readily mapped into an implementation. Accordingly, we have two distinct implementations: an OCaml stream library, staged via MetaOCaml, and a Scala library for the JVM, staged via LMS. In both cases, we derive libraries richer and simultaneously many tens of times faster than past work. We greatly exceed in performance the standard stream libraries available in Java, Scala and OCaml, including the well-optimized Java 8 streams.


conference on object oriented programming systems languages and applications | 2015

Automating ad hoc data representation transformations

Vlad Ureche; Aggelos Biboudis; Yannis Smaragdakis

To 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.


conference on object oriented programming systems languages and applications | 2013

Forsaking inheritance: supercharged delegation in DelphJ

Prodromos Gerakios; Aggelos Biboudis; Yannis Smaragdakis

We 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.


Sigplan Notices | 2014

Reified type parameters using Java annotations

Prodromos Gerakios; Aggelos Biboudis; Yannis Smaragdakis

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 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.


symposium on principles of programming languages | 2017

Simplicitly: foundations and applications of implicit function types

Olivier Blanvillain; Fengyun Liu; Aggelos Biboudis; Heather Miller; Sandro Stucki

Understanding 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.


Proceedings of the Fifth Annual Scala Workshop on | 2014

MorphScala: safe class morphing with macros

Aggelos Biboudis; Eugene Burmako

The goal of this paper is to design an easy type-safe metaprogramming API for Scala to capture generative metaprogramming tasks that depend on existing definitions to generate others, by writing meta-code as close as possible to regular Scala code. MorphScala, is a simple domain specific language based on the for-comprehension syntax, that introduces the class morphing metaprogramming technique to the Scala programming language. Class morphing is a flavor of compile time reflection (CTR) over fields or methods of classes and interfaces. The enabling technologies for MorphScala are Scala macros and quasiquotes that provide a powerful API for compile-time transformations.


symposium on scala | 2018

Initialization patterns in Dotty

Fengyun Liu; Aggelos Biboudis

Safe object initialization is important to avoid a category of runtime errors in programming languages. In this paper, we provide a case study of the initialization patterns on the Dotty compiler. In particular, we find that calling dynamic-dispatching methods, the usage of closures and instantiating nested classes are important for initialization of Scala objects. Based on the study, we conclude that existing proposals for safe initialization are inadequate for Scala.


Proceedings of the 17th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences - GPCE 2018 | 2018

A Practical Unification of Multi-stage Programming and Macros

Nicolas Stucki; Aggelos Biboudis

Program 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. In this work we draw upon a long line of research on metaprogramming, starting with Lisp, MetaML and MetaOCaml. We provide direct support for quotes, splices and top-level splices, all regulated uniformly by a level-counting Phase Consistency Principle. Our design enables the construction and combination of code values for both expressions and types. Moreover, code generation can happen either at runtime à la MetaML or at compile time, in a macro fashion, à la MacroML. We provide an implementation of our design in Scala and we present two case studies. The first implements the Hidden Markov Model, Shonan Challenge for HPC. The second implements the staged streaming library Strymonas.


Sigplan Notices | 2016

Recaf: Java dialects as libraries

Aggelos Biboudis; Pablo Inostroza; Tijs van der Storm

Mainstream 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.

Collaboration


Dive into the Aggelos Biboudis's collaboration.

Top Co-Authors

Avatar

Yannis Smaragdakis

National and Kapodistrian University of Athens

View shared research outputs
Top Co-Authors

Avatar

Nick Palladinos

National and Kapodistrian University of Athens

View shared research outputs
Top Co-Authors

Avatar

George Fourtounis

National and Kapodistrian University of Athens

View shared research outputs
Top Co-Authors

Avatar

Yannis Smaragdakis

National and Kapodistrian University of Athens

View shared research outputs
Top Co-Authors

Avatar

Fengyun Liu

École Polytechnique Fédérale de Lausanne

View shared research outputs
Top Co-Authors

Avatar

Olivier Blanvillain

École Polytechnique Fédérale de Lausanne

View shared research outputs
Top Co-Authors

Avatar

Sandro Stucki

École Polytechnique Fédérale de Lausanne

View shared research outputs
Top Co-Authors

Avatar

Vlad Ureche

École Polytechnique Fédérale de Lausanne

View shared research outputs
Top Co-Authors

Avatar

Prodromos Gerakios

National and Kapodistrian University of Athens

View shared research outputs
Top Co-Authors

Avatar

Eugene Burmako

École Polytechnique Fédérale de Lausanne

View shared research outputs
Researchain Logo
Decentralizing Knowledge