VLDB 2026 Research / reviewers in the wild / expert
Vlad Ureche
dblp:93/9447
· DBLP profile ↗
7ranked-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 · 6 · 4 first-authorSystems, architecture and hardware · 1
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 · 30% Compilers and program optimization · 30% Program analysis · 24% | |
| Computer architecture, parallel and distributed computing, and storage systems
1 paper |
High-performance computing · 100% |
Topics — the 11 heaviest of 11, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Compilers and program optimization › memory optimization
data layout transformation |
0.4 | 2 | 2015 | Automating ad hoc data representation transformations · OOPSLA 2015 Late data layout: unifying data representation transformations · OOPSLA 2014 |
Programming languages and type systems
type systems |
0.4 | 2 | 2015 | Automating ad hoc data representation transformations · OOPSLA 2015 Late data layout: unifying data representation transformations · OOPSLA 2014 |
Program analysis › static analysis
call graph construction |
0.2 | 1 | 2016 | Call graphs for languages with parametric polymorphism · OOPSLA 2016 |
Programming languages and type systems › type systems › polymorphism
parametric polymorphism |
0.2 | 2 | 2016 | Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations · OOPSLA 2013 Call graphs for languages with parametric polymorphism · OOPSLA 2016 |
Runtime systems and virtual machines › binary translation
bytecode translation |
0.2 | 1 | 2013 | Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations · OOPSLA 2013 |
Runtime systems and virtual machines › virtual machine implementation
java virtual machine |
0.2 | 1 | 2013 | Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations · OOPSLA 2013 |
Compilers and program optimization
specialization |
0.2 | 1 | 2013 | Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translations · OOPSLA 2013 |
Program analysis › symbolic execution
parallel symbolic execution |
0.1 | 1 | 2011 | Parallel symbolic execution for automated real-world software testing · EuroSys 2011 |
Program analysis
symbolic execution |
0.1 | 1 | 2011 | Parallel symbolic execution for automated real-world software testing · EuroSys 2011 |
Compilers and program optimization › compiler optimization › type-based optimization
devirtualization |
0.1 | 1 | 2016 | Call graphs for languages with parametric polymorphism · OOPSLA 2016 |
High-performance computing
cluster computing |
0.0 | 1 | 2011 | Parallel symbolic execution for automated real-world software testing · EuroSys 2011 |
Methods — techniques the papers use, named apart from their topics
symbolic execution · 0.2POSIX environment modeling · 0.2
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2016 | Call graphs for languages with parametric polymorphismabstractThe performance of contemporary object oriented languages depends on optimizations such as devirtualization, inlining, and specialization, and these in turn depend on precise call graph analysis. Existing call graph analyses do not take advantage of the information provided by the rich type systems of contemporary languages, in particular generic type arguments. Many existing approaches analyze Java bytecode, in which generic types have been erased. This paper shows that this discarded information is actually very useful as the context in a context-sensitive analysis, where it significantly improves precision and keeps the running time small. Specifically, we propose and evaluate call graph construction algorithms in which the contexts of a method are (i) the type arguments passed to its type parameters, and (ii) the static types of the arguments passed to its term parameters. The use of static types from the caller as context is effective because it allows more precise dispatch of call sites inside the callee. Dmitry Petrashko, Vlad Ureche, Ondrej Lhoták, Martin Odersky |
OOPSLA | 2 |
| 2015 | RRB vector: a practical general purpose immutable sequenceabstractState-of-the-art immutable collections have wildly differing performance characteristics across their operations, often forcing programmers to choose different collection implementations for each task. Thus, changes to the program can invalidate the choice of collections, making code evolution costly. It would be desirable to have a collection that performs well for a broad range of operations. To this end, we present the RRB-Vector, an immutable sequence collection that offers good performance across a large number of sequential and parallel operations. The underlying innovations are: (1) the Relaxed-Radix-Balanced (RRB) tree structure, which allows efficient structural reorganization, and (2) an optimization that exploits spatio-temporal locality on the RRB data structure in order to offset the cost of traversing the tree. In our benchmarks, the RRB-Vector speedup for parallel operations is lower bounded by 7x when executing on 4 CPUs of 8 cores each. The performance for discrete operations, such as appending on either end, or updating and removing elements, is consistently good and compares favorably to the most important immutable sequence collections in the literature and in use today. The memory footprint of RRB-Vector is on par with arrays and an order of magnitude less than competing collections. Nicolas Stucki, Tiark Rompf, Vlad Ureche, Phil Bagwell |
ICFP | 3 |
| 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 | 1 |
| 2014 | Late data layout: unifying data representation transformationsabstractValues need to be represented differently when interacting with certain language features. For example, an integer has to take an object-based representation when interacting with erased generics, although, for performance reasons, the stack-based value representation is better. To abstract over these implementation details, some programming languages choose to expose a unified high-level concept (the integer) and let the compiler choose its exact representation and insert coercions where necessary. Vlad Ureche, Eugene Burmako, Martin Odersky |
OOPSLA | 1 |
| 2013 | Miniboxing: improving the speed to code size tradeoff in parametric polymorphism translationsabstractParametric polymorphism enables code reuse and type safety. Underneath the uniform interface exposed to programmers, however, its low level implementation has to cope with inherently non-uniform data: value types of different sizes and semantics (bytes, integers, floating point numbers) and reference types (pointers to heap objects). On the Java Virtual Machine, parametric polymorphism is currently translated to bytecode using two competing approaches: homogeneous and heterogeneous. Homogeneous translation requires boxing, and thus introduces indirect access delays. Heterogeneous translation duplicates and adapts code for each value type individually, producing more bytecode. Therefore bytecode speed and size are at odds with each other. This paper proposes a novel translation that significantly reduces the bytecode size without affecting the execution speed. The key insight is that larger value types (such as integers) can hold smaller ones (such as bytes) thus reducing the duplication necessary in heterogeneous translations. In our implementation, on the Scala compiler, we encode all primitive value types in long integers. The resulting bytecode approaches the performance of monomorphic code, matches the performance of the heterogeneous translation and obtains speedups of up to 22x over the homogeneous translation, all with modest increases in size. Vlad Ureche, Cristian Talau, Martin Odersky |
OOPSLA | 1 |
| 2012 | StagedSAC: a case study in performance-oriented DSL developmentabstractDomain-specific languages (DSLs) can bridge the gap between high-level programming and efficient execution. However, implementing compiler tool-chains for performance oriented DSLs requires significant effort. Recent research has produced methodologies and frameworks that promise to reduce this development effort by enabling quick transition from library-only, purely embedded DSLs to optimizing compilation. In this case study we report on our experience implementing a compiler for StagedSAC. StagedSAC is a DSL for arithmetic processing with multidimensional arrays modeled after the stand-alone language SAC (Single Assignment C). The main language feature of both SAC and StagedSAC is a loop construction that enables high-level and concise implementations of array algorithms. At the same time, the functional semantics of the two languages allow for advanced compiler optimizations and parallel code generation. Vlad Ureche, Tiark Rompf, Arvind K. Sujeeth, Hassan Chafi, Martin Odersky |
PEPM | 1 |
| 2011 | Parallel symbolic execution for automated real-world software testingabstractThis paper introduces Cloud9, a platform for automated testing of real-world software. Our main contribution is the scalable parallelization of symbolic execution on clusters of commodity hardware, to help cope with path explosion. Cloud9 provides a systematic interface for writing "symbolic tests" that concisely specify entire families of inputs and behaviors to be tested, thus improving testing productivity. Cloud9 can handle not only single-threaded programs but also multi-threaded and distributed systems. It includes a new symbolic environment model that is the first to support all major aspects of the POSIX interface, such as processes, threads, synchronization, networking, IPC, and file I/O. We show that Cloud9 can automatically test real systems, like memcached, Apache httpd, lighttpd, the Python interpreter, rsync, and curl. We show how Cloud9 can use existing test suites to generate new test cases that capture untested corner cases (e.g., network stream fragmentation). Cloud9 can also diagnose incomplete bug fixes by analyzing the difference between buggy paths before and after a patch. Stefan Bucur, Vlad Ureche, Cristian Zamfir, George Candea |
EuroSys | 2 |